Amazon Connect での SAML のトラブルシューティング - Amazon Connect

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

Amazon Connect での SAML のトラブルシューティング

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

Okta、PingIdentify、Azure AD など、他のアイデンティティプロバイダーとの統合に関するトラブルシューティングを行う場合は、「Amazon Connect SSO セットアップワークショップ」を参照してください。

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


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

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

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

  • Amazon Connect のユーザー名が、ID プロバイダーによって返された SAML レスポンスで指定された RoleSessionName SAML 属性と一致しない。

  • ユーザーが Amazon Connect に存在しない。

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

解決方法

次の手順を使用して、ID プロバイダーによって返される SAML レスポンスで指定された RoleSessionName SAML 属性をチェックし、Amazon Connect でログイン名を取得して比較します。

  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. 前のステップで返されたユーザー名が Amazon Connect インスタンスにユーザーとして存在するかどうかを確認します。

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

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

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

SAML レスポンスの例

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


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

エラーメッセージ: 「Access denied, Please contact your AWS account administrator for assistance」。


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

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

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

解決方法

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

    { "Version": "2012-10-17", "Statement": [{ "Sid": "Statement1", "Effect": "Allow", "Action": "connect:GetFederationToken", "Resource": [ "arn:aws:connect:ap-southeast-2:xxxxxxxxxxxx: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 プロバイダーに移動して、ログインします。Amazon Connect ページを更新します。引き続きこのメッセージが表示される場合は、IT チームにお問い合わせください。