SAML 署名と暗号化 - Amazon Cognito

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

SAML 署名と暗号化

SAML 2.0 サインインは、認証フローのリクエストとレスポンスのベアラとしてアプリケーションのユーザーを中心に構築されます。ユーザーが転送中にこれらのSAMLドキュメントを読み取りまたは変更しないようにしたい場合があります。これを行うには、ユーザープールの SAML ID プロバイダー (IdPs) に署名SAMLと暗号化を追加します。SAML 署名すると、ユーザープールはSAMLサインインリクエストとサインアウトリクエストに署名を追加します。ユーザープールのパブリックキーを使用すると、IdP は変更されていないSAMLリクエストを受信していることを確認できます。次に、IdP が応答し、ユーザーのブラウザセッションにSAMLアサーションを渡すと、IdP はその応答を暗号化して、ユーザーが独自の属性と権限を検査できないようにします。

SAML 署名と暗号化では、ユーザープールオペレーション中のすべての暗号化SAMLオペレーションで、Amazon Cognito が生成する user-pool-provided キーを使用して署名と暗号文を生成する必要があります。現在、外部キーを使用してリクエストに署名したり、暗号化されたアサーションを受け入れるようにユーザープールを設定することはできません。

注記

ユーザープール証明書は 10 年間有効です。年に 1 回、Amazon Cognito はユーザープールの新しい署名証明書と暗号化証明書を生成します。Amazon Cognito は、署名証明書をリクエストするときに最新の証明書を返し、最新の署名証明書を使用してリクエストに署名します。IdP は、有効期限が切れていないユーザープール暗号化証明書を使用してSAMLアサーションを暗号化できます。以前の証明書は、その期間全体にわたって引き続き有効であり、パブリックキーは証明書間で変更されません。ベストプラクティスとして、プロバイダー設定で証明書を毎年更新します。

IdP からの暗号化されたSAMLレスポンスの受け入れ

Amazon Cognito と IdP は、ユーザーがサインインおよびサインアウトするときに、SAMLレスポンスの機密性を確立できます。Amazon Cognito は、パブリック/プライベートRSAキーペアと証明書を、ユーザープールで設定する各外部SAMLプロバイダーに割り当てます。ユーザープールSAMLプロバイダーのレスポンス暗号化を有効にする場合は、暗号化されたSAMLレスポンスをサポートする IdP に証明書をアップロードする必要があります。SAML IdP へのユーザープール接続は、IdP が提供されたキーですべてのSAMLアサーションの暗号化を開始する前に機能しません。

暗号化されたSAMLサインインの流れの概要を次に示します。

  1. ユーザーがサインインを開始し、IdP SAML を選択します。

  2. ユーザープールは、SAMLサインインリクエストを使用してユーザーを IdP SAML に認可エンドポイントリダイレクトします。ユーザープールは、必要に応じて、IdP による整合性の検証を可能にする署名でこのリクエストに付随できます。SAML リクエストに署名する場合は、署名証明書のパブリックキーでユーザープールが署名したリクエストを受け入れるように IdP を設定する必要があります。

  3. IdP SAML はユーザーに署名し、SAMLレスポンスを生成します。IdP はパブリックキーでレスポンスを暗号化し、ユーザーをユーザープール/saml2/idpresponseエンドポイントにリダイレクトします。IdP は、2.0 SAML 仕様で定義されているようにレスポンスを暗号化する必要があります。詳細については、OASIS「Security Assertion Markup Language (SAML) V2.0 のアサーションとプロトコルElement <EncryptedAssertion>」を参照してください。

  4. ユーザープールは、ユーザーのプライベートキーと署名を使用してSAMLレスポンス内の暗号文を復号します。

重要

ユーザープールで IdP SAML のレスポンス暗号化を有効にする場合、IdP はプロバイダーに固有のパブリックキーを使用してすべてのレスポンスを暗号化する必要があります。Amazon Cognito は、暗号化をサポートするように設定したSAML外部 IdP からの暗号化されていないSAMLレスポンスを受け入れません。

