View a markdown version of this page

为 AWS STS OIDC 发现创建 VPC 端点 - AWS Identity and Access Management

为 AWS STS OIDC 发现创建 VPC 端点

AWS Security Token Service(AWS STS)OIDC 发现是一对公共端点,用于处理依赖方验证外站身份联合验证颁发的 JSON Web 令牌(JWT)所需的元数据和验证密钥。

当您启用外站身份联合验证时,AWS STS 会发布一个特定于账户的颁发者 URL。此 URL 托管两个 OpenID Connect(OIDC)发现端点。依赖方会获取这些端点,以获取验证 GetWebIdentityToken 颁发的 JWT 所需的元数据和公有密钥:

  • {issuer_url}/.well-known/openid-configuration:OIDC 发现文档

  • {issuer_url}/.well-known/jwks.json:包含令牌签名验证密钥的 JSON Web 密钥集(JWKS)

默认情况下,从 VPC 访问这些端点需要互联网网关、NAT 设备、VPN 连接或连接。要将此流量保留在 AWS 网络上,请为 STS OIDC 发现端点创建接口 VPC 端点。

注意

STS OIDC 发现端点仅服务于上面列出的两个端点。它不处理任何 AWS STS API 操作。要私下调用 GetWebIdentityToken、AssumeRole 或任何其他 AWS STS 操作,请使用 com.amazonaws.region.sts 端点服务。请参阅为 AWS STS 创建 VPC 端点。

选择合适的端点服务

外站身份联合验证使用两条不同的网络路径。大多数同时生成和验证令牌的工作负载都需要这两个端点服务。

任务 端点服务 身份验证
生成 JWT(sts:GetWebIdentityToken) com.amazonaws.region.sts AWS SigV4
读取 /.well-known/openid-configuration com.amazonaws.region.sts-oidc 无(未经身份验证)
读取 /.well-known/jwks.json com.amazonaws.region.sts-oidc 无(未经身份验证)

如果验证令牌的唯一一方是 AWS 外部的服务,则无需 STS OIDC 发现端点。该服务通过公共互联网获取颁发者 URL,其流量不会进入 VPC。

注意事项

在为 STS OIDC 发现创建接口 VPC 端点之前,请考虑以下事项。

  • 不支持 VPC 端点策略。这两个发现 API 都处理公开可用的数据,但 STS OIDC 发现端点不强制执行 VPC 端点策略。请使用安全组和子网放置来控制哪些资源可以访问端点。

  • 仅服务于两条路径。端点仅接受发往 /.well-known/openid-configuration 和 /.well-known/jwks.json 的 HTTPS GET 请求。所有其他路径和方法都会返回错误。

为 STS OIDC 发现创建接口 VPC 端点

您可以使用 Amazon Virtual Private Cloud 控制台或 AWS Command Line Interface 为 STS OIDC 发现端点创建 VPC 端点。有关更多信息,请参阅《Amazon VPC 用户指南》中的使用接口 VPC 端点访问 AWS 服务。

使用以下服务名称为 STS OIDC 发现创建 VPC 端点:

  • com.amazonaws.region.sts-oidc

如果为端点启用私有 DNS,则可以向 sts-oidc.region.amazonaws.com 发送请求,它们将解析为 VPC 内端点的网络接口。

通过端点发送请求

当 VPC 中的依赖方需要验证 JWT 时,它会从颁发者 URL 获取 OIDC 发现文档和 JWKS。颁发者主机名(例如 uuid.tokens.sts.global.api.aws)使用的域与端点(sts-oidc.region.amazonaws.com)不同,因此默认情况下它不会解析为 VPC 端点。

要通过端点路由对颁发者主机名的请求,请为颁发者主机名创建一个 Amazon Route 53 私有托管区,并添加指向 VPC 端点的别名记录。创建托管区后,VPC 中的资源会将颁发者主机名解析为端点的网络接口。然后,标准 OIDC 库无需更改代码即可获取发现文档。有关创建私有托管区域的更多信息,请参阅 Amazon Route 53 开发人员指南 中的使用私有托管区域。

注意

端点服务是区域性的,但单个端点可处理分区中任何颁发者 UUID 的发现请求。请在验证器运行所在的区域内创建端点;不需要每个颁发者账户一个端点。