View a markdown version of this page

Connect Customer を使用した SAML のトラブルシューティング - Amazon Connect Customer

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

Connect Customer を使用した SAML のトラブルシューティング

この記事では、Connect Customer で SAML を使用する際に発生する最も一般的な問題のトラブルシューティングと解決方法について説明します。

Okta、PingIdentify、Azure AD などの他の ID プロバイダーとの統合をトラブルシューティングする場合は、「Connect Customer SSO Setup Workshop」を参照してください。

エラーメッセージ: アクセスが拒否されました。アカウントは認証されましたが、このアプリケーションには登録されていません。

エラーメッセージ: アクセスが拒否されました。

これは何を意味するのでしょうか?

このエラーは、ユーザーが SAML を使用して AWS SAML ログインエンドポイントに正常に認証されたことを意味します。ただし、ユーザーは Connect Customer 内で一致/検出できませんでした。このメッセージは通常、以下のいずれかを示します。

  • Connect Customer のユーザー名が、ID RoleSessionName プロバイダーから返された SAML レスポンスで指定された SAML 属性と一致しません。

  • ユーザー が Connect Customer に存在しません。

  • ユーザーには、SSO を使用して 2 つの個別のプロファイルが割り当てられています。

解像度

次のステップを使用して、ID プロバイダーから返された SAML レスポンスで指定された RoleSessionName SAML 属性を確認し、Connect Customer のログイン名を取得して比較します。

  1. エンドツーエンドのログインプロセスに対して HAR キャプチャ (HTTP AR チャイブ) を実行します。これにより、ブラウザ側からネットワークリクエストがキャプチャされます。HAR ファイルを任意のファイル名 (saml.har など) で保存します。

    手順については、AWS 「サポートケース用にブラウザから HAR ファイルを作成する方法」を参照してください。

  2. テキストエディタを使用して、HAR ファイル内で SAMLResponse を検索します。または、以下のコマンドを実行します。

    $ grep -o "SAMLResponse=.*&" azuresaml.har | sed -E 's/SAMLResponse=(.*)&/\1/' > samlresponse.txt

    • これにより、HAR ファイル内の SAMLresponse が検索され、samlresponse.txt ファイルに保存されます。

    • レスポンスは URL エンコードされ、コンテンツは Base64 エンコードされます。

  3. URL レスポンスをデコードし、サードパーティーのツールまたは単純なスクリプトを使用して Base64 コンテンツをデコードします。例:

    $ cat samlresponse.txt | python3 -c "import sys; from urllib.parse import unquote; print(unquote(sys.stdin.read()));" | base64 --decode > samlresponsedecoded.txt

    このスクリプトは、単純な python コマンドを使用して、元の URL エンコード形式から SAMLResponse をデコードします。次に、Base64 からのレスポンスをデコードし、SAML レスポンスをプレーンテキスト形式で出力します。

  4. デコードされた応答で、必要な属性を確認します。例えば、次の図は、RoleSessionName の確認方法を示しています。

    rolesessionname を確認するための grep コマンド。
  5. 前のステップで返されたユーザー名が Connect Customer インスタンスのユーザーとして存在するかどうかを確認します。

    $ aws connect list-users --instance-id [INSTANCE_ID] | grep $username

    • 最後の grep が結果を返さない場合は、ユーザーが Connect Customer インスタンスに存在しないか、別の大文字と小文字で作成されていることを意味します。

    • Connect Customer インスタンスに多数のユーザーがいる場合、ListUsers API コールからのレスポンスがページ分割される可能性があります。API から返された NextToken を使用して、残りのユーザーを取得します。詳細については、「ListUsers」を参照してください。

SAML レスポンスの例

以下は、サンプル SAML レスポンスからの図です。この場合、ID プロバイダー (IdP) は Azure Active Directory (Azure AD) です。

サンプルの SAML レスポンス。

エラーメッセージ: アクセスが拒否されました。 AWS アカウント管理者にお問い合わせください。

エラーメッセージ: アクセスが拒否されました。

これは何を意味するのでしょうか?

ユーザーが引き受けたロールは、SAML を使用して正常に認証されました。ただし、ロールには、Connect Customer の GetFederationToken API を呼び出すアクセス許可がありません。この呼び出しは、ユーザーが SAML を使用して Connect Customer インスタンスにログインできるようにするために必要です。

解像度

  1. connect:GetFederationToken のアクセス許可を持つポリシーを、エラーメッセージで見つかったロールにアタッチします。次に、サンプルポリシーを示します。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "connect:GetFederationToken", "Resource": [ "arn:aws:connect:ap-southeast-2:111122223333:instance/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/user/${aws:userid}" ] } ] }
  2. IAM コンソールを使用してポリシーをアタッチします。または、アタッチロールポリシー API を使用します。例えば、次のようにします。

    $ aws iam attach-role-policy —role-name [ASSUMED_ROLE] —policy_arn [POLICY_WITH_GETFEDERATIONTOKEN]

エラーメッセージ: セッションが有効期限切れです

ログイン中に [セッションが有効期限切れです] メッセージが表示される場合は、ほとんどの場合、セッショントークンを更新するだけで解決できます。ID プロバイダーに移動して、ログインします。Connect Customer ページを更新します。引き続きこのメッセージが表示される場合は、IT チームにお問い合わせください。