使用 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 中的使用者名稱不符合身分提供者傳回的 SAML 回應中指定的 RoleSessionName SAML 屬性。

  • 該使用者不存在於 Amazon Connect 中。

  • 使用者有兩個透過 SSO 指派給他們的個別設定檔。

解析度

使用下列步驟,檢查身分提供者傳回的 SAML 回應中指定的 RoleSessionName SAML 屬性,然後擷取並比較 Amazon Connect 中的登入名稱。

  1. 針對端對端登入程序執行 HAR 擷取 (HTTP 封存)。這會擷取來自瀏覽器端的網路請求。使用您偏好的檔案名稱儲存 HAR 檔案,例如 saml.har

    如需說明,請參閱如何針對 AWS Support 案例從我的瀏覽器建立 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 命令,從 SAMLResponse 的原始 URL 編碼格式對其進行解碼。然後,它會對來自 Base64 的回應進行解碼,並以純文字格式輸出 SAML 回應。

  4. 檢查解碼的回應以取得所需的屬性。例如,下圖說明如何檢查 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 回應範例。在此案例中,身分提供者 (IdP) 為 Azure Active Directory (Azure AD)。

SAML 回應範例。

錯誤訊息:存取遭拒,請聯絡人您的 AWS 帳戶管理員以尋求協助。

錯誤訊息:存取遭拒。

這代表什麼意思?

使用者假設的角色已使用 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 主控台連接政策。或者,使用 attach-role-policy API,例如:

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

錯誤訊息:工作階段過期

如果您在登入時看到工作階段過期訊息,則可能只需要重新整理工作階段記號。前往身分提供者並登入。重新整理 Amazon Connect 頁面。如果您仍然收到此訊息,請聯絡您的 IT 團隊。