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

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

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

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

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

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

前提条件

このチュートリアルの手順を実行するには、次の前提条件の完了が必要です。

  • Cognito ユーザープールを作成する[Cognito user pool sign-in options] (Cognito ユーザープールのサインインオプション) で、[Username] (ユーザー名) が選択されていることを確認します。

  • Cognito ID プールを作成する。次のステップで IAM ロールを作成するときに必要になるため、プールの [Identity ID] (アイデンティティ ID) をメモしておきます。

ユーザープールと ID プールは、同じ AWS リージョン に存在している必要があります。

ステップ 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": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:region:account:domain/domain-name/*" } ] }
  • ドメインへのすべてのトラフィックに HTTPS を必須とする

  • ノード間の暗号化

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

ステップ 3: Cognito ユーザーとグループを設定する

ドメインの作成中に、Amazon Cognito 内でマスターユーザーと、制限付きユーザーおよびグループを設定します。

  1. Amazon Cognito コンソール (https://console.aws.amazon.com/cognito/v2/) に移動し、[User pools] (ユーザープール) を選択します。

  2. ユーザープールを選択して設定を開き、[Create user] (ユーザーを作成) を選択します。

  3. master-user のユーザー名とパスワードを指定して、[Create user] (ユーザーを作成) を選択します。

  4. limited-user という名前の別のユーザーを作成します。

  5. [Groups] (グループ) タブに進み、[Create group] (グループを作成) を選択します。グループ master-user-group に名前を付けます。

  6. [IAM role] (IAM ロール) ドロップダウンで MasterUserRole を選択し、[Create group] (グループを作成) を選択します。

  7. LimitedUserRole IAM ロールを使用する limited-user-group という名前の別のグループを作成します。

次に、ユーザーを対応するグループに追加します。

  1. master-user-group を選択し、[Add user to group] (ユーザーをグループに追加) を選択し、master-user を選択します。

  2. limited-user-group を選択し、[Add user to group] (ユーザーをグループに追加) を選択し、limited-user を選択します。

最後に、ID プールを設定します。

  1. [App integration] (アプリケーションの統合) タブに移動します。[App clients and analytics] (アプリクライアントと分析) で、ドメインのクライアント ID をメモします。

  2. 左側のナビゲーションペインで [Federated Identities] (フェデレーティッドアイデンティティ) を選択します。

  3. ID プールを選択し、[Edit identity pool] (ID プールを編集) を選択します。

  4. [Authentication providers] (認証プロバイダー) を展開し、ドメインのユーザープール ID とアプリケーションクライアント ID を見つけて、[Use default role] (デフォルトのロールを使用) を [Choose role from token] (トークンからロールを選択) に変更します。

  5. ロール解決」で、[拒否] を選択します。この設定では、認証後に IAM ロールを受け取るには、ユーザーがグループに属している必要があります。

  6. [Save changes] (変更の保存) をクリックします。

ステップ 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 を追加し、[マップ] を選択します。