排查 SAML 与 IAM 联合身份验证的问题
使用此处的信息可帮助您诊断和修复在将 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 响应中没有包含 Subject
的 NameID
,也会出现此错误。
有关更多信息,请参阅在 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 中使用 aws iam update-saml-provider
跨平台 CLI 命令或 Update-IAMSAMLProvider
PowerShell cmdlet 定义。
错误:私钥无效。
如果您的私钥文件格式不正确,可能会发生此错误。此错误可能会提供有关私钥无效原因的其他详细信息:
-
密钥已加密。
-
无法识别密钥格式。私钥文件必须是 .pem 文件。
在 AWS Management Console 中 在 IAM 中创建 SAML 身份提供者 时,必须从身份提供商处下载私有密钥以提供给 IAM 来启用加密。私有密钥必须是使用 AES-GCM 或 AES-CBC 加密算法解密 SAML 断言的 .pem 文件。
错误:无法删除私有密钥。
当 SAML 加密设置为“必需”时,可能会发生此错误,并且您的请求会删除 IAM SAML 提供商的唯一私有解密密钥。有关轮换私有密钥的更多信息,请参阅 管理 SAML 加密密钥。
错误:无法删除私有密钥,因为密钥 ID 与私有密钥不匹配。
如果私有密钥的 keyId
值与身份提供商的私有密钥文件的任一密钥 ID 不匹配,则可能发生此错误。
当您使用 update-saml-providerRemovePrivateKey
中的值必须是附加到您的身份提供商的私有密钥文件的有效密钥 ID。
错误:无法担任角色:指定提供商中没有发布者(服务:AWSOpenIdDiscoveryService;状态代码:400;错误代码:AuthSamlInvalidSamlResponseException)
如果 SAML 响应中的颁发者与联合元数据文件中声明的颁发者不匹配,则可能会出现该错误。在 IAM 中创建身份提供商时,元数据文件将上传到 AWS 中。
错误:无法解析元数据。
如果您的元数据文件没有正确格式化,则可能发生此错误。
在 AWS 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 版
错误:无法更新身份提供商。没有为元数据或加密断言定义任何更新。
如果使用 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-provider
错误:指定的提供商不存在。
如果 SAML 断言中的提供商名称与 IAM 中的提供商名称不匹配,则可能会出现该错误。有关查看提供商名称的更多信息,请参阅在 IAM 中创建 SAML 身份提供者。
错误:请求的 DurationSeconds 超过为该角色设置的 MaxSessionDuration。
如果从 AWS CLI 或 API 中担任角色,则可能会出现该错误。
在使用 assume-role-with-saml CLI 或 AssumeRoleWithSAML API 操作担任角色时,您可以为 DurationSeconds
参数指定一个值。您可以指定 900 秒 (15 分钟) 到角色的最大会话持续时间设置之间的值。如果指定的值高于该设置,操作将失败。例如,如果您指定的会话持续时间为 12 小时,但管理员设置的最大会话持续时间为 6 小时,您的操作将失败。要了解如何查看您的角色的最大值,请参阅更新角色的最长会话持续时间。
错误:已达到私有密钥限制 2。
如果您试图将私有密钥添加到身份提供商,则可能会发生此错误。
每个身份提供商最多可以保存两个私有密钥。当您使用 update-saml-provider
删除已过期的私有密钥,然后再添加新的私有密钥。有关轮换私有密钥的更多信息,请参阅 管理 SAML 加密密钥。
错误:响应不包含所需受众。
如果受众 URL 与 SAML 配置中的身份提供者不匹配,则可能会出现此错误。确保您的身份提供者(IdP)依赖方标识符与 SAML 配置中提供的受众 URL(实体 ID)完全匹配。