ユーザープール内の任意の外部 SAML IdP はレスポンス暗号化をサポートでき、各 IdP は独自のキーペアを受け取ります。

AWS Management Console
SAML レスポンス暗号化を設定するには
  1. ユーザープール アプリケーションクライアント 、および SAML IdP を作成します。

  2. SAML ID プロバイダーを作成または編集するときは、リクエストに署名してレスポンスを暗号化する のチェックボックスに「このプロバイダーからの暗号化されたSAMLアサーションを要求する」というタイトルのチェックボックスをオンにします。

  3. ユーザープールのサインインエクスペリエンスタブから、フェデレーティッド ID プロバイダーのサインイン で IdP SAML を選択し、暗号化証明書の表示 を選択します。

  4. Download as .crt を選択し、ダウンロードしたファイルを SAML IdP に提供します。証明書の キーを使用してSAMLレスポンスを暗号化するように SAML IdP を設定します。

API/CLI

SAMLレスポンス暗号化を設定するには

CreateIdentityProvider または UpdateIdentityProviderAPIリクエストの EncryptedResponsesパラメータを使用してレスポンス暗号化を設定します。以下は、リクエスト署名をサポートする IdP ProviderDetailsの例です。

"ProviderDetails": { "MetadataURL" : "https://myidp.example.com/saml/metadata", "IDPSignout" : "true", "RequestSigningAlgorithm" : "rsa-sha256", "EncryptedResponses" : "true", "IDPInit" : "true" }

ユーザープールから暗号化証明書を取得するには、DescribeIdentityProviderAPIリクエストを行い、レスポンスパラメータ ActiveEncryptionCertificateの 値を取得しますProviderDetails。この証明書を保存し、ユーザープールからのサインインリクエストの暗号化証明書として IdP に提供します。

SAML リクエストへの署名

IdP への 2.0 SAML リクエストの整合性を証明する機能は、Amazon Cognito SP 開始SAMLサインインのセキュリティ上の利点です。ドメインを持つ各ユーザープールは、ユーザープール X.509 署名証明書を受け取ります。この証明書のパブリックキーを使用すると、ユーザープールは、ユーザーが SAML IdP を選択したときにユーザープールが生成するサインアウトリクエストに暗号化署名を適用します。オプションで、SAMLサインインリクエスト に署名するようにアプリケーションクライアントを設定できます。SAML リクエストに署名すると、IdP は、リクエストのXMLメタデータの署名が、指定したユーザープール証明書のパブリックキーと一致することを確認できます。

AWS Management Console
SAML リクエスト署名を設定するには
  1. ユーザープール アプリケーションクライアント 、および SAML IdP を作成します。

  2. SAML ID プロバイダーを作成または編集するときは、リクエストの署名とレスポンスの暗号化 で、このプロバイダーへのSAMLリクエストの署名 というタイトルのチェックボックスをオンにします。

  3. ユーザープールのサインインエクスペリエンスタブで、フェデレーティッド ID プロバイダーのサインイン で、署名証明書の表示 を選択します。

  4. Download as .crt を選択し、ダウンロードしたファイルを SAML IdP に提供します。受信SAMLリクエストの署名を検証するように SAML IdP を設定します。

API/CLI

SAMLリクエスト署名を設定するには

CreateIdentityProvider または リクエストの RequestSigningAlgorithmパラメータを使用してUpdateIdentityProviderAPIリクエスト署名を設定します。以下は、リクエスト署名をサポートする IdP ProviderDetailsの例です。

"ProviderDetails": { "MetadataURL" : "https://myidp.example.com/saml/metadata", "IDPSignout" : "true", "RequestSigningAlgorithm" : "rsa-sha256", "EncryptedResponses" : "true", "IDPInit" : "true" }