Amazon OpenSearch Serverless のデータアクセスコントロール - Amazon OpenSearch サービス

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

Amazon OpenSearch Serverless のデータアクセスコントロール

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

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

データアクセスポリシーと IAM ポリシーの比較

データアクセスポリシーは、 AWS Identity and Access Management (IAM) ポリシーとは論理的に分離されます。IAM アクセス許可は、CreateCollectionListAccessPolicies などのサーバーレス API オペレーションへのアクセスを制御します。データアクセスポリシーは、 PUT <index>や など、 OpenSearch サーバーレスがサポートするOpenSearch オペレーションへのアクセスを制御しますGET _cat/indices

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

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

{ "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 サーバーレスコレクションのデータにアクセスするのに十分ではありません。関連付けられたプリンシパルにも、IAM 許可 aoss:APIAccessAll および aoss:DashboardsAccessAll に対するアクセスが付与されている必要があります。どちらのアクセス許可もコレクションリソースへのフルアクセスを許可し、Dashboards アクセス許可は OpenSearch Dashboards へのアクセスも提供します。プリンシパルがこれらの両方の IAM 許可を持っていない場合、コレクションにリクエストを送信しようとすると 403 エラーが表示されます。詳細については、「API オペレーションの使用 OpenSearch 」を参照してください。

データアクセスポリシーの設定に必要な IAM アクセス許可

OpenSearch Serverless のデータアクセスコントロールは、次の IAM アクセス許可を使用します。IAM 条件を指定して、ユーザーを特定のアクセスポリシー名に制限できます。

  • aoss:CreateAccessPolicy – アクセスポリシーを作成します。

  • aoss:ListAccessPolicies – すべてのアクセスポリシーを一覧表示します。

  • aoss:GetAccessPolicy – 特定のアクセスポリシーの詳細を表示します。

  • aoss:UpdateAccessPolicy – アクセスポリシーを変更します。

  • aoss:DeleteAccessPolicy – アクセスポリシーを削除します。

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

{ "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許可が必要です。詳細については、「API オペレーションの使用 OpenSearch 」を参照してください。

ポリシー構文

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

要素 説明
ResourceType アクセス許可が適用されるリソースのタイプ (コレクションまたはインデックス)。エイリアスとテンプレートのアクセス許可はコレクションレベルで、データの作成、変更、検索のアクセス許可はインデックスレベルです。詳細については、「Supported policy permissions」(サポートされているポリシーのアクセス許可) を参照してください。
Resource リソース名やパターンのリスト。パターンはプレフィックスの後にワイルドカード (*) が続くもので、これによって関連付けられたアクセス許可を複数のリソースに適用できます。
  • コレクションの形式は collection/<name|pattern> です。

  • インデックスの形式は index/<collection-name|pattern>/<index-name|pattern/> です。

Permission 指定されたリソースに付与するアクセス許可のリスト。これによって許可されるアクセス許可とオペレーションの完全なリストについては、「サポートされている OpenSearch APIオペレーションとアクセス許可」を参照してください。
Principal アクセス権が付与される 1 つ以上のプリンシパルのリスト。プリンシパルは、IAM ロール ARN または SAML アイデンティティにすることができます。これらのプリンシパルは現在の AWS アカウント内にある必要があります。データアクセスポリシーはクロスアカウントアクセスを直接サポートしていませんが、別の のユーザーがコレクション所有アカウントで引き受け AWS アカウント ることができるロールをポリシーに含めることができます。詳細については、「クロスアカウントデータアクセス」を参照してください。

次のポリシー例では、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:* を付与した場合、そのユーザーは関連付けられたインデックスですべてのアクションを実行できます。制限の厳しいアクセス許可が制限の緩いアクセス許可よりも優先されることはありません。

サポートされているポリシーのアクセス許可

データアクセスポリシーでは、次のアクセス許可がサポートされています。各アクセス許可で許可される API オペレーションについては OpenSearch、「」を参照してくださいサポートされている OpenSearch APIオペレーションとアクセス許可

コレクションアクセス許可

  • aoss:CreateCollectionItems

  • aoss:DeleteCollectionItems

  • aoss:UpdateCollectionItems

  • aoss:DescribeCollectionItems

  • aoss:*

インデックスアクセス許可

  • aoss:ReadDocument

  • aoss:WriteDocument

  • aoss:CreateIndex

  • aoss:DeleteIndex

  • aoss:UpdateIndex

  • aoss:DescribeIndex

  • aoss:*

OpenSearch Dashboards のサンプルデータセット

OpenSearch Dashboards には、独自のデータを追加する前に Dashboards を調べるのに役立つ視覚化、ダッシュボード、その他のツールを含むサンプルデータセットが用意されています。このサンプルデータからインデックスを作成するには、処理するデータセットへのアクセスを許可する、データアクセスポリシーが必要になります。次のポリシーでは、ワイルドカード (*) を使用して、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>" ] } ]

データアクセスポリシーの作成 (コンソール)

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

OpenSearch サーバーレスデータアクセスポリシーを作成するには
  1. https://console.aws.amazon.com/aos/home で Amazon OpenSearch Service コンソールを開きます。

  2. 左側のナビゲーションペインで、[Serverless] (サーバーレス) を展開し、[Data access control] (データアクセスコントロール) を選択します。

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

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

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

  6. [Add principals] (プリンシパルの追加) を選択し、データアクセス権が付与される IAM ロール、または SAML ユーザーとグループを 1 つ、または複数選択します。

    注記

    ドロップダウンメニューからプリンシパルを選択するには、iam:ListUsers および iam:ListRoles アクセス許可 (IAM プリンシパルの場合) および aoss:ListSecurityConfigs アクセス許可 (SAML ID の場合) が必要です。

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

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

  9. [作成] を選択します。ポリシーを作成してからアクセス許可が適用されるまでに 1 分程度かかる場合があります。5 分以上かかる場合は、AWS Support にお問い合わせください。

重要

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

データアクセスポリシーの作成 (AWS CLI)

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

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

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 オペレーションを使用できるようになりました。

データアクセスポリシーの表示

コレクションを作成する前に、アカウント内の既存のデータアクセスポリシーをプレビューして、コレクション名と一致するリソースパターンがあるポリシーを確認することをお勧めします。次のListAccessPoliciesリクエストは、アカウント内のすべてのデータアクセスポリシーを一覧表示します。

aws opensearchserverless list-access-policies --type data

リクエストは、設定されているすべてのデータアクセスポリシーに関する情報を返します。1 つの特定のポリシーで定義されているパターンルールを表示するには、レスポンスの accessPolicySummaries 要素の内容でポリシー情報を探します。このポリシーtypeの と をメモnameし、GetAccessPolicyリクエストでこれらのプロパティを使用して、次のポリシーの詳細を含むレスポンスを受け取ります。

{ "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 コマンドを使用します。

データアクセスポリシーの更新

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

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

次のUpdateAccessPolicyリクエストは、データアクセスポリシーを新しいポリシー JSON ドキュメントで更新します。

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

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

データアクセスポリシーの削除

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

DeleteAccessPolicy コマンドを使用することもできます。

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

クロスアカウントデータアクセス

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