SAML ID プロバイダー (ID プール) - Amazon Cognito

SAML ID プロバイダー (ID プール)

Amazon Cognito は、Security Assertion Markup Language 2.0 (SAML 2.0) を経由した ID プロバイダーでの認証をサポートしています。SAML をサポートする ID プロバイダーを Amazon Cognito で使用して、ユーザーにシンプルなオンボーディングフローを提供することができます。SAML をサポートする ID プロバイダーは、ユーザーが引き受けることができる IAM ロールを指定し、ユーザーごとに異なる権限セットを付与できるようにします。

SAML プロバイダーの ID プールの設定

次のステップでは、SAML ベースのプロバイダーが使用されるように ID プールを設定する方法について説明します。

注記

SAML プロバイダーをサポートするように ID プールを設定する前に、まず IAM コンソールで SAML ID プロバイダーを設定する必要があります。詳細については、IAM ユーザーガイドの「サードパーティーの SAML ソリューションプロバイダーと AWS の統合」を参照してください。

SAML プロバイダーがサポートされるように ID プールを設定するには

  1. Amazon Cognito コンソールにサインインし、[Manage Identity Pools] (ID プールの管理) をクリックしてから [Create new identity pool] (新しい ID プールの作成) をクリックします。

  2. [認証プロバイダー] セクションで、[SAML] タブを選択します。

  3. SAML プロバイダーの ARN を選択し、[プールの作成] を選択します。

SAML ID プロバイダーの設定

SAML プロバイダーを作成したら、SAML ID プロバイダーを設定し、ID プロバイダーと AWS の間に証明書利用者の信頼を追加します。多くの ID プロバイダーが URL の指定を許可しています。ID プロバイダーはこの URL から、証明書利用者の情報と証明書が含まれる XML ドキュメントを読み取ることができます。AWS には、https://signin.aws.amazon.com/static/saml-metadata.xml を使用できます。次のステップでは、ID プロバイダーからの SAML アサーションレスポンスを設定し、AWS が必要とするクレームを入力します。クレーム設定の詳細については、「認証レスポンスの SAML アサーションを設定する」を参照してください。

SAML を使用したユーザーロールのカスタマイズ

Amazon Cognito で SAML を使用することで、ロールをエンドユーザー用にカスタマイズすることが可能になります。SAML ベースの ID プロバイダーでは、拡張フローのみサポートされています。SAML ベースの認証プロバイダーを使用するために、ID プールに認証されたロールや認証されていないロールを指定する必要はありません。https://aws.amazon.com/SAML/Attributes/Role クレーム属性は、カンマ区切りのロールおよびプロバイダー ARN のペアを 1 つ以上指定します。これらは、ユーザーが引き受けることができるロールです。SAML ID プロバイダーは、ID プロバイダーから入手できるユーザー属性情報に基づいてロール属性を入力するように設定できます。SAML アサーションで複数のロールを受け取った場合、customRoleArn を呼び出すときにオプションの getCredentialsForIdentity パラメーターを入力する必要があります。パラメーターで受け取った入力ロールは、SAML アサーションのクレームに含まれるロールと一致する場合にユーザーが引き受けます。

SAML ID プロバイダーを使用したユーザーの認証

SAML ベースの ID プロバイダーと連携するには、ログインの開始に使用される URL を決定する必要があります。AWS フェデレーション は IdP 初期化ログインを使用します。AD FS 2.0 では、URL の形式は https://<fqdn>/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices です。

Amazon Cognito に SAML ID プロバイダーのサポートを追加するには、まず iOS アプリケーションまたは Android アプリケーションから SAML ID プロバイダーを使用してユーザーを認証する必要があります。SAML ID プロバイダーとの統合と認証を行うコードは、SAML プロバイダーに固有です。ユーザーが認証されたら、Amazon Cognito API を使用して、結果として得られた SAML アサーションを Amazon Cognito アイデンティティに提供できます。

Android

Android SDK を使用している場合、以下のように、ログインマップに SAML アサーションを入力できます。

Map logins = new HashMap(); logins.put("arn:aws:iam::aws account id:saml-provider/name", "base64 encoded assertion response"); // Now this should be set to CognitoCachingCredentialsProvider object. CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(context, identity pool id, region); credentialsProvider.setLogins(logins); // If SAML assertion contains multiple roles, resolve the role by setting the custom role credentialsProvider.setCustomRoleArn("arn:aws:iam::aws account id:role/customRoleName"); // This should trigger a call to the Amazon Cognito service to get the credentials. credentialsProvider.getCredentials();

iOS

iOS SDK を使用している場合、以下のように、AWSIdentityProviderManager で SAML アサーションを指定できます。

- (AWSTask<NSDictionary<NSString*,NSString*> *> *) logins { //this is hardcoded for simplicity, normally you would asynchronously go to your SAML provider //get the assertion and return the logins map using a AWSTaskCompletionSource return [AWSTask taskWithResult:@{@"arn:aws:iam::aws account id:saml-provider/name":@"base64 encoded assertion response"}]; } // If SAML assertion contains multiple roles, resolve the role by setting the custom role. // Implementing this is optional if there is only one role. - (NSString *)customRoleArn { return @"arn:aws:iam::accountId:role/customRoleName"; }