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 オペレーションへのアクセスを制御します。データアクセスポリシーは、OpenSearch Serverless がサポートする PUT <index>GET _cat/indices などの OpenSearch オペレーションへのアクセスを制御します。

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

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

データアクセスポリシーでは、次のアクセス許可がサポートされています。各アクセス許可で実行できる OpenSearch API オペレーションについては、「サポートされる 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 Serverless データアクセスポリシーを作成するには
  1. Amazon OpenSearch Service コンソール (https://console.aws.amazon.com/aos/home) を開きます。

  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 要素の内容でポリシー情報を探します。このポリシーの name と type を書き留め、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 コンソールでデータアクセスポリシーを更新するには、[Data access control] (データアクセスコントロール) を選択し、変更するポリシーを選択して [Edit] (編集) を選択します。変更を行ってから、[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 コンソールでポリシーを削除するには、ポリシーを選択し、[Delete] (削除) を選択します。

次のように 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 のデータアクセスポリシーに含まれている必要があります。