在 IAM 中创建 OpenID Connect(OIDC)身份提供者 - AWS Identity and Access Management

在 IAM 中创建 OpenID Connect(OIDC)身份提供者

IAM OIDC 身份提供程序是 IAM 中的实体,这些实体描述支持 OpenID Connect (OIDC) 标准的身份提供程序 (IdP) 服务,如 Google 或 Salesforce)。当您要在与 OIDC 兼容的 IdP 和您的 AWS 账户 之间建立信任时,请使用 IAM OIDC 身份提供程序。如果您正在创建需要访问 AWS 资源的移动应用或 Web 应用程序,但又不想创建自定义登录代码或管理您自己的用户身份,这会很有用。有关此方案的更多信息,请参阅OIDC 联合身份验证

您可以使用 AWS Management Console、AWS Command Line Interface、Tools for Windows PowerShell 或 IAM API 创建和管理 IAM OIDC 身份提供程序。

创建 IAM OIDC 身份提供程序后,必须创建一个或多个 IAM 角色。角色是 AWS 中的一个实体,它没有自己的凭证(与用户一样)。但在此上下文中,角色将动态分配给由组织的 IdP 验证的联合身份用户。该角色允许组织的 IdP 请求临时安全凭证以便访问 AWS。分配给该角色的策略决定了联合身份用户可在 AWS 中执行的操作。要为第三方身份提供程序创建角色,请参阅 针对第三方身份提供商创建角色(联合身份验证)

重要

