Amazon Cognito ユーザープール用に、サードパーティの ID プロバイダー (IdP) を使用して AWS IAM アイデンティティセンター (AWS シングルサインオンの後継) を設定したいと考えています。
簡単な説明
Amazon Cognito ユーザープールでは、サードパーティの ID プロバイダー (IdP) を経由してサインインできます。ユーザーは IAM Identity Center を使用し、Security Assertion Markup Language version 2.0 (SAML 2.0) IdP を介してフェデレーションできます。詳細については、「Amazon Cognito ユーザープールでのフェデレーションサインインの仕組み」を参照してください。
IAM アイデンティティセンターと統合されたユーザープールにより、ユーザーは Amazon Cognito からユーザープールトークンを取得できます。詳細については、「ユーザープールでのトークンの使用」を参照してください。
解決策
Amazon Cognito ユーザープールを IAM アイデンティティセンターと統合するには、次の手順を実行します。
**注:**アプリクライアントを含むユーザープールがすでにある場合は、次のセクションをスキップしてください。
アプリクライアントとドメイン名を使用して Amazon Cognito ユーザープールを作成する
1. ユーザープールを作成します。
2. アプリクライアントを追加し、ホストされたウェブ UI を設定します。
3. ユーザープールのドメイン名を追加します。
**注:**すでに IAM アイデンティティセンター環境が機能している場合は、次のセクションをスキップしてください。
IAM アイデンティティセンターを有効にしてユーザーを追加する
1. IAM アイデンティティセンターを有効にする前に、前提条件と考慮事項を確認してください。
2. IAM アイデンティティセンターを有効にします。
3. ID ソースを選択し、ユーザーを作成します。
IAM アイデンティティセンターコンソールから SAML アプリケーションを設定する
1. IAM アイデンティティセンターコンソールを開き、ナビゲーションペインから [アプリケーション] を選択します。
2. [アプリケーションの追加] と [カスタム SAML 2.0 アプリケーションの追加] を選択し、[次へ] を選択します。
3. [アプリケーションの設定] ページで、[表示名] と [説明] を入力します。
4. IAM アイデンティティセンターの SAML メタデータファイルの URL をコピーするか、[ダウンロード] ハイパーリンクを選択します。これらのリソースは後のステップでユーザープールに IdP を作成するために使用します。
5. [アプリケーションメタデータ] で [メタデータの値を手動で入力します] を選択します。続いて、次の値を指定します。
重要:****[ドメインプレフィックス]、[リージョン]、[ユーザープール ID] の値は、必ず環境固有の情報に置き換えてください。
Application Assertion Consumer Service (ACS) URL: https://<domain-prefix>.auth.<region>.amazoncognito.com/saml2/idpresponse
Application SAML audience: urn:amazon:cognito:sp:<userpool-id>
6. [送信] を選択します。次に、追加したアプリケーションの [詳細] ページに移動します。
7. [アクション] ドロップダウンリストを選択し、[属性マッピングの編集] を選択します。続いて、次の属性を指定します。
アプリケーションのユーザー属性: [件名]
注: [件名] は事前入力されています。
IAM アイデンティティセンターの次の文字列値またはユーザー属性にマッピングされます: ${user:subject}
フォーマット: 永続的
アプリケーションのユーザー属性:email
IAM アイデンティティセンターの次の文字列値またはユーザー属性にマッピングされます:${user:email}
フォーマット: 基本
マッピングされた属性は、サインイン時に Amazon Cognito に送信されます。ユーザープールの必須属性がすべてここにマッピングされていることを確認してください。マッピングに使用できる属性の詳細については、「サポートされている IAM ID センターの属性」を参照してください。
8. 変更を保存します。
9. [ユーザーを割り当て] ボタンを選択し、ユーザーをアプリケーションに割り当てます。
IAM アイデンティティセンターをユーザープールの SAML IdP として設定する
1. ユーザープールに SAML IdP を設定します。次の設定を適用します。
[メタデータドキュメント] で、メタデータ URL を入力するか、前のセクションのステップ 4 でダウンロードしたファイルをアップロードします。詳細については、「サードパーティー SAML ID プロバイダーと Amazon Cognito ユーザープールとの統合」を参照してください。
SAML プロバイダー名を入力します。詳細については、「SAML IDプロバイダー名の選択」を参照してください。
(オプション) 任意の SAML ID を入力します。
2. SAML プロバイダー属性マッピングを設定します。次の設定を適用します。
SAML 属性フィールドに、前のセクションのステップ 7 で指定したユーザー属性値と一致する Eメール値を指定します。[ユーザープール属性] フィールドで、ドロップダウンリストから [E メール] を選択します。
**注:**前のセクションのステップ 7 で IAM アイデンティティセンターで設定したその他の属性をすべて追加します。
3. 変更を保存します。
IdP をユーザープールアプリクライアントと統合する
1. 新しい Amazon Cognito コンソールにサインインします。
2. [ユーザープール] を選択し、適切なユーザープールを選択します。
3. [アプリ統合] タブを選択し、[アプリクライアントリスト] を選択します。
4. 適切なアプリクライアントを選択します。
5. [ホストされた UI] セクションから [編集] を選択します。
6. 適切な IdP を選択します。
7. 変更を保存します。
セットアップをテストする
1. ホスト UI を起動するか、以下の命名パターンを使用してログインエンドポイント URL を作成します。
https://example_domain_prefix.auth.example_region.amazoncognito.com/login?response_type=token&client_id=example_client_id&redirect_uri=example_redirect_url
例: https://my-user-pool.auth.us-east-1.amazoncognito.com/login?response_type=code&client_id=a1b2c3d4e5f6g7h8i9j0k1l2m3&redirect_uri=https://example.com
[OAuth 2.0 の付与タイプ] で、[認証コード付与] を選択すると、ログインエンドポイントは Amazon Cognito にユーザーのサインイン時に認証コードを返すように要求します。[OAuth 2.0 の付与タイプ] で、Amazon Cognito がユーザーのサインイン時にアクセストークンを返すように [暗黙的な付与] を選択します。次に、URL の response_type=code を response_type=token に置き換えます。
2. [IAM IdC] を選択します。
アプリクライアントのコールバック URL にリダイレクトされた場合は、すでにブラウザにユーザーとしてログインしています。ユーザープールトークンは、Web ブラウザーのアドレスバーの URL に直接表示されます。
注: このステップをスキップするには、認証エンドポイントの URL を以下の命名パターンで作成します。
https://yourDomainPrefix.auth.region.amazoncognito.com/oauth2/authorize?response_type=token&identity_provider=samlProviderName&client_id=yourClientId&redirect_uri=redirectUrl&scope=allowedOauthScopes
3. ユーザー認証情報を入力し、[ログイン] を選択します。
4. ブラウザのアドレスバーに Amazon Cognito からのコードまたはトークンが含まれるコールバック URL にリダイレクトされたら、セットアップは完了です。
**注:**Amazon Cognito は、サービスプロバイダー (SP) が開始するサインインのみをサポートします。セットアップをテストするには、ログインエンドポイントまたは認証エンドポイントを使用する必要があります。IAM アイデンティティセンターの AWS アクセスポータルで IdP によるサインインを開始しても機能しません。