排查 SAML 与 IAM 联合身份验证的问题 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

排查 SAML 与 IAM 联合身份验证的问题

使用此处的信息可帮助您诊断和修复在将 SAML 2.0 与 Amazon 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 操作。有关会话标签的更多信息,请参阅 在 Amazon STS 中传递会话标签

如果角色信任策略中没有 sts:SetSourceIdentity 权限,则可能发生此错误。如果您的 SAML 断言配置为使用 SourceIdentity 属性,则信任策略还必须包含 sts:SetSourceIdentity 操作。更多有关源身份的信息,请参阅 监控和控制使用所担任角色执行的操作

如果联合主体没有担任该角色的权限,则会出现此错误。该角色必须具有将 IAM SAML 身份提供商的 ARN 指定为 Principal 的信任策略。角色还包含控制哪些用户可以担任该角色的条件。确保您的用户满足条件要求。

如果 SAML 响应中没有包含 SubjectNameID,也会出现此错误。

有关更多信息,请参阅使 SAML 2.0 联合主体能够访问 Amazon Web Services Management Console为身份验证响应配置 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 元数据文件。然后在 Amazon 身份提供商实体中更新它,该实体在 IAM 中使用 aws iam update-saml-provider 跨平台 CLI 命令或 Update-IAMSAMLProvider PowerShell cmdlet 定义。

错误:私钥无效。

如果您的私钥文件格式不正确,可能会发生此错误。此错误可能会提供有关私钥无效原因的其他详细信息:

  • 密钥已加密。

  • 无法识别密钥格式。私钥文件必须是 .pem 文件。

在 Amazon Web Services Management Console 中 在 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 中创建身份提供商时,元数据文件将上传到 Amazon 中。

错误:无法解析元数据。

如果您的元数据文件没有正确格式化,则可能发生此错误。

在 Amazon Web Services Management Console 中创建或管理 SAML 身份提供商时,您必须从您的身份提供商处检索 SAML 元数据文档。

此元数据文件包括颁发者名称、过期信息以及可用来验证从 IdP 处收到的 SAML 身份验证响应 (断言) 的密钥。元数据文件必须采用不含字节顺序标记 (BOM) 的 UTF-8 格式编码。要删除 BOM,您可以使用 Notepad++ 等文本编辑工具以 UTF-8 格式对文件进行编码。

作为 SAML 元数据文档的一部分,X.509 证书必须使用长度至少为 1024 位的密钥。此外,X.509 证书也不能有任何重复的扩展名。您可以使用扩展程序,但扩展程序只能在证书中显示一次。如果 X.509 证书不符合任一条件,则 IdP 将创建失败,并返回“Unable to parse metadata”这一错误消息。

SAML V2.0 元数据互操作性配置文件 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。

如果从 Amazon 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)完全匹配。