

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

# 使用 IAM 對 SAML 聯合進行疑難排解
<a name="troubleshoot_saml"></a>

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

**Topics**
+ [錯誤：您的請求包含無效的 SAML 回應。若要登出，請按一下這裡。](#troubleshoot_saml_invalid-response)
+ [錯誤：在 AuthnResponse 中需要 RoleSessionName (服務：AWSSecurityTokenService；狀態代碼：400；錯誤代碼：InvalidIdentityToken)](#troubleshoot_saml_missing-rolesessionname)
+ [錯誤：未獲授權，無法執行 sts:AssumeRoleWithSAML (服務：AWSSecurityTokenService；狀態代碼：403；錯誤代碼：AccessDenied)](#troubleshoot_saml_missing-role)
+ [錯誤：在 AuthnResponse 中的 RoleSessionName 必須符合 [a-zA-Z\_0-9\+=,.@-]{2,64} (服務：AWSSecurityTokenService；狀態代碼：400；錯誤代碼：InvalidIdentityToken)](#troubleshoot_saml_invalid-rolesessionname)
+ [錯誤：來源身分必須符合 [a-zA-Z\_0-9\+=,.@-]{2,64} 並以 `"aws:"` 開始 (服務：AWSSecurityTokenService；狀態代碼：400；錯誤代碼：InvalidIdentityToken)](#troubleshoot_saml_invalid-sourceidentity)
+ [錯誤：回應簽章無效 (服務：AWSSecurityTokenService；狀態代碼：400；錯誤代碼：InvalidIdentityToken)](#troubleshoot_saml_invalid-metadata)
+ [錯誤：無效的私有金鑰。](#troubleshoot_saml_invalid-private-key)
+ [錯誤：無法移除私有金鑰。](#troubleshoot_saml_invalid-remove-key)
+ [錯誤：無法移除私有金鑰，因為金鑰 ID 與私有金鑰不符。](#troubleshoot_saml_invalid-remove-key-mismatch)
+ [錯誤：無法擔任角色：發行者不存在於指定的供應商 (服務：AWSOpenIdDiscoveryService；狀態代碼：400；錯誤代碼：AuthSamlInvalidSamlResponseException)](#troubleshoot_saml_issuer-mismatch)
+ [錯誤：無法剖析中繼資料。](#troubleshoot_saml_issuer-metadata)
+ [錯誤：無法更新身分提供者。中繼資料或加密聲明未定義任何更新。](#troubleshoot_saml_unable-to-update)
+ [錯誤：無法將聲明加密模式設定為「必要」，因為未提供私有金鑰。](#troubleshoot_saml_issuer-private-key-required)
+ [錯誤：無法在相同的請求中新增和移除私有金鑰。僅為兩個參數之一設定值。](#troubleshoot_saml_add-remove-keys)
+ [錯誤：指定的供應商不存在。](#troubleshoot_saml_provider-doesnotexist)
+ [錯誤：請求的 DurationSeconds 超過為此角色設定的 MaxSessionDuration。](#troubleshoot_saml_duration-exceeds)
+ [錯誤：已達到私有金鑰限制 2。](#troubleshoot_saml_private-key-exceeds)
+ [錯誤：回應沒有包括必要的對象。](#troubleshoot_saml_required-audience)

## 錯誤：您的請求包含無效的 SAML 回應。若要登出，請按一下這裡。
<a name="troubleshoot_saml_invalid-response"></a>

當身分提供者的 SAML 回應不包含 `Name` 設定為 `https://aws.amazon.com/SAML/Attributes/Role` 的屬性時，可能會發生此錯誤。該屬性必須包含一個或多個 `AttributeValue` 元素，每個元素都包含逗號分隔的字串對：
+ 使用者可以映射到角色的 ARN
+ SAML 供應商的 ARN

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

如需詳細資訊，請參閱[為身分驗證回應設定 SAML 聲明](id_roles_providers_create_saml_assertions.md)。若要在瀏覽器中查看 SAML 回應，請按照 [在瀏覽器中檢視 SAML 回應](troubleshoot_saml_view-saml-response.md) 中列出的步驟操作。

## 錯誤：在 AuthnResponse 中需要 RoleSessionName (服務：AWSSecurityTokenService；狀態代碼：400；錯誤代碼：InvalidIdentityToken)
<a name="troubleshoot_saml_missing-rolesessionname"></a>

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

如需更多詳細資訊，請參閱 [為身分驗證回應設定 SAML 聲明](id_roles_providers_create_saml_assertions.md)。若要在瀏覽器中查看 SAML 回應，請按照 [在瀏覽器中檢視 SAML 回應](troubleshoot_saml_view-saml-response.md) 中列出的步驟操作。

## 錯誤：未獲授權，無法執行 sts:AssumeRoleWithSAML (服務：AWSSecurityTokenService；狀態代碼：403；錯誤代碼：AccessDenied)
<a name="troubleshoot_saml_missing-role"></a>

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

只有當您的角色信任政策包含 `sts:AssumeRoleWithSAML` 動作時，才允許您存取。如果您的 SAML 聲明設定為使用 [`PrincipalTag` 屬性](id_roles_providers_create_saml_assertions.md#saml_role-session-tags)，則您的信任政策也必須包含 `sts:TagSession` 動作。如需有關工作階段標籤的詳細資訊，請參閱 [在 中傳遞工作階段標籤 AWS STS](id_session-tags.md)。

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

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

如果 SAML 回應不包括其中包含 `NameID` 的 `Subject`，也會發生此錯誤。

如需詳細資訊，請參閱[啟用 SAML 2.0 聯合主體來存取 AWS 管理主控台](id_roles_providers_enable-console-saml.md)及[為身分驗證回應設定 SAML 聲明](id_roles_providers_create_saml_assertions.md)。若要在瀏覽器中查看 SAML 回應，請按照 [在瀏覽器中檢視 SAML 回應](troubleshoot_saml_view-saml-response.md) 中列出的步驟操作。

## 錯誤：在 AuthnResponse 中的 RoleSessionName 必須符合 [a-zA-Z\_0-9\+=,.@-]{2,64} (服務：AWSSecurityTokenService；狀態代碼：400；錯誤代碼：InvalidIdentityToken)
<a name="troubleshoot_saml_invalid-rolesessionname"></a>

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

如需更多詳細資訊，請參閱 [為身分驗證回應設定 SAML 聲明](id_roles_providers_create_saml_assertions.md)。若要在瀏覽器中查看 SAML 回應，請按照 [在瀏覽器中檢視 SAML 回應](troubleshoot_saml_view-saml-response.md) 中列出的步驟操作。

## 錯誤：來源身分必須符合 [a-zA-Z\_0-9\+=,.@-]{2,64} 並以 `"aws:"` 開始 (服務：AWSSecurityTokenService；狀態代碼：400；錯誤代碼：InvalidIdentityToken)
<a name="troubleshoot_saml_invalid-sourceidentity"></a>

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

如需建立 SAML 聲明的詳細資訊，請參閱 [為身分驗證回應設定 SAML 聲明](id_roles_providers_create_saml_assertions.md)。若要在瀏覽器中查看 SAML 回應，請按照 [在瀏覽器中檢視 SAML 回應](troubleshoot_saml_view-saml-response.md) 中列出的步驟操作。

## 錯誤：回應簽章無效 (服務：AWSSecurityTokenService；狀態代碼：400；錯誤代碼：InvalidIdentityToken)
<a name="troubleshoot_saml_invalid-metadata"></a>

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

## 錯誤：無效的私有金鑰。
<a name="troubleshoot_saml_invalid-private-key"></a>

如果沒有正確格式化私有金鑰檔案，則可能會發生此錯誤。此錯誤可能會提供有關私有金鑰為何無效的其他詳細資訊：
+ 金鑰已加密。
+ 無法識別金鑰格式。私有金鑰檔案必須為 .pem 檔案。

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

## 錯誤：無法移除私有金鑰。
<a name="troubleshoot_saml_invalid-remove-key"></a>

當 SAML 加密設定為「必要」時，可能會發生此錯誤，您的請求會移除 IAM SAML 提供者的唯一私有解密金鑰。如需有關輪換私有金鑰的詳細資訊，請參閱 [管理 SAML 加密金鑰](id_roles_providers_create_saml.md#id_federation_manage-saml-encryption)。

## 錯誤：無法移除私有金鑰，因為金鑰 ID 與私有金鑰不符。
<a name="troubleshoot_saml_invalid-remove-key-mismatch"></a>

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

當您使用 [update-saml-provider](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/update-saml-provider.html) 或 [UpdateSAMLProvider](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateSAMLProvider.html) API 操作來移除 SAML 加密私有金鑰時，`RemovePrivateKey` 中的值必須是連接到身分提供者之私有金鑰的有效金鑰 ID。

## 錯誤：無法擔任角色：發行者不存在於指定的供應商 (服務：AWSOpenIdDiscoveryService；狀態代碼：400；錯誤代碼：AuthSamlInvalidSamlResponseException)
<a name="troubleshoot_saml_issuer-mismatch"></a>

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

## 錯誤：無法剖析中繼資料。
<a name="troubleshoot_saml_issuer-metadata"></a>

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

當您[在 中建立或管理 SAML 身分提供者](id_roles_providers_create_saml.md#idp-manage-identityprovider-console)時 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](https://docs.oasis-open.org/security/saml/Post2.0/sstc-metadata-iop-os.html) 所定義，IAM 既不會評估 SAML 中繼資料文件中的 X.509 憑證是否過期，也不會對其採取動作。如果您擔心過期的 X.509 憑證，建議您監控憑證過期日期，並根據組織的治理和安全政策輪換憑證。

## 錯誤：無法更新身分提供者。中繼資料或加密聲明未定義任何更新。
<a name="troubleshoot_saml_unable-to-update"></a>

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

## 錯誤：無法將聲明加密模式設定為「必要」，因為未提供私有金鑰。
<a name="troubleshoot_saml_issuer-private-key-required"></a>

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

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

## 錯誤：無法在相同的請求中新增和移除私有金鑰。僅為兩個參數之一設定值。
<a name="troubleshoot_saml_add-remove-keys"></a>

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

當您使用 [update-saml-provider](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/update-saml-provider.html) 或 [UpdateSAMLProvider](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateSAMLProvider.html) API 操作來輪換 SAML 加密私有金鑰檔案時，只能在請求中新增或移除私有金鑰。如果在移除私有金鑰時新增私有金鑰，操作會失敗。如需有關輪換私有金鑰的詳細資訊，請參閱 [管理 SAML 加密金鑰](id_roles_providers_create_saml.md#id_federation_manage-saml-encryption)。

## 錯誤：指定的供應商不存在。
<a name="troubleshoot_saml_provider-doesnotexist"></a>

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

## 錯誤：請求的 DurationSeconds 超過為此角色設定的 MaxSessionDuration。
<a name="troubleshoot_saml_duration-exceeds"></a>

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

當您使用 [assume-role-with-saml](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role-with-saml.html) CLI 或 [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) API 操作來擔任角色時，可以為 `DurationSeconds` 參數指定值。您可以指定從 900 秒 (15 分鐘) 到角色的最大工作階段持續時間設定的值。如果您指定高於此設定的值，操作會失敗。例如，如果您指定 12 小時的工作階段持續時間，但是您的管理員設定最大工作階段持續時間為 6 小時，則您的操作會失敗。若要了解如何檢視角色的最大值，請參閱 [更新角色的最大工作階段持續時間](id_roles_update-role-settings.md#id_roles_update-session-duration)。

## 錯誤：已達到私有金鑰限制 2。
<a name="troubleshoot_saml_private-key-exceeds"></a>

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

可以為每個身分提供者儲存最多兩個私有金鑰。使用 [update-saml-provider](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/update-saml-provider.html) 或 [UpdateSAMLProvider](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateSAMLProvider.html) API 操作來新增第三個私有金鑰時，操作會失敗。

在新增新的私有金鑰之前，移除已過期的私有金鑰。如需有關輪換私有金鑰的詳細資訊，請參閱 [管理 SAML 加密金鑰](id_roles_providers_create_saml.md#id_federation_manage-saml-encryption)。

## 錯誤：回應沒有包括必要的對象。
<a name="troubleshoot_saml_required-audience"></a>

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