使用 IAM 對 SAML 聯合進行疑難排解 - AWS Identity and Access Management

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 IAM 對 SAML 聯合進行疑難排解

使用此處的資訊,來協助您針對在使用 SAML 2.0 和 AWS Identity and Access Management 的聯合身分時所可能遇到的問題,進行故障診斷與排除。

主題

錯誤:您的請求包含無效的 SAML 回應。若要登出,請按一下這裡。

當身分提供者的 SAML 回應不包含 Name 設定為 https://aws.amazon.com/SAML/Attributes/Role 的屬性時,可能會發生此錯誤。該屬性必須包含一個或多個 AttributeValue 元素,每個元素都包含逗號分隔的字串對:

  • 使用者可以映射到角色的 ARN

  • SAML 供應商的 ARN

當身分提供者傳送的 SAML 屬性值包含前置或結尾空格,或 SAML 屬性值中包含其他無效字元時,也會發生此錯誤。如需有關 SAML 屬性預期值的詳細資訊,請參閱為身分驗證回應設定 SAML 聲明

如需更多詳細資訊,請參閱 為身分驗證回應設定 SAML 聲明。若要在瀏覽器中查看 SAML 回應,請按照 在瀏覽器中檢視 SAML 回應 中列出的步驟操作。

錯誤:在 AuthnResponse 中需要 RoleSessionName (服務:AWSSecurityTokenService;狀態代碼:400;錯誤代碼:InvalidIdentityToken)

當身分提供者的 SAML 回應不包含 Name 設定為 https://aws.amazon.com/SAML/Attributes/RoleSessionName 的屬性時,可能會發生此錯誤。屬性值是使用者的識別符,通常是使用者 ID 或電子郵件地址。

如需更多詳細資訊,請參閱 為身分驗證回應設定 SAML 聲明。若要在瀏覽器中查看 SAML 回應,請按照 在瀏覽器中檢視 SAML 回應 中列出的步驟操作。

錯誤:未獲授權,無法執行 sts:AssumeRoleWithSAML (服務:AWSSecurityTokenService;狀態代碼:403;錯誤代碼:AccessDenied)

如果 SAML 回應中指定的 IAM 角色拼寫錯誤或不存在,則會發生此錯誤。請務必使用與您角色完全相同的名稱,因為角色名稱區分大小寫。修正 SAML 服務供應商組態中角色的名稱。

只有當您的角色信任政策包含 sts:AssumeRoleWithSAML 動作時,才允許您存取。如果您的 SAML 聲明設定為使用 PrincipalTag 屬性,則您的信任政策也必須包含 sts:TagSession 動作。如需有關工作階段標籤的詳細資訊,請參閱 在 中傳遞工作階段標籤 AWS STS

如果您的角色信任政策中沒有 sts:SetSourceIdentity 許可,此錯誤可能發生。如果您的 SAML 聲明設定為使用 SourceIdentity 屬性,則您的信任政策也必須包含 sts:SetSourceIdentity 動作。如需來源身分的詳細資訊,請參閱 監控並控制使用擔任角色所採取的動作

如果聯合身分主體沒有擔任該角色的許可,也會發生此錯誤。該角色必須具有任政策,該政策將 IAM SAML 身分提供者的 ARN 指定為 Principal。該角色還包含控制哪些使用者可以擔任該角色的條件。確認您的使用者滿足條件的要求。

如果 SAML 回應不包括其中包含 NameIDSubject,也會發生此錯誤。

如需詳細資訊,請參閱啟用 SAML 2.0 聯合主體來存取 AWS 管理主控台為身分驗證回應設定 SAML 聲明。若要在瀏覽器中查看 SAML 回應,請按照 在瀏覽器中檢視 SAML 回應 中列出的步驟操作。

錯誤:在 AuthnResponse 中的 RoleSessionName 必須符合 [a-zA-Z_0-9+=,.@-]{2,64} (服務:AWSSecurityTokenService;狀態代碼:400;錯誤代碼:InvalidIdentityToken)

