如何對 Okta 和 AWS IAM Federation 的 "invalid SAML response" (無效 SAML 回應) 錯誤進行疑難排解?

上次更新日期:2022 年 5 月 23 日

我在使用 Okta 登入 AWS 時,收到類似於下列內容的無效 SAML 錯誤:

"Your request included an invalid SAML response.To logout, click here" (您的請求包含無效的 SAML 回應。若要登出,請按一下這裡)。

如何對此錯誤進行疑難排解?

簡短描述

您在 Okta 中使用 AWS 帳戶聯合時,若登入 AWS 可能會收到無效的 SAML 錯誤。如果您在 SAML 回應中為角色屬性提供缺失或不正確的資訊,就會發生這種情況。此屬性的預期值為一個對或多個以逗號分隔的 AWS Identity and Access Management (IAM) 角色與 SAML 供應商對,如下所示:

<Attribute Name="https://aws.amazon.com/SAML/Attributes/Role">
  <AttributeValue>arn:aws:iam::ACCOUNT_NUMBER:role/ROLE_NAME_1,arn:aws:iam::ACCOUNT_NUMBER:saml-provider/PROVIDER_NAME/AttributeValue>
  <AttributeValue>arn:aws:iam::ACCOUNT_NUMBER:role/ROLE_NAME_2,arn:aws:iam::ACCOUNT_NUMBER:saml-provider/PROVIDER_NAME</AttributeValue>
  <AttributeValue>arn:aws:iam::ACCOUNT_NUMBER:role/ROLE_NAME_3,arn:aws:iam::ACCOUNT_NUMBER:saml-provider/PROVIDER_NAME</AttributeValue>
</Attribute>

若要透過瀏覽器檢查 SAML 回應,請遵循如何在瀏覽器中檢視 SAML 回應以進行疑難排解中的步驟進行操作。

解決方案

如果您在 Okta 中使用了 Use Group Mapping (使用群組映射) 設定,請遵循「使用多個 AWS 帳戶連線至 Okta」下的步驟進行操作。如果沒有,則選擇「使用單一 AWS 帳戶連線至 Okta」。 

使用多個 AWS 帳戶連線至 Okta

如果您選擇使用多個 AWS 帳戶連線至 Okta,則 Okta 會使用以群組為基礎的角色映射。這表示 Okta 會使用群組名稱,來識別 SSO 的 AWS 帳戶 ID 和 IAM 角色名稱。

注意:請務必在 Okta 中正確輸入 Group Filter (群組篩選條件) 和 Role Value Pattern (角色值模式),以準確擷取資訊:

1.    登入 Okta 管理控制台。

2.    選擇 Applications (應用程式),然後再次選擇 Applications (應用程式)。

3.    選擇 Sign On (登入),然後選擇 Edit (編輯)。

4.    Group Filter (群組篩選條件) 是自訂 RegEx 運算式,可擷取 Okta 群組名稱的 AWS 帳戶 ID 和 IAM 角色名稱等資訊。如需詳細資訊,請參閱 Okta 的設定文件

設定指南提供以下範例:

Group name: "aws#[account alias]#[role name]#[account #]" 
Group Filter: "^aws\#\S+\#(?{{role}}[\w\-]+)\#(?{{accountid}}\d+)$"

如果您要自訂群組名稱,可擴充此範例。請參閱下列 Group Names (群組名稱) 和 Group Filter (群組篩選條件) 的範例:

Group Name: [account alias]|[role name]|[account #] 
Group Filter: ^\S+\|(?{{role}}[a-zA-Z0-9+=.@\-_]+)\|(?{{accountid}}\d+)$
Group Name: aws_[account #]_[role name] 
Group Filter: ^aws\_(?{{accountid}}\d+)\_(?{{role}}[a-zA-Z0-9+=.@\-_]+)$

注意

  • IAM 角色名稱允許使用英數字元和 '+=,.@-_' 字元。如果您收到群組篩選條件導致的錯誤,請考慮使用不屬於 Role Name (角色名稱) 的分隔符號 (例如 '#' 或 '|')。
  • 如果您想要使用 IAM Federation 登入,您的 IAM 角色名稱不得包含 ','。這是因為下面顯示的 Role Value Pattern (角色值模式) 會使用逗號來分隔 SAML 供應商和角色名稱。建立名稱中不含逗號的新 IAM 角色,以搭配 IAM Federation 使用。

5.    Role Value Pattern (角色值模式) 必須包含 IAM 角色和 SAML 供應商的 ARN,並以逗號分隔。用 Okta 執行個體的供應商名稱取代此範例中的 SAML 供應商名稱。您可以在 AWS IAM Console 的 Identity providers (身分供應商) 下找到此資訊。

arn:aws:iam::${accountid}:saml-provider/[SAML Provider Name],arn:aws:iam::${accountid}:role/${role}

注意:所有 AWS 帳戶的 SAML 供應商名稱必須相同。

6.    選擇 Save (儲存)。

7.    測試使用者透過 Okta 登入 AWS,以確認錯誤是否已解決。

使用單一 AWS 帳戶連線至 Okta

對於單一帳戶設定,Okta 會自動設定 Role Value Pattern (角色值模式)。如果您看到 "Your request included an invalid SAML response.To logout, click here" (您的請求包含無效的 SAML 回應。若要登出,請按一下這裡) 的單一帳戶整合錯誤訊息,請向 Okta 提交支援案例以調查問題。


此文章是否有幫助?


您是否需要帳單或技術支援?