

# 为 AWS STS OIDC 发现创建 VPC 端点
<a name="reference_sts_oidc_vpc_endpoint_create"></a>

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

当您启用外站身份联合验证时，AWS STS 会发布一个特定于账户的颁发者 URL。此 URL 托管两个 OpenID Connect（OIDC）发现端点。依赖方会获取这些端点，以获取验证 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) 颁发的 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 端点](reference_sts_vpc_endpoint_create.md)。

## 选择合适的端点服务
<a name="reference_sts_oidc_vpc_endpoint_choosing"></a>

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


| 任务 | 端点服务 | 身份验证 | 
| --- | --- | --- | 
| 生成 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。

## 注意事项
<a name="reference_sts_oidc_vpc_endpoint_considerations"></a>

在为 STS OIDC 发现创建接口 VPC 端点之前，请考虑以下事项。
+ **不支持 VPC 端点策略。**这两个发现 API 都处理公开可用的数据，但 STS OIDC 发现端点不强制执行 VPC 端点策略。请使用安全组和子网放置来控制哪些资源可以访问端点。
+ **仅服务于两条路径。**端点仅接受发往 `/.well-known/openid-configuration` 和 `/.well-known/jwks.json` 的 HTTPS `GET` 请求。所有其他路径和方法都会返回错误。

## 为 STS OIDC 发现创建接口 VPC 端点
<a name="reference_sts_oidc_vpc_endpoint_creating"></a>

您可以使用 Amazon Virtual Private Cloud 控制台或 AWS Command Line Interface 为 STS OIDC 发现端点创建 VPC 端点。有关更多信息，请参阅《Amazon VPC 用户指南》**中的[使用接口 VPC 端点访问 AWS 服务](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)。

使用以下服务名称为 STS OIDC 发现创建 VPC 端点：
+ `com.amazonaws.{{region}}.sts-oidc`

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

## 通过端点发送请求
<a name="reference_sts_oidc_vpc_endpoint_sending_requests"></a>

当 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 开发人员指南* 中的[使用私有托管区域](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html)。

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