如果 RoleSessionName 屬性值太長或包含無效的字元,則會發生此錯誤。最大有效長度為 64 個字元。

如需更多詳細資訊,請參閱 為身分驗證回應設定 SAML 聲明。若要在瀏覽器中查看 SAML 回應,請按照 在瀏覽器中檢視 SAML 回應 中列出的步驟操作。

錯誤:來源身分必須符合 [a-zA-Z_0-9+=,.@-]{2,64} 並以 "aws:" 開始 (服務:AWSSecurityTokenService;狀態代碼:400;錯誤代碼:InvalidIdentityToken)

如果 sourceIdentity 屬性值太長或包含無效的字元,則會發生此錯誤。最大有效長度為 64 個字元。如需來源身分的詳細資訊,請參閱 監控並控制使用擔任角色所採取的動作

如需建立 SAML 聲明的詳細資訊,請參閱 為身分驗證回應設定 SAML 聲明。若要在瀏覽器中查看 SAML 回應,請按照 在瀏覽器中檢視 SAML 回應 中列出的步驟操作。

錯誤:回應簽章無效 (服務:AWSSecurityTokenService;狀態代碼:400;錯誤代碼:InvalidIdentityToken)

當身分提供者的聯合中繼資料與 IAM 身分提供者的中繼資料不相符時,則會發生此錯誤。例如,身分服務供應商的中繼資料檔案可能已變更以更新過期的憑證。從身分服務供應商處下載更新的 SAML 中繼資料檔案。然後在您用 aws iam update-saml-provider 跨平台 CLI 命令或 Update-IAMSAMLProvider PowerShell cmdlet 在 IAM 中定義的 AWS 身分提供者實體內更新它。

錯誤:無效的私有金鑰。

如果沒有正確格式化私有金鑰檔案,則可能會發生此錯誤。此錯誤可能會提供有關私有金鑰為何無效的其他詳細資訊:

  • 金鑰已加密。

  • 無法識別金鑰格式。私有金鑰檔案必須為 .pem 檔案。

當您在 AWS 管理主控台中在 IAM 中建立 SAML 身分提供者時,必須從身分提供者中下載私有金鑰,以提供給 IAM,從而啟用加密。私有金鑰必須是使用 AES-GCM 或 AES-CBC 加密演算法來解密 SAML 聲明的 .pem 檔案。

錯誤:無法移除私有金鑰。

當 SAML 加密設定為「必要」時,可能會發生此錯誤,您的請求會移除 IAM SAML 提供者的唯一私有解密金鑰。如需有關輪換私有金鑰的詳細資訊,請參閱 管理 SAML 加密金鑰

錯誤:無法移除私有金鑰,因為金鑰 ID 與私有金鑰不符。

如果私有金鑰的 keyId 值不符合身分提供者私有金鑰檔案的金鑰 ID,則可能會發生此錯誤。

當您使用 update-saml-providerUpdateSAMLProvider API 操作來移除 SAML 加密私有金鑰時,RemovePrivateKey 中的值必須是連接到身分提供者之私有金鑰的有效金鑰 ID。

錯誤:無法擔任角色:發行者不存在於指定的供應商 (服務:AWSOpenIdDiscoveryService;狀態代碼:400;錯誤代碼:AuthSamlInvalidSamlResponseException)

如果 SAML 回應中的發行者與在聯合中繼資料檔案內宣告的發行者不相符,便會發生此錯誤。當您在 IAM 中建立身分提供者時,系統會將中繼資料檔案上傳到 AWS。

錯誤:無法剖析中繼資料。

如果沒有採用正確格式的中繼資料檔案,則可能會發生此錯誤。

當您在 中使用建立或管理 SAML 身分提供者AWS 管理主控台時,必須從身分提供者中擷取 SAML 中繼資料文件。

此中繼資料檔案包括發行者名稱、過期資訊以及可用於驗證從 IdP 接收的 SAML 身分驗證回應 (聲明) 的金鑰。中繼資料檔案必須以 UTF-8 格式編碼,並且不含位元組順序記號 (BOM)。若要移除 BOM,您可以使用文字編輯工具,例如 Notepad++,將檔案編碼為 UTF-8。