为支持 oidc-provider 资源的操作配置基于身份的策略时,IAM 会评估完整的 OIDC 身份提供者 URL,包括任何指定的路径。如果 OIDC 身份提供者 URL 包含路径,则必须将该路径作为 Resource 元素值包含在 oidc-provider ARN 中。您还可以选择将正斜杠和通配符(/*)附加到 URL 域,或者在 URL 路径中的任何位置使用通配符(*?)。如果请求中的 OIDC 身份提供者 URL 与策略中 Resource 元素设置的值不匹配,请求将会失败。

要解决有关 IAM OIDC 联合身份验证的常见问题,请参阅 AWS re:Post 上的解决与 OIDC 相关的错误

先决条件:验证身份提供商的配置

在创建 IAM OIDC 身份提供商之前,您必须从 IdP 处获得以下信息。有关获取 OIDC 提供商配置信息的更多信息,请参阅 IdP 的文档。

  1. 确定您的 OIDC 身份提供商的公开可用 URL。该 URL 必须以 https:// 开头。根据 OIDC 标准,允许使用路径组件,但不允许使用查询参数。通常,该 URL 只包含一个主机名,如 https://server.example.org 或 https://example.com。URL 不应包含端口号。

  2. 在 OIDC 身份提供商的 URL 末尾添加 /.well-known/openid-configuration,以查看该提供商的公开可用配置文档和元数据。您必须有一个 JSON 格式的发现文档,其中包含提供商的配置文档和元数据,这些文档和元数据可以从 OpenID Connect 提供商发现端点 URL 中检索。

  3. 确认以下值包含在提供商的配置信息中。如果 openid 配置缺少这些字段中的任何一个,则必须更新发现文档。此过程可能因身份提供商而异,因此请按照 IdP 文档完成此任务。

    • issuer:域的 URL。

    • jwks_uri:IAM 获取公钥的 JSON Web 密钥集 (JWKS) 端点。您的身份提供商必须在 openid 配置中包含一个 JSON Web 密钥集 (JWKS) 端点。此 URI 定义了从何处获取用于验证来自身份提供商的签名令牌的公钥。

    • claims_supported:有关用户的信息,可帮助确保来自 IdP 的 OIDC 身份验证响应包含 IAM 策略中 AWS 用于检查联合用户权限的必需属性。有关可用于声明的 IAM 条件键的列表,请参阅 AWS OIDC 联合身份验证的可用键

      • aud:必须在 JSON Web 令牌 (JWT) 中确定 IdP 发布的受众声明值。受众 (aud) 声明是特定于应用程序的,用于标识令牌的预期接收者。当您向 OpenID Connect 提供商注册移动或 Web 应用时,他们会建立一个客户端 ID 来标识该应用程序。客户端 ID 是应用的唯一标识符,在 aud 声明中传递用于进行身份验证。在创建 IAM OIDC 身份提供商时,aud 声明必须与“受众”值匹配。

      • iat:声明必须包含 iat 的值,该值表示 ID 令牌的发布时间。

      • iss:身份提供商的 URL。URL 必须以 https:// 开头,并且应与提供给 IAM 的提供商 URL 相对应。根据 OIDC 标准,允许使用路径组件,但不允许使用查询参数。通常,该 URL 只包含一个主机名,如 https://server.example.org 或 https://example.com。URL 不应包含端口号。

    • response_types_supported:id_token

    • subject_types_supported:public

    • id_token_signing_alg_values_supported:RS256

    注意

    可以在下面的示例中包括其他声明,如自定义;但是,AWS STS 将忽略该声明。

    { "issuer": "https://example-domain.com", "jwks_uri": "https://example-domain.com/jwks/keys", "claims_supported": [ "aud", "iat", "iss", "name", "sub", "custom" ], "response_types_supported": [ "id_token" ], "id_token_signing_alg_values_supported": [ "RS256" ], "subject_types_supported": [ "public" ] }

创建和管理 OIDC 提供商(控制台)

按照以下说明在 AWS Management Console 中创建和管理 IAM OIDC 身份提供程序。

重要

如果您使用的是 Google、Facebook 或 Amazon Cognito 的 OIDC 身份提供程序,请勿使用此过程创建单独的 IAM 身份提供程序。这些 OIDC 身份提供程序已经内置到 AWS,并可供您使用。相反,请按照以下步骤为身份提供程序创建新角色,请参阅 创建用于 OpenID Connect 联合身份验证(控制台)的角色

创建 IAM OIDC 身份提供程序(控制台)
  1. 在创建 IAM OIDC 身份提供程序之前,您必须向 IdP 注册您的应用程序以便接收客户端 ID。客户端 ID(也称为受众)是您的应用的唯一标识符,在您向 IdP 注册您的应用时颁发给您。有关如何获取客户端 ID 的更多信息,请参阅您的 IdP 的文档。

    注意

    AWS 使用我们的受信任根证书颁发机构(CA)库来保护与 OIDC 身份提供者(IdP)之间的通信,从而验证JSON Web 密钥集(JWKS)端点的 TLS 证书。如果您的 OIDC IdP 依赖的证书不是由其中某个受信任的 CA 签名,则仅在此时我们会使用 IdP 配置中设置的指纹来保护通信。如果我们无法检索 TLS 证书或需要 TLS v1.3,则 AWS 将回退到指纹验证。

  2. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  3. 在导航窗格中,选择 Identity providers(身份提供程序),然后选择 Add provider(添加提供商)。

  4. 对于 Configure provider(配置提供商),选择 OpenID Connect

  5. 对于 Provider URL,键入 IdP 的 URL。该 URL 必须遵从以下限制:

    • 该 URL 区分大小写。

    • URL 必须以 https:// 开头。

    • URL 不应包含端口号。

    • 在您的 AWS 账户 中,每个 IAM OIDC 身份提供程序都必须有唯一的 URL。如果尝试提交的 URL 已用于 AWS 账户 中的 OpenID Connect 提供商,则会出现错误。

  6. 对于 Audience,键入您向 IdP 注册的、在步骤 1 中接收的并且将向 AWS 发出请求的应用程序的客户端 ID。如果您对于此 IdP 有其他客户端 ID(也称为受众),稍后可以在提供商详细信息页面上添加它们。

    注意

    如果 IdP JWT 令牌包含 azp 声明,请输入此值作为“受众”值。

    如果您的 OIDC 身份提供商在令牌中同时设置 audazp 声明,则 AWS STS 将使用 azp 声明中的值作为 aud 声明。

  7. (可选)对于 Add tags (添加标签),您可以添加键值对来帮助识别和组织您的 IdP。您还可以使用标签来控制对 AWS 资源的访问。要了解有关标记 IAM OIDC 身份提供程序的更多信息,请参阅 标记 OpenID Connect(OIDC)身份提供者。选择 Add tag(添加标签)。为每个标签键值对输入值。

  8. 验证您提供的信息。完成此操作后,选择 Add provider(添加提供商)。IAM 将尝试检索并使用 OIDC IdP 服务器证书的顶级中间 CA 指纹来创建 IAM OIDC 身份提供者。

    注意

    OIDC 身份提供者的证书链必须以域或颁发者 URL 开始,然后是中间证书,最后是根证书。如果证书链顺序不同或者包含重复证书或其他证书,则您会收到签名不匹配错误,并且 STS 无法验证 JSON Web 令牌 (JWT)。更正服务器返回的链中证书的顺序以解决错误。有关证书链标准的更多信息,请参阅 RFC Series 网站上的 RFC 5246 中的 certificate_list

  9. 将 IAM 角色分配至身份提供程序,以向身份提供程序管理的外部用户身份授予访问账户中的 AWS 资源的权限。要了解有关为联合身份创建角色的更多信息,请参阅 针对第三方身份提供商创建角色(联合身份验证)

    注意

    角色信任策略中使用的 OIDC IdP 必须与信任它的角色位于同一账户中。

为 IAM OIDC 身份提供程序添加或删除指纹(控制台)
注意

AWS 使用我们的受信任根证书颁发机构(CA)库来保护与 OIDC 身份提供者(IdP)之间的通信,从而验证JSON Web 密钥集(JWKS)端点的 TLS 证书。如果您的 OIDC IdP 依赖的证书不是由其中某个受信任的 CA 签名,则仅在此时我们会使用 IdP 配置中设置的指纹来保护通信。如果我们无法检索 TLS 证书或需要 TLS v1.3,则 AWS 将回退到指纹验证。

  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在导航窗格中,选择 Identity providers(身份提供程序)。然后选择要更新的 IAM 身份提供程序的名称。

  3. 选择端点验证选项卡,然后在指纹部分中选择管理。要输入新的指纹值,请选择 Add thumbprint(添加指纹)。要删除指纹,请选择您要删除的指纹旁边的 Remove(删除)。

    注意

    IAM OIDC 身份提供程序必须具有至少 1 个、最多 5 个指纹。

    完成后,选择 Save changes(保存更改)。

为 IAM OIDC 身份提供程序添加受众(控制台)
  1. 在导航窗格中,选择 Identity providers(身份提供程序),然后选择要更新的 IAM 身份提供程序的名称。

  2. Audiences(受众)部分,选择 Actions(操作),然后选择 Add audience(添加受众)。

  3. 键入您向 IdP 注册的、在 步骤 1 中接收的并且将向 AWS 发出请求的应用程序的客户端 ID。然后选择 Add audiences(添加受众)。

    注意

    IAM OIDC 身份提供程序必须具有至少 1 个且最多 100 个受众。

为 IAM OIDC 身份提供程序删除受众(控制台)
  1. 在导航窗格中,选择 Identity providers(身份提供程序),然后选择要更新的 IAM 身份提供程序的名称。

  2. Audiences(受众)部分,选择要删除的受众旁边的单选按钮,然后选择 Actions(操作)。

  3. 选择 Remove audience(删除受众)。此时会打开一个新窗口。

  4. 如果删除受众,受众的联合身份将无法代入与受众关联的角色。在窗口中,阅读警告并通过在字段中键入 remove 一词以确认删除受众。

  5. 选择 Remove(删除)以删除受众。

删除 IAM OIDC 身份提供程序(控制台)
  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在导航窗格中,选择 Identity providers(身份提供程序)。

  3. 选中要删除的 IAM 身份提供程序旁边的复选框。此时会打开一个新窗口。

  4. 通过在字段中键入 delete 一词以确认您要删除此提供商。然后选择 Delete(删除)。

创建和管理 IAM OIDC 身份提供程序 (AWS CLI)

可以使用以下 AWS CLI 命令来创建和管理 IAM OIDC 身份提供程序。

创建 IAM OIDC 身份提供程序 (AWS CLI)
  1. (可选)要获取您 AWS 账户中所有 IAM OIDC 身份提供程序的列表,请运行以下命令:

  2. 要创建新的 IAM OIDC 身份提供程序,请运行以下命令:

更新现有 IAM OIDC 身份提供程序的服务器证书指纹列表 (AWS CLI)
要标记现有 IAM OIDC 身份提供程序 (AWS CLI)
要列出现有 IAM OIDC 身份提供程序 (AWS CLI) 的标签
要删除 IAM OIDC 身份提供程序 (AWS CLI) 的标签
在现有 IAM OIDC 提供商中添加或删除客户端 ID (AWS CLI)
  1. (可选)要获取您 AWS 账户中所有 IAM OIDC 身份提供程序的列表,请运行以下命令:

  2. (可选)要获取有关 IAM OIDC 身份提供程序的详细信息,请运行以下命令:

  3. 要向现有 IAM OIDC 身份提供程序中添加新的客户端 ID,请运行以下命令:

  4. 要从现有 IAM OIDC 身份提供程序中删除客户端,请运行以下命令:

删除 IAM OIDC 身份提供程序 (AWS CLI)
  1. (可选)要获取您 AWS 账户中所有 IAM OIDC 身份提供程序的列表,请运行以下命令:

  2. (可选)要获取有关 IAM OIDC 身份提供程序的详细信息,请运行以下命令:

  3. 要删除 IAM OIDC 身份提供程序,请运行以下命令:

创建和管理 OIDC 身份提供程序 (AWS API)

可以使用以下 IAM API 命令来创建和管理 OIDC 提供商。

创建 IAM OIDC 身份提供程序 (AWS API)
  1. (可选)要获取您 AWS 账户中所有 IAM OIDC 身份提供程序的列表,请调用以下操作:

  2. 要创建新的 IAM OIDC 身份提供程序,请调用以下操作:

更新现有 IAM OIDC 身份提供程序的服务器证书指纹列表 (AWS API)
要标记现有 IAM OIDC 身份提供程序 (AWS API)
要列出现有 IAM OIDC 身份提供程序 (AWS API) 的标签
要删除现有 IAM OIDC 身份提供程序 (AWS API) 的标签
在现有 IAM OIDC 提供商中添加或删除客户端 ID (AWS API)
  1. (可选)要获取您 AWS 账户中所有 IAM OIDC 身份提供程序的列表,请调用以下操作:

  2. (可选)要获取有关 IAM OIDC 身份提供程序的详细信息,请调用以下操作:

  3. 要向现有 IAM OIDC 身份提供程序中添加新的客户端 ID,请调用以下操作:

  4. 要从现有 IAM OIDC 身份提供程序中删除客户端 ID,请调用以下操作:

删除 IAM OIDC 身份提供程序 (AWS API)
  1. (可选)要获取您 AWS 账户中所有 IAM OIDC 身份提供程序的列表,请调用以下操作:

  2. (可选)要获取有关 IAM OIDC 身份提供程序的详细信息,请调用以下操作:

  3. 要删除 IAM OIDC 身份提供程序,请调用以下操作: