AWS Identity and Access Management を使用した SAML フェデレーションの有効化
OpenSearch UI は、多くの ID プロバイダーが使用するオープンスタンダードである Security Assertion Markup Language 2.0 (SAML) をサポートしています。これにより、AWS Identity and Access Management (IAM) との ID フェデレーションが可能になります。このサポートにより、アカウントまたは組織のユーザーは、IAM ロールを引き受けることで OpenSearch UI に直接アクセスできます。エンドユーザーが外部 ID プロバイダーで認証し、OpenSearch UI の定義されたページに直接ルーティングできる ID プロバイダー主導 (IdP) シングルサインオンエクスペリエンスを作成できます。OpenSearch UI および関連するデータソースにアクセスするためのアクセス許可が異なるさまざまな IAM ロールを引き受けるように、エンドユーザーまたはグループを設定することで、詳細なアクセス制御を実装することもできます。
このトピックでは、OpenSearch UI で SAML を使用するための設定手順を段階的に説明します。これらの手順では、例として Okta アイデンティティおよびアクセス管理アプリケーションを設定する手順を使用します。Azure Active Directory や Ping など、他の ID プロバイダーの設定手順は似ています。
トピック
ステップ 1: ID プロバイダーアプリケーションを設定する (Okta)
OpenSearch UI で SAML を使用するには、まず ID プロバイダーを設定します。
タスク 1: Okta ユーザーを作成する
-
管理者権限を持つユーザーとして、https://login.okta.com/
で Okta 組織にサインインします。 -
管理者コンソールのナビゲーションペインの [ディレクトリ] で、[ユーザー] を選択します。
-
[Add Person] (ユーザーを追加) を選択します。
-
[名前] には、ユーザーの名前を入力します。
-
[姓] には、ユーザーの姓を入力します。
-
[ユーザー名] には、ユーザーのユーザー名を E メール形式で入力します。
-
[パスワードを設定する] を選択してパスワードを入力します。
-
(オプション) ユーザーが初回サインイン時にパスワードを変更する必要がない場合は、[初回ログイン時にパスワードを変更する必要があります] チェックボックスをオフにします。
-
[保存] を選択します。
タスク 2: グループを作成して割り当てる
-
管理者権限を持つユーザーとして、https://login.okta.com/
で Okta 組織にサインインします。 -
管理者コンソールのナビゲーションペインの [ディレクトリ] で、[グループ] を選択します。
-
[グループの追加] を選択します。
-
グループ名を入力し、[保存] を選択します。
-
新しく作成したグループを選択し、[ユーザーの割り当て] を選択します。
-
プラス記号 ([+]) を選択し、[完了] を選択します。
-
(オプション) ステップ 1~6 を繰り返して、さらにグループを追加します。
タスク 3: Okta アプリケーションを作成する
-
管理者権限を持つユーザーとして、https://login.okta.com/
で Okta 組織にサインインします。 -
管理者コンソールのナビゲーションペインの [アプリケーション] で、[アプリケーション] を選択します。
-
[Create App Integration] (アプリの統合の作成) を選択します。
-
サインイン方法として SAML 2.0 を選択し、[次へ] を選択します。
-
アプリ統合用の名前 (
OpenSearch_UIなど) を入力し、[次へ] を選択します。 -
アプリに次の値を入力します。他の値を変更する必要はありません。
-
1. [シングルサインオン URL] の場合、商用 AWS リージョンに
https://signin.aws.amazon.com/samlを入力するか、お住いのリージョンに固有の URL を入力します。 -
2. [オーディエンス URI (SP Entity ID)] には、
urn:amazon:webservicesを入力します。 -
3. [名前の形式] には
EmailAddressを入力します。
-
-
[次へ] を選択します。
-
[私は Okta の顧客で、内部アプリを追加します] を選択し、次に [これは当社が作成した内部アプリです] を選択します。
-
[Finish] を選択してください。
-
[割り当て] を選択してから、[割り当てる] を選択します。
-
[グループに割り当てる] を選択し、追加するグループの横にある [割り当てる] を選択します。
-
[Done] (完了) をクリックします。
タスク 4: Okta の詳細設定をセットアップする
カスタム SAML アプリケーションを作成したら、次の手順を実行します。
-
管理者権限を持つユーザーとして、https://login.okta.com/
で Okta 組織にサインインします。 管理者コンソールの [全般] エリアで、[SAML 設定] で [編集] を選択します。
-
[次へ] を選択します。
-
次の形式を使用して、[デフォルトのリレーステート] を OpenSearch UI エンドポイントに設定します:
https://.region.console.aws.amazon.com/aos/home?region=region#opensearch/applications/application-id/redirectToDashboardURL以下に例を示します。
https://us-east-2.console.aws.amazon.com/aos/home?region=us-east-2#opensearch/applications/abc123def4567EXAMPLE/redirectToDashboardURL -
[属性ステートメント (オプション)] で、以下のプロパティを追加します。
-
[ロール] 属性を使用して、IAM ロールと ID プロバイダーをカンマ区切り形式で指定します。この同じ IAM ロールと ID プロバイダーを、後続のステップで AWS 設定をセットアップする際に使用します。
-
[RoleSessionName] の [user.login] を設定します。これは、ロールが引き受けられたときに発行される一時的な認証情報の識別子として使用されます。
参考までに:
名前 名前の形式 形式 例 https://aws.amazon.com/SAML/Attributes/Role未指定
arn:aws:iam::aws-account-id:role/role-name,arn:aws:iam::aws-account-id:saml-provider/provider-namearn:aws:iam::111222333444:role/oktarole,arn:aws:iam::111222333444:saml-provider/oktaidphttps://aws.amazon.com/SAML/Attributes/RoleSessionName未指定
user.loginuser.login -
-
属性プロパティを追加したら、[次へ] を選択し、[終了] を選択します。
属性は、以下の画像に示されているものと同様の形式である必要があります。[デフォルトのリレーステート] 値は、Okta からのシングルサインオン検証を完了した後、アカウントまたは組織のエンドユーザー向けランディングページを定義する URL です。OpenSearch UI の任意のページに設定し、その URL を目的のエンドユーザーに提供できます。
ステップ 2: Okta 向けの AWS 設定をセットアップする
Okta 向けの AWS 設定をセットアップするには、次のタスクを実行します。
タスク 1: Okta 情報を収集する
このステップでは、Okta 情報を収集して、後で AWS で設定できるようにする必要があります。
-
管理者権限を持つユーザーとして、https://login.okta.com/
で Okta 組織にサインインします。 -
[サインオン] タブのページの右下隅で、[SAML セットアップ手順の表示] を選択します。
-
[ID プロバイダーシングルサインオン URL] の値をコピーまたは保存します。この URL は、SQL Workbench/J
などのサードパーティー SQL クライアントに接続するときに使用できます。 -
ブロック 4 で ID プロバイダーメタデータを使用し、メタデータファイルを .xml 形式 (例:
metadata.xml) で保存します。
タスク 2: IAM プロバイダーを作成する
IAM プロバイダーを作成するには、次の手順を実行します。
AWS マネジメントコンソール にサインインして、IAM コンソール https://console.aws.amazon.com/iam/
を開きます。 -
ナビゲーションペインの [アクセス管理] で [ID プロバイダー] を選択します。
-
[プロバイダーを追加] をクリックします。
-
[プロバイダーのタイプ] に、[SAML] を選択します。
-
[プロバイダー名] に名前を入力します。
-
[メタデータドキュメント] で、[ファイルを選択] を選択し、前にダウンロードしたメタデータファイル (.xml) をアップロードします。
-
[プロバイダーを追加] をクリックします。
タスク 3: IAM ロールを作成する
AWS Identity and Access Management ロールを作成するには、次のステップを実行します:
AWS マネジメントコンソール にサインインして、IAM コンソール https://console.aws.amazon.com/iam/
を開きます。 -
ナビゲーションペインの [アクセス管理] で、[ロール] を選択します。
-
[ロールの作成] を選択してください。
-
[信頼されたエンティティタイプ] で、[SAML 2.0 フェデレーション] を選択します。
-
[SAML 2.0 ベースのプロバイダー] として、前に作成した ID プロバイダーを選択します。
-
[プログラムによるアクセスと AWS マネジメントコンソール によるアクセスを許可] を選択します。
-
[次へ] を選択します。
-
[アクセス許可ポリシー] リストで、前に作成したポリシーと [OpenSearchFullAccess] のチェックボックスをオンにします。
-
[次へ] を選択します。
-
[確認] エリアの [ロール名] に、ロールの名前を入力します (例:
oktarole)。 -
(オプション) [説明] に、ロールの目的についての簡単な説明を入力してください。
-
[ロールの作成] を選択してください。
-
先ほど作成したロールに移動し、[信頼関係] タブを選択し、[信頼ポリシーを編集] を選択します。
-
[ステートメントを編集] ペインの 「STS のアクションを追加] で、[TagSession] のボックスを選択します。
-
[ポリシーの更新] を選択してください。
ステップ 3: IAM で Amazon OpenSearch Service アクセスポリシーを作成する
OpenSearch アクセス制御の IAM ロールを設定する方法について説明します。IAM ロールを使用すると、Okta ユーザーグループが OpenSearch リソースにアクセスするための詳細なアクセス制御を実装できます。このトピックでは、2 つのサンプルグループを使用した IAM ロールベースの設定を示します。
次の例に示すように、バックエンドロールマッピングを使用して Amazon OpenSearch Service ドメインロールを IAM ロールにマッピングできます。
{ "bob-group": { "hosts": [], "users": [], "reserved": false, "hidden": false, "backend_roles": [ "arn:aws:iam::111222333444:role/bob-group" ], "and_backend_roles": [] }, "alice-group": { "hosts": [], "users": [], "reserved": false, "hidden": false, "backend_roles": [ "arn:aws:iam::111222333444:role/alice-group" ], "and_backend_roles": [] } }
ステップ 4: SAML で ID プロバイダーが開始したシングルサインオンエクスペリエンスを検証する
[デフォルトのリレーステート] URL を開き、Okta 認証ページを開きます。エンドユーザーの認証情報を入力します。OpenSearch UI に自動的にリダイレクトされます。
次の図に示すように、ナビゲーションパネルの下部にあるユーザーアイコンを選択すると、現在の認証情報を確認できます。
ナビゲーションパネルの下部にある開発者ツールにアクセスし、コンソールでクエリを実行することで、ユーザーの詳細なアクセス制御の権限を確認することもできます。次にサンプルクエリを示します:
ステップ 5: SAML 属性ベースの詳細なアクセス制御を設定する
Amazon OpenSearch Service を使用すると、SAML による詳細なアクセス制御を使用して、ID プロバイダーのユーザーとグループを OpenSearch の詳細なアクセス制御のユーザーやロールに動的にマッピングできます。これらのロールを特定の OpenSearch ドメインとサーバーレスコレクションにスコープし、インデックスレベルのアクセス許可とドキュメントレベルのセキュリティを定義できます。
注記
詳細なアクセス制御の詳細については、「Amazon OpenSearch Service のきめ細かなアクセスコントロール」を参照してください。
トピック
詳細なアクセス制御のための SAML 属性
- subjectKey
-
E メールやユーザー名などの一意のユーザー属性にマッピングされ、認証するユーザーを識別します。
- rolesKey
-
認可するためのロールまたはアクセス許可を決定する IdP のグループまたはロール属性にマッピングします。
タスク 1: 詳細なアクセス制御のために Okta を設定する
詳細なアクセス制御のために Okta を設定するには
-
[属性ステートメント] セクションに OpenSearch ユーザープリンシパルの新しい属性を追加します。
-
名前:
UserName -
値:
${user-email}
この属性は、認証用の OpenSearch きめ細かなアクセスコントロール設定の [サブジェクトキー] として使用されます。
-
-
[グループ属性ステートメント] セクションにロール用のグループ属性を追加します:
-
名前:
groups -
フィルタ:
OpenSearch_xxx
この属性は、認可するためのグループを OpenSearch の詳細なアクセス制御ロールにマッピングするための [ロールキー] として使用されます。
-
タスク 2: OpenSearch ドメインで SAML を設定する
OpenSearch ドメインで SAML を設定するには
-
AWS Management Console で、OpenSearch UI ユーザーに対して詳細なアクセス制御を有効化する OpenSearch Service ドメインを特定します。
-
特定のドメインの詳細ページに移動します。
-
[セキュリティ設定] タブを選択し、[編集] をクリックします。
-
[IAM フェデレーションを使用する SAML] を拡張します。
-
Okta で定義した
subjectKeyとroleKeyを入力します。 -
[変更を保存] を選択します。
AWS CLI を使用して詳細なアクセス制御を設定することもできます。
aws opensearch create-domain \ --domain-name testDomain \ --engine-version OpenSearch_1.3 \ --cluster-config InstanceType=r5.xlarge.search,InstanceCount=1,DedicatedMasterEnabled=false,ZoneAwarenessEnabled=false,WarmEnabled=false \ --access-policies '{"Version": "2012-10-17", "Statement":[{"Effect":"Allow","Principal":{"AWS":"*"},"Action":"es:*","Resource":"arn:aws:es:us-east-1:12345678901:domain/neosaml10/*"}]}' \ --domain-endpoint-options '{"EnforceHTTPS":true,"TLSSecurityPolicy":"Policy-Min-TLS-1-2-2019-07"}' \ --node-to-node-encryption-options '{"Enabled":true}' \ --encryption-at-rest-options '{"Enabled":true}' \ --advanced-security-options '{"Enabled":true,"InternalUserDatabaseEnabled":true,"MasterUserOptions":{"MasterUserName":"********","MasterUserPassword":"********"}, "IAMFederationOptions":{"Enabled": true,"SubjectKey":"TestSubjectKey","RolesKey":"TestRolesKey"}}' \ --ebs-options "EBSEnabled=true,VolumeType=gp2,VolumeSize=300" \ --no-verify-ssl \ --endpoint-url https://es.us-east-1.amazonaws.com \ --region us-east-1
既存のドメインを更新するには:
aws opensearch update-domain-config \ --domain-name testDomain \ --advanced-security-options '{"Enabled":true,"InternalUserDatabaseEnabled":true,"MasterUserOptions":{"MasterUserName":"********","MasterUserPassword":"********"}, "IAMFederationOptions":{"Enabled": true,"SubjectKey":"TestSubjectKey","RolesKey":"TestRolesKey"}}' \ --ebs-options "EBSEnabled=true,VolumeType=gp2,VolumeSize=300" \ --no-verify-ssl \ --endpoint-url https://es.us-east-1.amazonaws.com \ --region us-east-1
タスク 3: OpenSearch Serverless コレクションで SAML を設定する
OpenSearch Serverless で SAML ベースの詳細なアクセス制御を設定するには
-
AWS マネジメントコンソール を開き、Amazon OpenSearch Service に移動します。
-
ナビゲーションペインの [サーバーレス] で、[セキュリティ] を選択し、[認証] を選択します。
-
[IAM フェデレーション] セクションで、[編集] を選択します。
この設定を使用して、SAML 属性ベースの詳細なアクセス制御を制御できます。IAM フェデレーションはデフォルトで無効になっています。
-
[IAM フェデレーションを有効にする] を選択します。
-
Okta で定義した
subjectKeyとroleKeyの値を入力します。詳細については、「詳細なアクセス制御のための SAML 属性 」を参照してください。
-
[Save] (保存) をクリックします。
-
ナビゲーションペインで、[サーバーレス] の [データアクセスポリシー] を選択します。
-
既存のポリシーを更新するか、新しいポリシーを作成します。
-
ルールを展開し、[プリンシパルを追加] を選択し、[IAM フェデレーションのユーザーとグループ] を選択します。
-
必要なプリンシパルを追加し、[保存] を選択します。
-
[Grant] (付与) を選択します。
-
このルールで、次の操作を行います。
-
選択したプリンシパルに対して定義するアクセス許可を選択します。
-
アクセス許可を適用するコレクションを指定します。
-
必要に応じて、インデックスレベルのアクセス許可を定義します。
注記
複数のルールを作成して、異なるプリンシパルグループに異なるアクセス許可を割り当てることができます。
-
-
完了したら、[保存] を選択します。
-
[作成] を選択します。
または、CLI を使用して、次に示すようにコレクションのセキュリティ設定を作成することもできます。
aws opensearchserverless create-security-config --region "region" --type iamfederation --name "configuration_name" --description "description" --iam-federation-options '{"groupAttribute":"GroupKey","userAttribute":"UserKey"}'