チュートリアル: 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 内でマスターユーザーと、制限付きユーザーおよびグループを設定します。
-
Amazon Cognito コンソール (https://console.aws.amazon.com/cognito/v2/
) に移動し、[User pools] (ユーザープール) を選択します。 -
ユーザープールを選択して設定を開き、[Create user] (ユーザーを作成) を選択します。
-
master-user
のユーザー名とパスワードを指定して、[Create user] (ユーザーを作成) を選択します。 -
limited-user
という名前の別のユーザーを作成します。 -
[Groups] (グループ) タブに進み、[Create group] (グループを作成) を選択します。グループ
master-user-group
に名前を付けます。 -
[IAM role] (IAM ロール) ドロップダウンで
MasterUserRole
を選択し、[Create group] (グループを作成) を選択します。 -
LimitedUserRole
IAM ロールを使用するlimited-user-group
という名前の別のグループを作成します。
次に、ユーザーを対応するグループに追加します。
-
master-user-group
を選択し、[Add user to group] (ユーザーをグループに追加) を選択し、master-user
を選択します。 -
limited-user-group
を選択し、[Add user to group] (ユーザーをグループに追加) を選択し、limited-user
を選択します。
最後に、ID プールを設定します。
-
[App integration] (アプリケーションの統合) タブに移動します。[App clients and analytics] (アプリクライアントと分析) で、ドメインのクライアント ID をメモします。
-
左側のナビゲーションペインで [Federated Identities] (フェデレーティッドアイデンティティ) を選択します。
-
ID プールを選択し、[Edit identity pool] (ID プールを編集) を選択します。
-
[Authentication providers] (認証プロバイダー) を展開し、ドメインのユーザープール ID とアプリケーションクライアント ID を見つけて、[Use default role] (デフォルトのロールを使用) を [Choose role from token] (トークンからロールを選択) に変更します。
-
「ロール解決」で、[拒否] を選択します。この設定では、認証後に IAM ロールを受け取るには、ユーザーがグループに属している必要があります。
-
[Save changes] (変更の保存) をクリックします。
ステップ 4: OpenSearch Dashboards でロールをマッピングする
ユーザーとグループの設定が完了したので、マスターユーザーとして OpenSearch Dashboards にサインインし、ユーザーをロールにマッピングできます。
-
OpenSearch Service コンソールに戻り、作成したドメインの OpenSearch Dashboards URL に移動します。URL はこの形式に従います:
。domain-endpoint
/_dashboards/ -
master-user
認証情報を使用してサインインします。 -
[Add sample data] (サンプルデータを追加) を選択し、サンプルフライトデータを追加します。
-
左側のナビゲーションペインで [Security] (セキュリティ)、[Roles] (ロール)、[Create role] (ロールを作成) の順に選択します。
-
ロールに
new-role
という名前を付けます。 -
[Index] (インデックス) には、
opensearch_dashboards_sample_data_fli*
(Elasticsearch ドメインのkibana_sample_data_fli*
) を指定します。 -
[Index permissions] (インデックスアクセス許可) には、[read] (読み取り) を選択します。
-
[ドキュメントレベルのセキュリティ] で、以下のクエリを指定します。
{ "match": { "FlightDelay": true } }
-
フィールドレベルのセキュリティでは、[除外] を選択し、
FlightNum
を指定します。 -
[匿名化] では、
Dest
を指定します。 -
[作成] を選択します。
-
[マッピングされたユーザー]、[マッピングの管理] を選択します。外部 ID として
LimitedUserRole
の Amazon リソースネーム (ARN) を追加し、[Map] (マッピング) を選択します。 -
ロールのリストに戻り、[opensearch_dashboards_user] を選択します。[マッピングされたユーザー]、[マッピングの管理] を選択します。バックエンドロールとして
LimitedUserRole
の ARN を追加し、[マップ] を選択します。