SAML プロバイダーを ID プール IdP としてセットアップする - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SAML プロバイダーを ID プール IdP としてセットアップする

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

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

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

注記

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

SAML ID プロバイダー (IdP) を追加するには
  1. Amazon Cognito コンソール[ID プールの管理] をクリックします。アイデンティティプールを選択します。

  2. [ユーザーアクセス] タブを選択します。

  3. [ID プロバイダーを追加] を選択します。

  4. SAML を選択します。

  5. IdPs の IAM から SAML ID プロバイダーを選択しますAWS アカウント。新しい SAML プロバイダーを追加する場合は、[新しいプロバイダの作成] を選択して IAM コンソールに移動します。

  6. Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエストするロールを設定するには、[ロール設定] を設定します。

    1. その IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。

      1. [ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースクレーム、クレームを比較するオペレータ、このロール選択と一致するおよびロール割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

      2. [ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

  7. Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。

    1. プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

    2. sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピングを使用] を選択します。

    3. プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピングを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

  8. [変更を保存] を選択します。

SAML IdP の設定

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

SAML IdP の SAML メタデータに複数の署名証明書が含まれている場合、サインイン時に、SAML アサーションが SAML メタデータ内のいずれかの証明書と一致すると、ユーザープールは 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 アイデンティティに提供できます。

ID プール API リクエストの Logins マップで SAML アサーションを繰り返したり、再生したりすることはできません。SAML アサーションを再生すると、そのアサーション ID は以前の API リクエストの ID と重複します。Logins マップで SAML アサーションを受け入れることができる API オペレーションにはGetId、、GetCredentialsForIdentityGetOpenIdToken、および GetOpenID が含まれますTokenForDeveloperIdentity。SAML アサーション ID は、ID プール認証フローの API リクエストごとに 1 回再生できます。例えば、同じ SAML アサーションを GetId リクエストと後続の GetCredentialsForIdentity リクエストでは指定できますが、2 番目の GetId リクエストでは指定できません。

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"; }