チュートリアル: IAM マスターユーザーと Amazon Cognito 認証を使用してドメインを設定する - Amazon OpenSearch サービス

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

チュートリアル: IAM マスターユーザーと Amazon Cognito 認証を使用してドメインを設定する

このチュートリアルでは、きめ細かなアクセスコントロールの一般的な Amazon OpenSearch Service のユースケースとして、OpenSearch Dashboards の Amazon Cognito 認証を受ける IAM マスターユーザーについて説明します。

マスター IAM ロールと制限付き IAM ロールを設定し、それらを Amazon Cognito のユーザーに関連付けます。その後、マスターユーザーは OpenSearch Dashboards にサインインし、制限付きユーザーをロールにマッピングし、きめ細かなアクセスコントロールを使用してユーザーのアクセス許可を制限できます。

IAM roles and Amazon Cognito integration with OpenSearch Dashboards access control.

これらの手順は、認証に Amazon Cognito ユーザープールを使用しますが、この同じ基本プロセスは、Cognito 認証プロバイダに対して機能するため、異なる IAM ロールを異なるユーザーに割り当てることができます。

このチュートリアルでは、次の手順を実行します。

ステップ 1: マスター IAM ロールと制限付き IAM ロールを作成する

AWS Identity and Access Management (IAM) コンソールに移動し、次の 2 つの異なるロールを作成します。

  • MasterUserRole – マスターユーザー。クラスターに対するフルアクセスの許可を持ち、ロールとロールマッピングを管理します。

  • LimitedUserRole – マスターユーザーよりも制限されたロール。マスターユーザーから制限付きアクセスが許可されます。

ロールを作成する手順については、「カスタム信頼ポリシーを使用したロールの作成」を参照してください。

両方のロールに次の信頼ポリシーがある必要があります。これにより、Cognito ID プールがロールを引き受けることができます。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "{identity-pool-id}" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } }] }
注記

identity-pool-id を Amazon Cognito ID プールの一意の識別子に置き換えます。例えば、us-east-1:0c6cdba7-3c3c-443b-a958-fb9feb207aa6 と指定します。

ステップ 2: Cognito 認証を使用してドメインを作成する

Amazon OpenSearch Service コンソール (https://console.aws.amazon.com/aos/home/) に移動し、次の設定でドメインを作成します。

  • OpenSearch 1.0 以降、またはElasticsearch 7.8 以降

  • パブリックアクセス

  • マスターユーザー (前のステップで作成) として MasterUserRole できめ細かなアクセスコントロールが可能

  • OpenSearch Dashboardsで有効になっている Amazon Cognito 認証。Cognito 認証を有効にし、ユーザーと ID プールを選択する手順については、「Amazon Cognito 認証を使用するためのドメインの設定」を参照してください。

  • 次のドメインアクセスポリシー:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{account-id}:root" }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:{region}:{account-id}:domain/{domain-name}/*" } ] }
  • ドメインへのすべてのトラフィックに HTTPS を必須とする

  • ノード間の暗号化

  • 保管中のデータの暗号化

ステップ 3: Cognito ユーザーの設定

ドメインの作成中に、Amazon Cognito 開発者ガイドの「ユーザープールの作成」に従って、Amazon Cognito 内でマスターユーザーと、制限付きユーザーを設定します。最後に、「Amazon Cognito でアイデンティティプールを作成する」の手順に従ってアイデンティティプールを設定します。ユーザープールと ID プールは、同じ AWS リージョン に存在している必要があります。

ステップ 4: OpenSearch Dashboards でロールをマッピングする

ユーザーの設定が完了したので、マスターユーザーとして OpenSearch Dashboards にサインインし、ユーザーをロールにマッピングできます。

  1. OpenSearch Service コンソールに戻り、作成したドメインの OpenSearch Dashboards URL に移動します。URL はこの形式に従います: domain-endpoint/_dashboards/

  2. master-user 認証情報を使用してサインインします。

  3. [Add sample data] (サンプルデータを追加) を選択し、サンプルフライトデータを追加します。

  4. 左側のナビゲーションペインで [Security] (セキュリティ)、[Roles] (ロール)、[Create role] (ロールを作成) の順に選択します。

  5. ロールに new-role という名前を付けます。

  6. [Index] (インデックス) には、opensearch_dashboards_sample_data_fli* (Elasticsearch ドメインの kibana_sample_data_fli*) を指定します。

  7. [Index permissions] (インデックスアクセス許可) には、[read] (読み取り) を選択します。

  8. [ドキュメントレベルのセキュリティ] で、以下のクエリを指定します。

    { "match": { "FlightDelay": true } }
  9. フィールドレベルのセキュリティでは、[除外] を選択し、FlightNum を指定します。

  10. [匿名化] では、Dest を指定します。

  11. [作成] を選択します。

  12. [マッピングされたユーザー][マッピングの管理] を選択します。外部 ID として LimitedUserRole の Amazon リソースネーム (ARN) を追加し、[Map] (マッピング) を選択します。

  13. ロールのリストに戻り、[opensearch_dashboards_user] を選択します。[マッピングされたユーザー][マッピングの管理] を選択します。バックエンドロールとして LimitedUserRole の ARN を追加し、[マップ] を選択します。

ステップ 5: アクセス許可をテストする

ロールが正しくマッピングされると、制限付きユーザーとしてサインインし、アクセス許可をテストできます。

  1. 新しいプライベートブラウザウィンドウで、ドメインの OpenSearch Dashboards URL に移動し、limited-user 認証情報を使用してサインインして、[Explore on my own] (自力で調べる) を選択します。

  2. [開発ツール] に進み、デフォルトの検索を実行します。

    GET _search { "query": { "match_all": {} } }

    許可エラーに注意してください。limited-user には、クラスター全体の検索を実行する許可がありません。

  3. 別の検索を実行します。

    GET opensearch_dashboards_sample_data_flights/_search { "query": { "match_all": {} } }

    一致するすべてのドキュメントでは、[FlightDelay] フィールドが true であり、Dest フィールドが匿名化されて、FlightNum フィールドはありません。

  4. 元のブラウザウィンドウで、master-user としてサインインし、[開発ツール] を選択して、同じ検索を実行します。許可、ヒット数、一致するドキュメント、含まれるフィールドが異なっています。