本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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 中的登入名稱。
-
針對端對端登入程序執行 HAR 擷取 (HTTP 封存)。這會擷取來自瀏覽器端的網路請求。使用您偏好的檔案名稱儲存 HAR 檔案,例如 saml.har。
-
使用文字編輯器尋找 HAR 檔案中的 SAMLResponse 。或者,執行下列命令:
$ grep -o "SAMLResponse=.*&" azuresaml.har | sed -E 's/SAMLResponse=(.*)&/\1/' > samlresponse.txt
-
這會搜尋 HAR 檔案中的 SAMLresponse 並將它儲存至 samlresponse.txt 檔案。
-
回應已經過 URL 編碼且內容為 Base64 編碼。
-
-
使用第三方工具或簡單的指令碼,將 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 回應。
-
檢查解碼的回應以取得所需的屬性。例如,下圖說明如何檢查
RoleSessionName
: -
檢查上一個步驟傳回的使用者名稱是否以使用者的形式存在於 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)。
錯誤訊息:存取遭拒,請聯絡人您的 AWS 帳戶管理員以尋求協助。
這代表什麼意思?
使用者假設的角色已使用 SAML 成功透過身分驗證。不過,此角色沒有呼叫 Amazon Connect 的 GetFederationToken API 的許可。此呼叫是必要的,這樣使用者才能使用 SAML 登入您的 Amazon Connect 執行個體。
解析度
-
將具有
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}" ] } ] }
-
使用 IAM 主控台連接政策。或者,使用 attach-role-policy API,例如:
$ aws iam attach-role-policy —role-name [
ASSUMED_ROLE
] —policy_arn [POLICY_WITH_GETFEDERATIONTOKEN
]
錯誤訊息:工作階段過期
如果您在登入時看到工作階段過期訊息,則可能只需要重新整理工作階段記號。前往身分提供者並登入。重新整理 Amazon Connect 頁面。如果您仍然收到此訊息,請聯絡您的 IT 團隊。