Amazon Web Services ブログ
Amazon Cognito ユーザープールが SAML フェデレーションをサポート [パブリックベータ]
昨年、Amazon Cognito Identity に SAML フェデレーションのサポートを追加しました。この機能は SAML レスポンスから一時的な AWS クレデンシャル情報を取得できます。 Amazon Cognito Identity は API ベースのアプローチをサポートしており、AWS クレデンシャル情報を取得するためには、SAML IdP (Identity Provider) の SAML 応答を解析し、Amazon Cognito Identity API をコールします。
Amazon Cognito ユーザープールは、あなたのモバイルおよび Web アプリに、セキュアでスケーラブルなユーザーディレクトリを使用したサインアップおよびサインイン機能を追加します。本日、Amazon Cognito ユーザープールの SAML IdP (Identity Provider) フェデレーションをアナウンスできることを嬉しく思います。本機能はユーザーディレクトリに SAML IdP のユーザーをマッピングし、 SAML IdP でユーザーを認証後にユーザープールから標準認証トークンを取得します。ユーザープールは SAML 2.0 POST Binding エンドポイントをサポートします。これにより、クライアントは SAML アサーションレスポンスの解析が不要になり、ユーザープールはユーザーエージェント (訳注: Web ブラウザ等) を介して IdP から直接 SAML レスポンスを受信します。
SAML フェデレーション機能の一つとして、ユーザープールはアプリの代わりに service provider (SP) として機能します。ユーザープールはアプリの単一のアイデンティティ管理ポイントになります。そのため、アプリは複数の SAML IdP を統合する必要はなくなります。 Amazon Cognito コンソールを利用して複数の SAML IdP を追加し、属性のマッピングを定義することで、すぐに利用を開始できます。
Amazon Cognito ユーザープールを利用して、あなたのモバイルおよび Web アプリの SAML IdP を有効にするには、次の手順を実行します。
1. Amazon Cognito ユーザープールで SAML IdP を設定する
Amazon Cognito ユーザープールで SAML IdP を設定するためには、SAML IdP の metadata ファイル、または metadata エンドポイント URL を取得します。 IdP のドキュメントを参照すると、 metadata を見つけることができます。 Microsoft Active Directory Federation Service (AD FS) を利用している場合の metadata URL の例はこちらです: https://<yourservername>/FederationMetadata/2007-06/FederationMetadata.xml.
SAML IdP metadata を取得した後、以下を行います:
- Amazon Cognito コンソールにサインインし、 Manage your User Pools を選択し、 Federation セクションの Identity providers を選択します。
- ユーザープールを未作成の場合は、新規作成します。
- Identity Provider via SAML Federation を選択します。
- Metadata document に metadata URL を入力するか metadata ファイルをアップロードします。
- Provider name を入力します。必要に応じて、 Identifiers に SAML IdP の識別子を入力します。カンマ区切りで複数指定できます。
SAML IdP metadata エンドポイントが公開されている場合は、 metadata URL を入力することを推奨します。こうすることで、Amazon Cognito は metadata の有効期限が近づくと自動的に更新を行います。 SAML provider の設定に metadata URL を使用している場合は、 metadata エンドポイント用の SSL が正しく設定されていることを確認してください。
2. 新しい SAML IdP からのフェデレーションを App client に対して許可する
次に、Amazon Cognito コンソールで利用可能な App client に対して、SAML IdP を設定します:
- App integration セクションの App client settings を選択します。
App client を作成済みの場合は表示されます。App client を未作成の場合は、 General Settings セクションの App clients から新規作成します。 - 先ほど設定した SAML IdP を見つけて、 App client の対応するチェックボックスを有効にします。
- Callback URL(s) を入力します。アプリ URL のホワイトリストをカンマ区切りで複数指定できます。 Amazon Cognito は認証に成功すると許可された URL にリダイレクトすることができます。
- Sign out URL(s) を入力します。アプリ URL のホワイトリストをカンマ区切りで複数指定できます。 Amazon Cognito はサインアウトに成功すると許可された URL にリダイレクトすることができます。
- Allowed OAuth Flows を選択します。 Amazon Cognito トークンをユーザーエージェントへ公開しない場合は、 Authorization code grant を選択します。公開クライアントの場合は、 Implicit grant を選択します。詳細はこちら: https://tools.ietf.org/html/rfc6749#section-4.1 今回の例では両方を選択します。
- クライアントに払い出されるトークンのスコープを Allowed OAuth Scopes で選択します。アクセストークンを利用して、ユーザーに Amazon Cognito ユーザーレベル API (ChangePassword, UpdateUserAttributes, 他) を許可する場合は、‘aws.cognito.signin.user.admin’ を選択します。 App client のユーザーに ID トークンを発行する場合は、‘openid’を選択します。今回の例では全てを選択します。
- Attribute mapping を選択します。これらのマッピングは、 SAML IdP の SAML アサーションのクレームをユーザープールの属性にマップします。ユーザープールの全ての必須属性がマッピングされていることを確認してください。
3. Amazon Cognito を SAML IdP のリライング・パーティとして追加する
SAML IdP を利用するためのユーザープールの設定が完了しました。もし、まだユーザープールの Domain が未作成の場合は Amazon Cognito コンソールの Domain name を選択して作成します。 Amazon Cognito を SAML IdP のリライング・パーティとして有効化するためには、以下を参照してください。
- ユーザープールの SAML 2.0 POST Binding エンドポイント: https://<domain_prefix>.auth.<region>.amazoncognito.com/login/redirect. domain prefix と region は Domain name を選択して確認します。
- ユーザープールの SP URN: urn:amazon:cognito:sp:<user_pool_id>. user pool id は General settings を選択して確認します。
- SAML アサーション で利用する NameID やその他の必須属性が SAML IdP から提示されることを確認します。 SAML IdP から提示された NameID は、ユーザープールの SAML フェデレーションされたユーザーを一意に識別します。
4. アプリの利用を開始する
Amazon Cognito によってホストされた UI を利用して開始できます。以下の URL を Web ブラウザで開いてください:
https://<domain_prefix>.auth.<region>.amazoncognito.com/login?response_type=token&client_id=<app client id>&redirect_uri=<your redirect URI>
設定した SAML IdP がこのページに表示されます。 SAML IdP をクリックすると、 /authorize エンドポイントに遷移します。このエンドポイントは IdP にリダイレクトされます。 IdP で認証した後、再びアプリの callback URL にリダイレクトされます。
5. IdP 識別子のサポート
一般的に、アプリは複数の組織から利用することができます。アプリのユーザーを所属する組織の SAML IdP へリダイレクトするためには、ユーザープールの SAML IdP を設定する際に、 IdP 識別子を入力します。一般的に、これらの識別子は組織の email アドレスのドメイン名を利用します。ユーザーが IdP にサインインする際に email アドレスを要求し、ドメイン名を抽出し、 idp_identifier として /authorize エンドポイントに付与します。IdP 識別子が IdP に紐付けされている場合は、 Amazon Cognito は自動的に対応する IdP へリダイレクトします。次の例は idp_identifier パラメータを付与した状態の /authorize エンドポイントです。
https://<domain_prefix>.auth.us-east-1.amazoncognito.com/authorize?idp_identifier=cognito.com&response_type=token&client_id=<app client id>&redirect_uri=<your redirect URI>
Amazon Cognito ユーザープールの SAML フェデレーション機能は、複数の SAML IdP をセットアップしアプリと統合することを手助けします。このことにより、SAML フェデレーション機能を利用する際に、アプリは SAML IdP 毎の処理を考慮する必要がなくなります。 Amazon Cognito がアプリの代わりに処理を行います。
この機能に対するフィードバックをお待ちしています。詳細は、Amazon Cognito Developer Guide の Creating and Managing User Pools をご確認ください。Amazon Cognito forums に投稿することで、私達に連絡することができます。
原文:Amazon Cognito User Pools supports federation with SAML.(翻訳:SA藤原)