跳至内容

如何解决 IAM 中的 OIDC IdP 联合身份验证错误?

5 分钟阅读
0

我想对我在 AWS Identity and Access Management (IAM) 中使用 OpenID Connect (OIDC) 身份提供者 (IdP) 时遇到的错误进行故障排除。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI

**重要事项:**请将 /.well-known/openid-configuration 添加到 OIDC 身份提供者 URL 的末尾,以查看提供者的配置文档和元数据。

“No OpenIDConnect provider found in your account”

如果在调用 AssumeRoleWithWebIdentity API 操作时未正确引用 OIDC IdP,您会收到以下错误消息:

“An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: No OpenIDConnect provider found in your account”

要解决此问题,请执行以下操作:

  • 当您调用 AssumeRoleWithWebIdentity API 操作时,请检查您是否传递了正确 OIDC IdP 的 Amazon 资源名称 (ARN)。
    **注意:**当您使用 AWS CLI 进行配置时,尾部斜杠会自动添加到 OIDC IdP 的 ARN 中。如果使用 AWS SDK,则不会添加尾部斜杠。
  • 验证 IAM 角色的信任策略是否向通过 OIDC IdP 进行身份联合身份验证的主体授予信任。
    **重要事项:**OIDC IdP 和 IAM 角色必须位于同一 AWS 账户中。
  • 验证 AWS Security Token Service (AWS STS) 请求中 OIDC IdP 的 URL 是否与 IAM OIDC IdP 的 URL 相匹配。
    **注意:**有时,错误消息包含 AWS STS 请求中的 URL。

“Please check .well-known/openid-configuration of provider: oidc_issuer_url is valid”

当 OIDC IdP 的 URL 不正确时,您会收到以下错误消息:

“Your request has a problem.Please see the following details.Please check .well-known/openid-configuration of provider: oidc_issuer_url is valid”

要解决此问题,请验证 OIDC IdP 的 URL 是否满足以下要求:

  • 在您的账户中是唯一的
  • 大小写正确
  • https:// 开头
  • 不包含端口号

如果您仍然遇到问题,请执行以下操作:

“Could not connect to openid configuration of provider: oidc_issuer_url”

当 OIDC IdP 的发布者使用的证书链存在顺序错误或包含重复证书或其他证书时,您会收到以下错误消息:

“Your request has a problem.Please see the following details.Could not connect to openid configuration of provider: oidc_issuer_url”

要解决此问题,请完成以下步骤:

  1. 安装配置 OpenSSL 命令行工具。
    **注意:**请将 keys.example.com 替换为映射到 OIDC IdP 元数据中的 jwks_uri 的 URL。

  2. 在 OpenSSL 命令行工具中,运行 openssl-s_client 命令来下载 OIDC IdP 的证书链:

    openssl s_client -servername keys.example.com -showcerts -connect keys.example.com:443
  3. 确认 OIDC IdP 的证书链以域或发布者 URL 开头,然后是中间证书,并以根证书结尾。

如果证书链顺序不同,您会收到签名不匹配错误,并且 STS 无法验证 JSON Web 令牌 (JWT)。有关证书链标准的详细信息,请参阅 RFC Series 网站上的 Server certificate(服务器证书)部分中的 certificate_list

“The ID Token provided is not a valid JWT”

您之所以会收到以下错误消息,要么是因为您对 JWT 进行了加密,要么是因为 OIDC IdP 在 IAM 中进行联合身份验证时,JWT 使用了不支持的字符:

“An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: The ID Token provided is not a valid JWT”

要解决此问题,请执行以下操作:

  • 将 JWT 标头参数值格式化为“字符串”。 如果 JWT 标头是任何其他数据类型,则会导致错误。
  • 运行在线解码器工具来检查您在 JWT 标头中传递的信息。
  • 移除不必要的标头参数值。

**注意:**自定义 OIDC 支持以下签名算法: RS256、RS384、RS512、HS256、HS384 和 HS512。在 IAM 中采用 OIDC 联合身份验证的情况下,不支持使用加密的 JWT。

“Couldn't retrieve verification key from your identity provider”

“An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: Couldn't retrieve verification key from your identity provider, please reference AssumeRoleWithWebIdentity documentation for requirements”

由于以下原因,您会收到上述错误消息:

  • OIDC IdP 的 .well-knownjwks_uri 端点无法从公共互联网进行访问。
  • 自定义防火墙正在阻止 API 请求。
  • 从 OIDC IdP 向 STS 端点发出 API 请求的延迟时间超过 5 秒。
  • AWS STS 无法验证 OIDC IdP 的密钥,因为 JSON Web Key Set (JWKS) 有大量的密钥会导致请求被限流。

要解决这些问题,请执行以下操作:

  • 验证 OIDC IdP 的 .well-knownjwks_uri 端点是否可公开访问。
  • 检查防火墙设置以确认这些域不在拒绝列表中。
  • 检查整个操作的延迟。如果需要,请使用指数回退。
  • 从 JWKS 中移除不必要的密钥并测试配置。

有关如何解决此错误的详细信息,请参阅如何解决 AWS STS AssumeRoleWithWebIdentity API 调用错误“InvalidIdentityToken”?

**注意:**AWS CloudTrail 不会记录“InvalidIdentityToken”错误,因为故障发生在客户端。

“Unsupported condition keys used”

