设置灵活联合标识凭据(预览)

本文提供了有关如何在 Azure 门户或 Microsoft Graph 浏览器中设置灵活联合标识凭据的指南。 灵活联合标识凭据是 Microsoft Entra 工作负载 ID 的一项高级功能,可增强现有的联合标识凭据模型。

先决条件

注释

灵活联合标识凭据支持尚不适用于 托管标识

通过 Microsoft Graph 设置联合身份凭据

为了适应灵活联合标识凭据功能,federatedIdentityCredentials 资源正使用新的 claimsMatchingExpression 属性进行扩展。 除此之外,subject 属性现在可为 null。 claimsMatchingExpressionsubject 属性是相互排斥的,因此不能在联合标识凭据中同时定义这两个属性。

  • audiences:可出现在外部令牌中的受众。 此字段是必需的,Microsoft Entra ID 应设置为 api://AzureADTokenExchange。 它表示 Microsoft 标识平台应接受传入令牌中的 aud 声明。 此值表示外部标识提供者中的 Microsoft Entra ID,且在标识提供程序中没有固定值。你可能需要在 IdP 中创建新应用程序注册,以用作此令牌的受众。
  • issuer:外部身份提供者的URL。 必须与交换的外部令牌的颁发者声明匹配。
  • subject:外部标识提供者中外部软件工作负载的标识符。 与受众值一样,它没有固定格式,因为每个 IdP 都使用自己的格式,有时是 GUID,有时是冒号分隔标识符,有时是任意字符串。 此处的值必须与提供给 Microsoft Entra ID 的令牌中的 sub 声明匹配。 如果定义了 subject,则 claimsMatchingExpression 必须设置为 null。
  • name:用于标识凭据的唯一字符串。 此属性是备用键,其值可用于通过 GETUPSERT 操作引用联合标识凭据。
  • claimsMatchingExpression:一个新的复杂类型,包含 valuelanguageVersion 两个属性。 值用于定义表达式,languageVersion 用于定义所使用的灵活联合标识凭据表达式语言 (FFL) 的版本。 languageVersion 应始终设置为 1。 如果定义了 claimsMatchingExpression,则 subject 必须设置为 null。

设置灵活联合标识凭据

  1. 导航到 Microsoft Entra ID,然后选择要在其中配置联合标识凭据的应用程序。
  2. 在左侧导航窗格中,选择“证书”、“& 机密”和“”。
  3. 在“联合凭据”选项卡下,选择“+ 添加凭据”。
  4. 在出现的“添加凭据”窗口中,从“联合凭据方案”旁的下拉菜单中,选择“其他证书颁发者”。
  5. 在“连接帐户”下输入外部标识提供者的*颁发者 URL。 例如:
    • GitHub:https://token.actions.githubusercontent.com
    • GitLab:https://gitlab.example.com
    • Terraform Cloud:https://app.terraform.io
  6. 在“值”中输入要使用的声明匹配表达式,例如 claims['sub'] matches 'repo:contoso/contoso-repo:ref:refs/heads/*'
  7. 选择 添加 以保存凭据。

灵活联合标识凭据的更多示例

灵活联合标识凭据可以使用不同的颁发者,例如 GitHub、GitLab 和 Terraform Cloud。 使用以下选项卡为每个发行者设置灵活可变的联合身份凭证。

此示例演示了如何使用 job_workflow_ref 声明的表达式为 GitHub 设置灵活联合标识凭据。 用途

{
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "name": "MyGitHubFlexibleFIC",
  "issuer": "https://token.actions.githubusercontent.com",
  "claimsMatchingExpression": {
    "value": "claims['sub'] matches 'repo:contoso/contoso-repo:ref:refs/heads/*' and claims['job_workflow_ref'] matches 'contoso/contoso-prod/.github/workflows/*.yml@refs/heads/main'",
    "languageVersion": 1
  }
}