

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon OpenSearch Serverless のデータアクセスコントロール
<a name="serverless-data-access"></a>

Amazon OpenSearch Serverless のデータアクセスコントロールを使用すると、アクセスメカニズムやネットワークソースに関係なく、ユーザーがコレクションやインデックスにアクセスできるようにすることができます。IAM ロールと [SAML アイデンティティ](serverless-saml.md)へのアクセスを提供できます。

アクセス許可は、コレクションとインデックスリソースに適用される*データアクセスポリシー*を通じて管理します。データアクセスポリシーは、特定のパターンに一致するコレクションとインデックスにアクセス許可を自動的に割り当てることにより、大規模なコレクションを管理するのに役立ちます。1 つのリソースに複数のデータアクセスポリシーを適用できます。OpenSearch Dashboards URL にアクセスするには、コレクションのデータアクセスポリシーが必要になります。

**Topics**
+ [データアクセスポリシーと IAM ポリシーの比較](#serverless-data-access-vs-iam)
+ [データアクセスポリシーの設定に必要な IAM アクセス許可](#serverless-data-access-permissions)
+ [ポリシー構文](#serverless-data-access-syntax)
+ [サポートされているポリシーのアクセス許可](#serverless-data-supported-permissions)
+ [OpenSearch Dashboards のサンプルデータセット](#serverless-data-sample-index)
+ [データアクセスポリシーの作成 (コンソール)](#serverless-data-access-console)
+ [データアクセスポリシーの作成 (AWS CLI)](#serverless-data-access-cli)
+ [データアクセスポリシーの表示](#serverless-data-access-list)
+ [データアクセスポリシーの更新](#serverless-data-access-update)
+ [データアクセスポリシーの削除](#serverless-data-access-delete)
+ [クロスアカウントデータアクセス](#serverless-data-access-cross)

## データアクセスポリシーと IAM ポリシーの比較
<a name="serverless-data-access-vs-iam"></a>

データアクセスポリシーは、 AWS Identity and Access Management (IAM) ポリシーとは論理的に分離されます。IAM アクセス許可は、`CreateCollection` や `ListAccessPolicies` などの[サーバーレス API オペレーション](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/Welcome.html)へのアクセスを制御します。データアクセスポリシーは、OpenSearch Serverless がサポートする `PUT <index>` や `GET _cat/indices` などの [OpenSearch オペレーション](#serverless-data-supported-permissions)へのアクセスを制御します。

`aoss:CreateAccessPolicy` や `aoss:GetAccessPolicy` (次のセクションで説明) などのデータアクセスポリシーの API オペレーションへのアクセスを制御する IAM アクセス許可は、データアクセスポリシーで指定されているアクセス許可には影響しません。

例えば、IAM ポリシーによってユーザーによる `collection-a` に対するデータアクセスポリシーの作成は拒否されているが、すべてのコレクション (`*`) に対するデータアクセスポリシーの作成は許可されているとします。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "aoss:CreateAccessPolicy"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "aoss:collection": "collection-a"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "aoss:CreateAccessPolicy"
            ],
            "Resource": "*"
        }
    ]
}
```

------

ユーザーが*すべて*のコレクション (`collection/*` または `index/*/*`) に特定のアクセス許可を付与するデータアクセスポリシーを作成した場合、ポリシーはコレクション A を含むすべてのコレクションに適用されます。

**重要**  
OpenSearch Serverless コレクション内のデータにアクセスするためには、データアクセスポリシー内で許可が付与されているだけでは不十分です。関連付けられたプリンシパル*にも*、IAM アクセス許可 `aoss:APIAccessAll` および `aoss:DashboardsAccessAll` に対するアクセスが付与されている必要があります。いずれの許可もコレクションリソースに対するフルアクセスを付与し、Dashboards 許可も OpenSearch Dashboards に対するアクセスを提供します。プリンシパルがこれらの両方の IAM 許可を持っていない場合、コレクションにリクエストを送信しようとすると 403 エラーが表示されます。詳細については、「[OpenSearch API オペレーションの使用](security-iam-serverless.md#security_iam_id-based-policy-examples-data-plane)」を参照してください。

## データアクセスポリシーの設定に必要な IAM アクセス許可
<a name="serverless-data-access-permissions"></a>

OpenSearch Serverless のデータアクセスコントロールは、次の IAM アクセス許可を使用します。IAM 条件を指定して、ユーザーを特定のアクセスポリシー名に制限できます。
+ `aoss:CreateAccessPolicy` – アクセスポリシーを作成します。
+ `aoss:ListAccessPolicies` – すべてのアクセスポリシーを一覧表示します。
+ `aoss:GetAccessPolicy` – 特定のアクセスポリシーの詳細を表示します。
+ `aoss:UpdateAccessPolicy` – アクセスポリシーを変更します。
+ `aoss:DeleteAccessPolicy` – アクセスポリシーを削除します。

次の ID ベースのアクセスポリシーでは、ユーザーはすべてのアクセスポリシーを表示し、リソースパターン `collection/logs` を含むポリシーを更新できます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "aoss:ListAccessPolicies",
                "aoss:GetAccessPolicy"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "aoss:UpdateAccessPolicy"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aoss:collection": [
                        "logs"
                    ]
                }
            }
        }
    ]
}
```

------

**注記**  
さらに、OpenSearch Serverless には、コレクションリソースの `aoss:APIAccessAll` および `aoss:DashboardsAccessAll` アクセス許可が必要です。詳細については、「[OpenSearch API オペレーションの使用](security-iam-serverless.md#security_iam_id-based-policy-examples-data-plane)」を参照してください。

## ポリシー構文
<a name="serverless-data-access-syntax"></a>

データアクセスポリシーには、次の要素を持つ一連のルールが含まれています。


| Element | 説明 | 
| --- | --- | 
| ResourceType | アクセス許可が適用されるリソースのタイプ (コレクションまたはインデックス)。エイリアスとテンプレートのアクセス許可はコレクションレベルで、データの作成、変更、検索のアクセス許可はインデックスレベルです。詳細については、「[Supported policy permissions](#serverless-data-supported-permissions)」(サポートされているポリシーのアクセス許可) を参照してください。 | 
| Resource | リソース名やパターンのリスト。パターンはプレフィックスの後にワイルドカード (\$1) が続くもので、これによって関連付けられたアクセス許可を複数のリソースに適用できます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/opensearch-service/latest/developerguide/serverless-data-access.html) | 
| Permission | 指定されたリソースに付与するアクセス許可のリスト。これによって許可されるアクセス許可とオペレーションの完全なリストについては、「[サポートされる OpenSearch API オペレーションとアクセス許可](serverless-genref.md#serverless-operations)」を参照してください。 | 
| Principal | アクセス権が付与される 1 つ以上のプリンシパルのリスト。プリンシパルは、IAM ロール ARN または SAML アイデンティティにすることができます。これらのプリンシパルは現在の AWS アカウント内にある必要があります。データアクセスポリシーはクロスアカウントアクセスを直接サポートしていませんが、別の のユーザーがコレクション所有アカウントで引き受け AWS アカウント ることができるロールをポリシーに含めることができます。詳細については、「[クロスアカウントデータアクセス](#serverless-data-access-cross)」を参照してください。 | 

次のポリシー例では、`autopartsinventory` というコレクションおよび `sales*` というプレフィックスで始まるすべてのコレクションにエイリアスとテンプレートのアクセス許可を付与します。また、`autopartsinventory` コレクション内のすべてのインデックス、および `orders*` というプレフィックスで始まる `salesorders` コレクション内のすべてのインデックスに読み取りおよび書き込みアクセス許可を付与します。

```
[
   {
      "Description": "Rule 1",
      "Rules":[
         {
            "ResourceType":"collection",
            "Resource":[
               "collection/autopartsinventory",
               "collection/sales*"
            ],
            "Permission":[
               "aoss:CreateCollectionItems",
               "aoss:UpdateCollectionItems",
               "aoss:DescribeCollectionItems"
            ]
         },
         {
            "ResourceType":"index",
            "Resource":[
               "index/autopartsinventory/*",
               "index/salesorders/orders*"
            ],
            "Permission":[
               "aoss:*"
            ]
         }
      ],
      "Principal":[
         "arn:aws:iam::123456789012:user/Dale",
         "arn:aws:iam::123456789012:role/RegulatoryCompliance",
         "saml/123456789012/myprovider/user/Annie",
         "saml/123456789012/anotherprovider/group/Accounting"
      ]
   }
]
```

ポリシー内でアクセスを明示的に拒否することはできません。したがって、ポリシーのアクセス許可はすべて追加的です。例えば、あるポリシーでユーザーに `aoss:ReadDocument` を付与し、別のポリシーで `aoss:WriteDocument` を付与した場合、ユーザーには*両方*のアクセス許可が付与されます。3 番目のポリシーで同じユーザーに `aoss:*` を付与した場合、そのユーザーは関連付けられたインデックスで*すべて*のアクションを実行できます。制限の厳しいアクセス許可が制限の緩いアクセス許可よりも優先されることはありません。

## サポートされているポリシーのアクセス許可
<a name="serverless-data-supported-permissions"></a>

データアクセスポリシーでは、次のアクセス許可がサポートされています。各アクセス許可で実行できる OpenSearch API オペレーションについては、「[サポートされる OpenSearch API オペレーションとアクセス許可](serverless-genref.md#serverless-operations)」を参照してください。

**コレクションアクセス許可**
+ `aoss:CreateCollectionItems`
+ `aoss:DeleteCollectionItems`
+ `aoss:UpdateCollectionItems`
+ `aoss:DescribeCollectionItems`
+ `aoss:*`

**インデックスアクセス許可**
+ `aoss:ReadDocument`
+ `aoss:WriteDocument`
+ `aoss:CreateIndex`
+ `aoss:DeleteIndex`
+ `aoss:UpdateIndex`
+ `aoss:DescribeIndex`
+ `aoss:*`

## OpenSearch Dashboards のサンプルデータセット
<a name="serverless-data-sample-index"></a>

OpenSearch Dashboards には、独自のデータを追加する前に Dashboards を調べるのに役立つ、視覚化、ダッシュボード、その他ツールを備えた、[サンプルデータセット](https://opensearch.org/docs/latest/dashboards/quickstart-dashboards/#adding-sample-data)が用意されています。このサンプルデータからインデックスを作成するには、処理するデータセットへのアクセスを許可する、データアクセスポリシーが必要になります。次のポリシーでは、ワイルドカード (`*`) を使用して、3 つのサンプルデータセットすべてへのアクセスを許可します。

```
[
  {
    "Rules": [
      {
        "Resource": [
          "index/<collection-name>/opensearch_dashboards_sample_data_*"
        ],
        "Permission": [
          "aoss:CreateIndex",
          "aoss:DescribeIndex",
          "aoss:ReadDocument"
        ],
        "ResourceType": "index"
      }
    ],
    "Principal": [
      "arn:aws:iam::<account-id>:user/<user>"
    ]
  }
]
```

## データアクセスポリシーの作成 (コンソール)
<a name="serverless-data-access-console"></a>

ビジュアルエディタを使用して、または JSON 形式で、データアクセスポリシーを作成できます。ポリシーで定義されているパターンのいずれかに一致する新しいコレクションには、対応するアクセス許可がコレクションの作成時に割り当てられます。

**OpenSearch Serverless データアクセスポリシーを作成するには**

1. [https://console.aws.amazon.com/aos/home](https://console.aws.amazon.com/aos/home ) で Amazon OpenSearch Service コンソールを開きます。

1. 左側のナビゲーションペインで **[サーバーレス]** を展開し、**[セキュリティ]** の下の **[データアクセスポリシー]** を選択します。

1. **[Create access policy]** (アクセスポリシーの作成) を選択します。

1. ポリシーの名前と説明を入力します。

1. ポリシーの最初のルールの名前を入力します。例えば、「Logs collection access」。

1. **[Add principals]** (プリンシパルの追加) を選択し、データアクセス権が付与される IAM ロール、または [SAML ユーザーとグループ](serverless-saml.md)を 1 つ、または複数選択します。
**注記**  
ドロップダウンメニューからプリンシパルを選択するには、`iam:ListUsers` および `iam:ListRoles` アクセス許可 (IAM プリンシパルの場合) および `aoss:ListSecurityConfigs` アクセス許可 (SAML ID の場合) が必要です。

1. **[Grant]** (付与) を選択し、エイリアス、テンプレート、およびインデックスのアクセス許可を選択して、関連するプリンシパルに付与します。アクセス許可とそれによって許可されるアクセスの完全なリストについては、「[サポートされる OpenSearch API オペレーションとアクセス許可](serverless-genref.md#serverless-operations)」を参照してください。

1. (オプション) ポリシーに追加のルールを設定します。

1. **[作成]** を選択します。ポリシーを作成してからアクセス許可が適用されるまでに 1 分程度かかる場合があります。5 分以上かかる場合は、[サポート](https://console.aws.amazon.com/support/home) にお問い合わせください。

**重要**  
ポリシーにインデックス許可のみが含まれていてコレクション許可が含まれていない場合でも、`Collection cannot be accessed yet. Configure data access policies so that users can access the data within this collection` といった、一致するコレクションに関するメッセージが表示されることがあります。この警告は無視できます。許可されたプリンシパルは引き続き、それぞれに割り当てられたインデックス関連の操作をコレクションで実行できます。

## データアクセスポリシーの作成 (AWS CLI)
<a name="serverless-data-access-cli"></a>

OpenSearch Serverless API を使用してデータアクセスポリシーを作成するには、`CreateAccessPolicy` コマンドを使用します。コマンドは、インラインポリシーと .json ファイルの両方を受け入れます。インラインポリシーは [JSON エスケープ文字列](https://www.freeformatter.com/json-escape.html)としてエンコードする必要があります。

次のリクエストで、データアクセスポリシーが作成されます。

```
aws opensearchserverless create-access-policy \
    --name marketing \
    --type data \
    --policy "[{\"Rules\":[{\"ResourceType\":\"collection\",\"Resource\":[\"collection/autopartsinventory\",\"collection/sales*\"],\"Permission\":[\"aoss:UpdateCollectionItems\"]},{\"ResourceType\":\"index\",\"Resource\":[\"index/autopartsinventory/*\",\"index/salesorders/orders*\"],\"Permission\":[\"aoss:ReadDocument\",\"aoss:DescribeIndex\"]}],\"Principal\":[\"arn:aws:iam::123456789012:user/Shaheen\"]}]"
```

.json ファイル内でポリシーを指定するには、`--policy file://my-policy.json` の形式を使用します。

ポリシーに含まれるプリンシパルは、アクセス権が付与された [OpenSearch オペレーション](#serverless-data-supported-permissions)を使用できるようになりました。

## データアクセスポリシーの表示
<a name="serverless-data-access-list"></a>

コレクションを作成する前に、アカウント内の既存のデータアクセスポリシーをプレビューして、コレクション名と一致するリソースパターンがあるポリシーを確認することをお勧めします。次の [ListAccessPolicies](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_ListAccessPolicies.html) リクエストでは、アカウント内のすべてのデータアクセスポリシーが一覧表示されます。

```
aws opensearchserverless list-access-policies --type data
```

リクエストは、設定されているすべてのデータアクセスポリシーに関する情報を返します。1 つの特定のポリシーで定義されているパターンルールを表示するには、レスポンスの `accessPolicySummaries` 要素の内容でポリシー情報を探します。このポリシーの `name` と `type` を書き留め、[GetAccessPolicy](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_GetAccessPolicy.html) リクエストでこれらのプロパティを使用して、次のポリシーの詳細を含むレスポンスを受信します。

```
{
    "accessPolicyDetails": [
        {
            "type": "data",
            "name": "my-policy",
            "policyVersion": "MTY2NDA1NDE4MDg1OF8x",
            "description": "My policy",
            "policy": "[{\"Rules\":[{\"ResourceType\":\"collection\",\"Resource\":[\"collection/autopartsinventory\",\"collection/sales*\"],\"Permission\":[\"aoss:UpdateCollectionItems\"]},{\"ResourceType\":\"index\",\"Resource\":[\"index/autopartsinventory/*\",\"index/salesorders/orders*\"],\"Permission\":[\"aoss:ReadDocument\",\"aoss:DescribeIndex\"]}],\"Principal\":[\"arn:aws:iam::123456789012:user/Shaheen\"]}]",
            "createdDate": 1664054180858,
            "lastModifiedDate": 1664054180858
        }
    ]
}
```

次のようにリソースフィルターを追加して、結果を特定のコレクションまたはインデックスを含むポリシーに限定できます。

```
aws opensearchserverless list-access-policies --type data --resource "index/autopartsinventory/*"
```

特定のポリシーに関する詳細を表示するには、[GetAccessPolicy](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_GetAccessPolicy.html) コマンドを使用します。

## データアクセスポリシーの更新
<a name="serverless-data-access-update"></a>

データアクセスポリシーを更新すると、関連するすべてのコレクションが影響を受けます。OpenSearch Serverless コンソールでデータアクセスポリシーを更新するには、**[Data access control]** (データアクセスコントロール) を選択し、変更するポリシーを選択して **[Edit]** (編集) を選択します。変更を行ってから、**[保存]** を選択します。

OpenSearch Serverless API を使用してデータアクセスポリシーを更新するには、`UpdateAccessPolicy` リクエストを送信します。ポリシーバージョンを含める必要があります。ポリシーバージョンは、`ListAccessPolicies` または `GetAccessPolicy` コマンドを使用して取得できます。最新のポリシーバージョンを含めると、他のユーザーによる変更を意図せず上書きしてしまうことがなくなります。

次の [UpdateAccessPolicy](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_UpdateAccessPolicy.html) リクエストは、データアクセスポリシーを新しいポリシー JSON ドキュメントで更新します。

```
aws opensearchserverless update-access-policy \
    --name sales-inventory \
    --type data \
    --policy-version MTY2NDA1NDE4MDg1OF8x \
    --policy file://my-new-policy.json
```

ポリシーを更新してから新しいアクセス許可が適用されるまでに数分かかる場合があります。

## データアクセスポリシーの削除
<a name="serverless-data-access-delete"></a>

データアクセスポリシーを削除すると、関連するすべてのコレクションは、ポリシーで定義されているアクセス権を失います。ポリシーを削除する前に、IAM ユーザーと SAML ユーザーがコレクションに適切なアクセス権を持っていることを確認してください。OpenSearch Serverless コンソールでポリシーを削除するには、ポリシーを選択し、**[Delete]** (削除) を選択します。

次のように [DeleteAccessPolicy](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_DeleteAccessPolicy.html) コマンドを使用することもできます。

```
aws opensearchserverless delete-access-policy --name my-policy --type data
```

## クロスアカウントデータアクセス
<a name="serverless-data-access-cross"></a>

クロスアカウント ID またはクロスアカウントコレクションを使用してデータアクセスポリシーを作成することはできませんが、ロールの引き受けオプションを使用してクロスアカウントアクセスを設定することもできます。例えば、`account-b` がアクセスする必要があるコレクションを `account-a` が所有している場合、`account-b` のユーザーは `account-a` でロールを引き受けることができます。ロールには IAM アクセス許可、`aoss:APIAccessAll` および `aoss:DashboardsAccessAll` があり、`account-a` のデータアクセスポリシーに含まれている必要があります。