チュートリアル: IAM マスターユーザーと Amazon Cognito - Amazon OpenSearch Service

チュートリアル: IAM マスターユーザーと Amazon Cognito

このチュートリアルでは、一般的なきめ細かなアクセスコントロールのユースケースとして、OpenSearch ダッシュボードの Amazon Cognito 認証を受ける IAM マスターユーザーについて説明します。これらの手順は、認証に Amazon Cognito ユーザープールを使用しますが、この同じ基本プロセスは、Cognito 認証プロバイダに対して機能するため、異なる IAM ロールを異なるユーザーに割り当てることができます。

注記

このチュートリアルでは、マスターユーザー用と制限付きユーザー用の 2 つの既存の IAM ロールがあることを前提としています。ロールが 2 つない場合は、作成します

きめ細かなアクセスコントロールの使用を開始するには

  1. 以下の設定でドメインを作成します。

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

    • 公開アクセス

    • IAM ロールをマスターユーザーとして有効にしたきめ細かなアクセスコントロール (このチュートリアルの残りの部分では IAMMasterUserRole)

    • OpenSearch ダッシュボードで有効になっている 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 を必須とする

    • ノード間の暗号化

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

  2. IAM コンソールに移動し、[ロール] を選択します。

  3. IAMMasterUserRole を選択し、[信頼関係] タブに進みます。

  4. [信頼関係の編集] を選択し、Amazon 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" } } }] }
  5. [信頼ポリシーの更新] を選択します。

  6. 同じ信頼ポリシーを 2 番目の IAM ロールに追加します (このチュートリアルの残りの部分では IAMLimitedUserRole)。

  7. Amazon Cognito コンソールに移動し、[ユーザープールの管理] を選択します。

  8. ユーザープールを選択してから、[ユーザーとグループ] を選択します。

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

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

  11. [グループ] タブに進み、[グループの作成] を選択します。

  12. グループに master-user-group という名前を付け、[IAM ロール] ドロップダウンリストで IAMMasterUserRole を選択してから、[グループの作成] を選択します。

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

  14. master-user-group を選択し、[ユーザーの追加] を選択してから、master-user を追加します。

  15. limited-user-group を選択し、[ユーザーの追加] を選択してから、limited-user を追加します。

  16. [アプリクライアントの設定] を選択し、ドメインのアプリクライアント ID をメモします。

  17. [フェデレーティッドアイデンティティ] を選択し、ID プールを選択してから、[ID プールの編集] を選択します。

  18. [認証プロバイダー] を展開し、ドメインのユーザープール ID とアプリクライアント ID を見つけて、[デフォルトロールを使用] を [トークンからロールを選択する] に変更します。

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

  20. [Save Changes] を選択します。

  21. OpenSearch Dashboards に移動します。

  22. master-user でサインインします。

  23. [サンプルデータを追加] を選択し、いくつかのサンプルフライトデータを追加します。

  24. [セキュリティ]、[ロール]、[ロールの作成] を選択します。

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

  26. インデックス許可では、インデックスパターンに opensearch_dashboards_sample_data_fli* を指定します (Elasticsearch ドメインの kibana_sample_data_fli*)。

  27. アクショングループで、[読み取り] を選択します。

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

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

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

  31. [Create] を選択します。

  32. [マッピングされたユーザー]、[マッピングの管理] を選択します。次に、外部アイデンティティとして IAMLimitedUserRole の ARN を追加し、[Map] (マップ) を選択します。

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

  34. 新しいプライベートブラウザウィンドウで、Dashboards に移動し、limited-user を使用してサインインして、[自分で探す] を選択します。

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

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

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

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

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

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

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