包含在 SAML 中繼資料文件中的 X.509 憑證必須使用大小至少有 1024 位元的金鑰。此外,X.509 憑證也必須沒有任何重複的擴充。您可以使用擴充,但這些擴充只能在憑證中出現一次。如果 X.509 憑證不符合任一條件,IdP 建立會失敗,並傳回 "Unable to parse metadata" 錯誤。

SAML V2.0 Metadata Interoperability Profile Version 1.0 所定義,IAM 既不會評估 SAML 中繼資料文件中的 X.509 憑證是否過期,也不會對其採取動作。如果您擔心過期的 X.509 憑證,建議您監控憑證過期日期,並根據組織的治理和安全政策輪換憑證。

錯誤:無法更新身分提供者。中繼資料或加密聲明未定義任何更新。

如果使用 update-saml-provider CLI 或 UpdateSAMLProvider API 操作,但不在請求參數中提供更新值,則可能會發生此錯誤。如需有關更新 IAM SAML 提供者的詳細資訊,請參閱 在 IAM 中建立 SAML 身分提供者

錯誤:無法將聲明加密模式設定為「必要」,因為未提供私有金鑰。

當您先前尚未上傳私有解密金鑰,且嘗試將 SAML 加密設定為「必要」,但未在請求中包含私有金鑰時,就會發生此錯誤。

使用 create-saml-provider CLI、CreateSAMLProvider API、update-saml-provider CLI 或 UpdateSAMLProvider API 操作來要求加密的 SAML 聲明時,務必確保已為您的 IAM SAML 提供者定義私有金鑰。

錯誤:無法在相同的請求中新增和移除私有金鑰。僅為兩個參數之一設定值。

如果新增和移除私有金鑰值都包含在相同請求中,則可能會發生此錯誤。

當您使用 update-saml-providerUpdateSAMLProvider API 操作來輪換 SAML 加密私有金鑰檔案時,只能在請求中新增或移除私有金鑰。如果在移除私有金鑰時新增私有金鑰,操作會失敗。如需有關輪換私有金鑰的詳細資訊,請參閱 管理 SAML 加密金鑰

錯誤:指定的供應商不存在。

如果 SAML 聲明中的提供者名稱與 IAM 中的提供者名稱不符,就可能發生此錯誤。如需檢視供應商名稱的詳細資訊,請參閱 在 IAM 中建立 SAML 身分提供者

錯誤:請求的 DurationSeconds 超過為此角色設定的 MaxSessionDuration。

如果您從 AWS CLI 或 API 擔任角色,則可能發生此錯誤。

當您使用 assume-role-with-saml CLI 或 AssumeRoleWithSAML API 操作來擔任角色時,可以為 DurationSeconds 參數指定值。您可以指定從 900 秒 (15 分鐘) 到角色的最大工作階段持續時間設定的值。如果您指定高於此設定的值,操作會失敗。例如,如果您指定 12 小時的工作階段持續時間,但是您的管理員設定最大工作階段持續時間為 6 小時,則您的操作會失敗。若要了解如何檢視角色的最大值,請參閱 更新角色的最大工作階段持續時間

錯誤:已達到私有金鑰限制 2。

如果嘗試將私有金鑰新增至身分提供者,可能會發生此錯誤。

可以為每個身分提供者儲存最多兩個私有金鑰。使用 update-saml-providerUpdateSAMLProvider API 操作來新增第三個私有金鑰時,操作會失敗。

在新增新的私有金鑰之前,移除已過期的私有金鑰。如需有關輪換私有金鑰的詳細資訊,請參閱 管理 SAML 加密金鑰

錯誤:回應沒有包括必要的對象。

如果對象 URL 與 SAML 組態中的身分提供者不相符,就可能會發生此錯誤。請確定您的身分提供者 (IdP) 依存方識別符完全符合 SAML 組態中提供的對象 URL (實體 ID)。