当您在 OIDC IdP 的 IAM 角色信任策略中使用不支持的条件键时,您会收到以下错误消息:

“An unknown error occurred for AssumeRoleWithWebIdentity: Unsupported condition keys used”

要解决此问题,请使用 AWS Web 身份联合验证的可用键来创建信任策略。

“Incorrect token audience”

当 JWT 受众声明与使用 OIDC IdP 的应用程序的唯一标识符不匹配时,您会收到以下错误消息:

“An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: Incorrect token audience”

要查看 IAM OIDC IdP 的受众,请运行以下 get-open-id-connect-provider 命令:

aws iam get-open-id-connect-provider --open-id-connect-provider-arn OIDC_ARN_Example-provider

**注意:**请将 OIDC_ARN_Example-provider 替换为 OIDC IdP 的 ARN。

受众值必须与应用程序的客户端 ID 相匹配。

“Returned thumbprint (too large for IAM).”

当您在 IAM 中向 OIDC IdP 添加的指纹不正确时,您会收到“Returned thumbprint (too large for IAM).”的错误消息。

要解决此问题,请务必使用正确的指纹。要手动获取指纹,请参阅获取证书指纹

有关详细信息,请参阅获取 OpenID Connect 身份提供者的指纹

“Token audience contains more than one audience while authorized party is not present”

当您在 JWT 令牌中定义多个受众时,您会收到以下错误消息:

“InvalidIdentityToken: Token audience contains more than one audience while authorized party is not present”

AWS 不支持具有多个受众的 JWT 令牌,但您可以为 OIDC IdP 配置多个客户端 ID 配置作为受众。

要解决此问题,请完成以下步骤:

“Unable to configure OpenID Connect configuration with a private application”

当 OIDC IdP 为私有时,您会收到以下错误消息,因为此时 .well-known/openid-configurationjwks_uri 端点无法通过互联网公开访问:

“Unable to configure OpenID Connect configuration with a private application (For example: Gitlab instance)”

要解决此问题,请执行以下操作:

  • .well-known/openid-configurationjwks_uri 端点配置为可通过互联网访问。
    **注意:**对于集成到 IAM 中的 OIDC 联合身份验证,IAM 不支持进行代理配置。即使您手动了添加指纹,后续发往 STS 的 AssumeRoleWithWebIdentity 请求仍会失败,因为 jwks_uri 端点不可公开访问。STS 无法验证 JWT 中的签名,因此无法颁发凭证。
  • 使用 Amazon Cognito 生成客户端凭证,这些凭证可用于完成从应用程序到 Amazon Cognito 用户池的联合身份验证。在用户池中,您可以通过支持访问您账户中特定 AWS 角色的 Amazon Cognito identity pool(Amazon Cognito 身份池)代入角色。对于每个应用程序,您可以使用唯一的客户端 authenticate into Amazon Cognito identity pools(通过身份验证进入 Amazon Cognito 身份池),以区分访问级别。
    **重要事项:**要通过身份验证进入 Amazon Cognito,您可能需要执行额外的编码,因为您必须在应用程序任务中包含 Amazon Cognito。
  • 使用 AWS Private Certificate Authority(AWS 私有证书颁发机构)来实施 IAM Roles Anywhere
  • 为 AWS STS 定义接口虚拟私有云 (VPC) 端点,将您的身份验证流量限定在 VPC 内。

“OpenIdInvalidIDPResponseException error”

当 OIDC IdP 的元数据缺少所需属性时,您会收到以下错误消息:

“OpenIdInvalidIDPResponseException error while obtaining the thumbprint of the IAM OIDC identity provider”

要解决此问题,请联系 OIDC IdP 以确定缺少的属性。有关元数据模式和所需属性的详细信息,请参阅 OpenID 网站上的 Obtaining OpenID provider configuration information(获取 OpenID 提供者配置信息)。

“OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint”

当 OIDC IdP 中的指纹过期或与证书颁发机构不匹配时,您会收到以下错误消息:

“Invalid login token.OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint”

要解决此问题,请完成以下步骤:

  1. 手动获取证书指纹
  2. 使用 UpdateOpenIDConnectProviderThumbprint 更新指纹,使其与 OIDC IdP 一致。

“AccessDenied error logged for AssumeRoleWithWebIdentity”

由于以下原因,您会收到“AccessDenied error logged for AssumeRoleWithWebIdentity”错误消息:

  • 请求参数中的 IAM 角色 ARN 不正确。
  • 运行 AssumeRoleWithWebIdentity 操作的主体没有足够的权限。
  • DurationSeconds 参数值大于 IAM 角色的最大持续时间设置。

要解决上述问题,请执行以下操作:

  • AssumeRoleWithWebIdentity 操作中包含正确的 IAM 角色 ARN。
    **注意:**角色 ARN 区分大小写。
  • 要确定执行 AssumeRoleWithWebIdentity 操作所需的权限,请参阅 AssumeRoleWithWebIdentity 的 Permissions(权限)部分。
  • 如果您使用 AWS Organizations,请 check your service control policies (SCPs)(检查您的服务控制策略 (SCP)),确认包含所需权限。
  • 如果请求中包含会话标签,请允许在信任策略中使用 aws:TagSession
  • 确保 IAM 角色的最大会话持续时间设置始终大于或等于 SessionDuration 参数。
AWS 官方已更新 1 年前