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

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

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

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

次のステップでは、SAML ベースの IdP が使用されるように 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 を選択し、[Create Pool] (プールの作成) を選択します。

SAML IdP の設定

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

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

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

SAML IdP を使用したユーザーの認証

SAML ベースの IdP でフェデレートするには、ユーザーがログインを開始する URL を判断します。AWS フェデレーションは、IdP 開始ログインを使用します。AD FS 2.0 では、URL の形式は https://<fqdn>/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices です。

Amazon Cognito に SAML IdP のサポートを追加するには、まず iOS アプリケーションまたは Android アプリケーションから SAML ID プロバイダーを使用してユーザーを認証する必要があります。SAML IdP との統合と認証に使用するコードは、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"; }