将应用配置为信任外部标识提供者

本文介绍如何在 Microsoft Entra ID 中管理应用程序上的联合标识凭据。 联合标识凭据在应用程序与外部标识提供者 (IdP) 之间创建信任关系。

然后,你可以将外部软件工作负载配置为将来自外部 IdP 的令牌交换为来自 Microsoft 标识平台的访问令牌。 外部工作负载可以访问 Microsoft Entra 保护的资源,而无需管理机密(在支持的场景中)。 若要详细了解令牌交换工作流,请阅读工作负载标识联合验证

本文介绍如何在 Microsoft Entra ID 中的应用程序上创建、列出和删除联合标识凭据。

重要注意事项和限制

若要创建、更新或删除联合标识凭据,则执行操作的帐户必须具有应用程序管理员应用程序开发人员云应用程序管理员或应用程序所有者角色。 更新联合标识凭据需要 microsoft.directory/applications/credentials/update 权限

最多可以向应用程序或用户分配的托管标识添加 20 个联合标识凭据。

配置联合标识凭据时,需要提供几条重要信息:

  • issuer 和 subject 是建立信任关系所需的关键信息 。 issuersubject 的组合在应用中必须唯一。 当外部软件工作负载请求 Microsoft 标识平台来交换访问令牌的外部令牌时,将针对外部令牌中提供的 issuersubject 声明来检查联合标识凭据的 issuer 和 subject 值 。 如果该验证检查通过,Microsoft 标识平台会向外部软件工作负载发出访问令牌。

  • issuer 是外部身份提供商的 URL,必须与要交换的外部令牌的 issuer 声明相匹配。 必需。 如果 issuer 声明具有值中的前导或尾随空格,则会阻止令牌交换。 此字段的字符限制为 600 个字符。

  • subject 是外部标识提供者的标识符,必须与要交换的外部令牌的 sub (subject) 声明相匹配。 subject 没有固定格式,因为每个 IdP 都使用自己的格式,格式有时是 GUID,有时是冒号分隔的标识符,有时是任意字符串。 此字段的字符限制为 600 个字符。

    重要

    “subject”设置值必须与 GitHub 工作流配置中的配置完全匹配。 否则,Microsoft 标识平台将查看传入的外部令牌,并拒绝交换访问令牌。 你不会收到错误消息,交换失败且没有错误。

    重要

    如果在 subject 设置中意外添加了不正确的外部工作负载信息,则已成功创建联合标识凭据,且未出现错误。 在令牌交换失败之前,此错误不会变得明显。

  • audiences 列出了可出现在外部令牌中的受众。 必需。 必须添加一个受众值,该值限制为 600 个字符。 建议的值为“api://AzureADTokenExchange”。 它表示 Microsoft 标识平台必须接受传入令牌中的 aud 声明。

  • name 是联合标识凭据的唯一标识符。 必需。 此字段的字符限制为 3-120 个字符,并且必须对 URL 友好。 支持字母数字、短划线或下划线字符,第一个字符必须是字母数字字符。 它在创建后就不可变。

  • description 是用户提供的联合标识凭据的说明。 可选。 Microsoft Entra ID 不会验证或检查说明。 此字段的上限为 600 个字符。

任何联合标识凭据属性值都不支持通配符。

若要详细了解受支持的区域、传播联合凭据更新的时间、支持的颁发者等,请阅读联合标识凭据的重要注意事项和限制

先决条件

在 Microsoft Entra ID 中创建应用注册。 授予应用访问外部软件工作负载的目标 Azure 资源的权限。

找到你在以下步骤中需要的应用的对象 ID,而不是应用程序(客户端)ID。 可以在 Microsoft Entra管理中心找到应用的对象 ID。 转到应用程序注册的列表,然后选择你的应用注册。 在“概述”->“基本信息”中,找到对象 ID。

获取外部 IdP 和软件工作负载的主题和颁发者信息,以下步骤中需要这些信息。

在应用上配置联合标识凭据

GitHub 操作

若要为 GitHub 操作添加联合标识,请执行以下步骤:

  1. Microsoft Entra 管理中心的应用注册体验中查找应用注册。 在左侧导航窗格中选择“证书和机密”,选择“联合凭据”选项卡,然后选择“添加凭据”

  2. 在“联合凭据方案”下拉框中,选择“部署 Azure 资源的 GitHub 操作”。

  3. 为 GitHub Actions 工作流程指定“组织”和“存储库” 。

  4. 对于“实体类型”,请选择“环境”、“分支”、“拉取请求”或“标记”,并指定值 。 值必须与 GitHub 工作流中的配置完全匹配。 分支和标记不支持模式匹配。 如果推送中工作流针对多个分支或标记运行,请指定一个环境。 有关详细信息,请阅读示例

  5. 为联合凭据添加“名称”。

  6. “颁发者”、“受众”和“主题标识符”字段会根据你输入的值自动填充 。

  7. 选择“添加”以配置联合凭据。

    Screenshot of the Add a credential window, showing sample values.

将 Microsoft Entra 应用程序注册中的以下值用于 GitHub 工作流:

  • AZURE_CLIENT_ID 应用程序(客户端)ID

  • AZURE_TENANT_ID 目录(租户)ID

    以下屏幕截图演示如何复制应用程序 ID 和租户 ID。

    Screenshot that demonstrates how to copy the application ID and tenant ID from Microsoft Entra admin center.

  • AZURE_SUBSCRIPTION_ID 你的订阅 ID。 若要获取订阅 ID,请在 Azure 门户中打开“订阅”并找到你的订阅。 然后复制“订阅 ID”。

实体类型示例

分支示例

对于主分支上的推送或拉取请求事件触发的工作流,请执行以下操作:

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

将“实体类型”指定为“分支”,将“GitHub 分支名称”指定为“main”。

环境示例

对于绑定到名为“production”的环境的“作业”,请执行以下操作:

on:
  push:
    branches:
      - main

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: deploy
        # ...deployment-specific steps

将“实体类型”指定为“环境”,将“GitHub 环境名称”指定为“production”。

标记示例

例如,对于目标为标记“v2”的推送触发的工作流,请执行以下操作:

on:
  push:
    # Sequence of patterns matched against refs/heads
    branches:
      - main
      - 'mona/octocat'
      - 'releases/**'
    # Sequence of patterns matched against refs/tags
    tags:
      - v2
      - v1.*

将“实体类型”指定为“标记”,将“GitHub 标记名称”指定为“v2”。

拉取请求示例

对于拉取请求事件触发的工作流,请将“实体类型”指定为“拉取请求”

Kubernetes

Microsoft Entra 管理中心的应用注册体验中查找应用注册。 在左侧导航窗格中选择“证书和机密”,选择“联合凭据”选项卡,然后选择“添加凭据”

从下拉菜单中选择“访问 Azure 资源的 Kubernetes”场景。

填写“群集证书颁发者 URL”、“命名空间”、“服务帐户名称”和“名称”字段:

  • “群集证书颁发者 URL”是托管群集的 OIDC 证书颁发者 URL 或自托管群集的 OIDC 证书颁发者 URL
  • “服务帐户名称”是 Kubernetes 服务帐户的名称,它为 Pod 中运行的进程提供标识。
  • “命名空间”是服务帐户命名空间。
  • “Name”是联合凭据的名称,以后将无法更改。

其他标识提供者

Microsoft Entra 管理中心的应用注册体验中查找应用注册。 在左侧导航窗格中选择“证书和机密”,选择“联合凭据”选项卡,然后选择“添加凭据”

从下拉菜单中选择“其他证书颁发者”场景。

指定以下字段(以在 Google Cloud 中运行的一个软件工作负载为例):

  • “Name”是联合凭据的名称,以后将无法更改。
  • 主题标识符:必须与外部标识提供者颁发的令牌中的 sub 声明匹配。 在本示例中使用 Google Cloud,subject 是你计划使用的服务帐户的唯一 ID。
  • 证书颁发者:必须与外部标识提供者颁发的令牌中的 iss 声明匹配。 符合 OIDC 发现规范的 URL。Microsoft Entra ID 使用此颁发者 URL 提取验证令牌所需的密钥。 对于 Google Cloud,issuer 为 https://accounts.google.com";

列出应用上的联合标识凭据

Microsoft Entra 管理中心的应用注册体验中查找应用注册。 在左侧导航窗格中选择“证书和机密”,然后选择“联合凭据”选项卡。应用上配置的联合凭据将会列出。

从应用中删除联合标识凭据

Microsoft Entra 管理中心的应用注册体验中查找应用注册。 在左侧导航窗格中选择“证书和机密”,然后选择“联合凭据”选项卡。应用上配置的联合凭据将会列出。

若要删除联合标识凭据,请选择凭据的“删除”图标。

系统必备

  • 在 Microsoft Entra ID 中创建应用注册。 授予应用访问外部软件工作负载的目标 Azure 资源的权限。
  • 查找应用的对象 ID、应用(客户端)ID 或标识符 URI,以下步骤中需要这些信息。 可以在 Microsoft Entra 管理中心找到这些值。 转到已注册应用程序的列表,然后选择你的应用注册。 在 Overview-Essentials 中,获取对象 ID、应用程序(客户端)ID 或应用程序 ID URI 值,以下步骤中需要这些信息。>
  • 获取外部 IdP 和软件工作负载的主题和颁发者信息,以下步骤中需要这些信息。

在应用上配置联合标识凭据

运行 az ad app federated-credential create 命令,在应用上创建新的联合标识凭据。

id 参数指定应用程序的标识符 URI、应用程序 ID 或对象 ID。 parameters 参数以 JSON 格式指定用于创建联合标识凭据的参数。

GitHub Actions 示例

name 指定联合标识凭据的名称。

issuer 标识 GitHub OIDC 提供程序的路径:https://token.actions.githubusercontent.com/。 此颁发者将受 Azure 应用程序信任。

subject 会标识 GitHub Actions 工作流的 GitHub 组织、存储库和环境。 当 GitHub Actions 工作流请求 Microsoft 标识平台将 GitHub 令牌交换为访问令牌时,便会根据提供的 GitHub 令牌检查联合标识凭据中的值。 在 Azure 授予访问令牌之前,请求必须符合此处定义的条件。

  • 对于绑定到环境的作业:repo:< Organization/Repository >:environment:< Name >
  • 对于未绑定到环境的作业,请根据用于触发工作流的 ref 路径包括分支/标记的 ref 路径:repo:< Organization/Repository >:ref:< ref path>。 例如 repo:n-username/ node_express:ref:refs/heads/my-branchrepo:n-username/ node_express:ref:refs/tags/my-tag
  • 对于由拉取请求事件触发的工作流:repo:< Organization/Repository >:pull-request
az ad app federated-credential create --id 00001111-aaaa-2222-bbbb-3333cccc4444 --parameters credential.json
("credential.json" contains the following content)
{
    "name": "Testing",
    "issuer": "https://token.actions.githubusercontent.com",
    "subject": "repo:octo-org/octo-repo:environment:Production",
    "description": "Testing",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

Kubernetes 示例

issuer 是服务帐户证书颁发者 URL(托管群集的 OIDC 证书颁发者 URL 或自托管群集的 OIDC 证书颁发者 URL)。

subject 是颁发给服务帐户的令牌中的使用者名称。 Kubernetes 对使用者名称使用以下格式:system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>

“name”是联合凭据的名称,以后将无法更改。

audiences 列出了可出现在外部令牌中的受众。 此字段是必需的。 建议的值为“api://AzureADTokenExchange”。

az ad app federated-credential create --id 00001111-aaaa-2222-bbbb-3333cccc4444 --parameters credential.json
("credential.json" contains the following content)
{
    "name": "Kubernetes-federated-credential",
    "issuer": "https://aksoicwesteurope.blob.core.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/",
    "subject": "system:serviceaccount:erp8asle:pod-identity-sa",
    "description": "Kubernetes service account federated credential",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

其他标识提供者示例

可以在应用上配置联合标识凭据,并创建与外部标识提供者的信任关系。 以下示例使用 Google Cloud 中运行的软件工作负载为例:

“name”是联合凭据的名称,以后将无法更改。

id:对象 ID、应用程序(客户端)ID 或应用的标识符 URI。

subject:必须与外部标识提供者颁发的令牌中的 sub 声明匹配。 在本示例中使用 Google Cloud,subject 是你计划使用的服务帐户的唯一 ID。

issuer:必须与外部标识提供者颁发的令牌中的 iss 声明匹配。 符合 OIDC 发现规范的 URL。Microsoft Entra ID 使用此颁发者 URL 提取验证令牌所需的密钥。 对于 Google Cloud,issuer 为 https://accounts.google.com";

audiences:列出可出现在外部令牌中的受众。 此字段是必需的。 建议的值为“api://AzureADTokenExchange”。

az ad app federated-credential create --id 00001111-aaaa-2222-bbbb-3333cccc4444 --parameters credential.json
("credential.json" contains the following content)
{
    "name": "GcpFederation",
    "issuer": "https://accounts.google.com",
    "subject": "112633961854638529490",
    "description": "Test GCP federation",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

列出应用上的联合标识凭据

运行 az ad app federated-credential list 命令,列出应用中的联合标识凭据。

id 参数指定应用程序的标识符 URI、应用程序 ID 或对象 ID。

az ad app federated-credential list --id 00001111-aaaa-2222-bbbb-3333cccc4444

获取应用的联合标识凭据

运行 az ad app federated-credential show 命令,获取应用的联合标识凭据。

id 参数指定应用程序的标识符 URI、应用程序 ID 或对象 ID。

federated-credential-id 指定联合标识凭据的 ID 或名称。

az ad app federated-credential show --id 00001111-aaaa-2222-bbbb-3333cccc4444 --federated-credential-id c79f8feb-a9db-4090-85f9-90d820caa0eb

从应用中删除联合标识凭据

运行 az ad app federated-credential delete 命令,从应用中删除联合标识凭据。

id 参数指定应用程序的标识符 URI、应用程序 ID 或对象 ID。

federated-credential-id 指定联合标识凭据的 ID 或名称。

az ad app federated-credential delete --id 00001111-aaaa-2222-bbbb-3333cccc4444 --federated-credential-id c79f8feb-a9db-4090-85f9-90d820caa0eb

先决条件

  • 若要运行示例脚本,有两个选项:
    • 使用 Azure Cloud Shell,你可使用代码块右上角的“试用”按钮打开它。
    • 如下一节所述,使用 Azure PowerShell 在本地运行脚本。
  • 在 Microsoft Entra ID 中创建应用注册。 授予应用访问外部软件工作负载的目标 Azure 资源的权限。
  • 找到你在以下步骤中需要的应用的对象 ID,而不是应用程序(客户端)ID。 可以在 Microsoft Entra管理中心找到应用的对象 ID。 转到已注册应用程序的列表,然后选择你的应用注册。 在“概述”->“基本信息”中,找到对象 ID。
  • 获取外部 IdP 和软件工作负载的主题和颁发者信息,以下步骤中需要这些信息。

在本地配置 Azure PowerShell

若要在本文中本地使用 Azure PowerShell 而不是使用 Cloud Shell,请执行以下操作:

  1. 安装最新版本的 Azure PowerShell(如果尚未安装)。

  2. 登录 Azure。

    Connect-AzAccount
    
  3. 安装最新版本的 PowerShellGet

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    在下一步运行此命令后,可能需要 Exit 退出当前 PowerShell 会话。

  4. 安装 Az.Resources 模块的预发布版本,以执行本文中的联合标识凭据操作。

    Install-Module -Name Az.Resources -AllowPrerelease
    

在应用上配置联合标识凭据

运行 New-AzADAppFederatedCredential cmdlet,在应用程序上创建新的联合标识凭据。

GitHub Actions 示例

  • ApplicationObjectId:你先前在 Microsoft Entra ID 中注册的应用的对象 ID(不是应用程序(客户端)ID)。
  • Issuer 将 GitHub 标识为外部令牌颁发者。
  • Subject 会标识 GitHub Actions 工作流的 GitHub 组织、存储库和环境。 当 GitHub Actions 工作流请求 Microsoft 标识平台将 GitHub 令牌交换为访问令牌时,便会根据提供的 GitHub 令牌检查联合标识凭据中的值。
    • 对于绑定到环境的作业:repo:< Organization/Repository >:environment:< Name >
    • 对于未绑定到环境的作业,请根据用于触发工作流的 ref 路径包括分支/标记的 ref 路径:repo:< Organization/Repository >:ref:< ref path>。 例如 repo:n-username/ node_express:ref:refs/heads/my-branchrepo:n-username/ node_express:ref:refs/tags/my-tag
    • 对于由拉取请求事件触发的工作流:repo:< Organization/Repository >:pull-request
  • “Name”是联合凭据的名称,以后将无法更改。
  • Audience 列出了可出现在外部令牌中的受众。 此字段是必需的。 建议的值为“api://AzureADTokenExchange”。
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://token.actions.githubusercontent.com/' -Name 'GitHub-Actions-Test' -Subject 'repo:octo-org/octo-repo:environment:Production'

Kubernetes 示例

  • ApplicationObjectId:你先前在 Microsoft Entra ID 中注册的应用的对象 ID(不是应用程序(客户端)ID)。
  • Issuer 是服务帐户证书颁发者 URL(托管群集的 OIDC 证书颁发者 URL 或自托管群集的 OIDC 证书颁发者 URL)。
  • Subject 是颁发给服务帐户的令牌中的使用者名称。 Kubernetes 对使用者名称使用以下格式:system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>
  • “Name”是联合凭据的名称,以后将无法更改。
  • “Audience”列出可出现在外部令牌的 aud 声明中的受众。
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://aksoicwesteurope.blob.core.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/' -Name 'Kubernetes-federated-credential' -Subject 'system:serviceaccount:erp8asle:pod-identity-sa'

其他标识提供者示例

指定以下参数(以在 Google Cloud 中运行的一个软件工作负载为例):

  • ObjectID:你先前在 Microsoft Entra ID 中注册的应用的对象 ID(不是应用程序(客户端)ID)。
  • “Name”是联合凭据的名称,以后将无法更改。
  • Subject:必须与外部标识提供程序签发的令牌中的 sub 声明匹配。 在本示例中使用 Google Cloud,subject 是你计划使用的服务帐户的唯一 ID。
  • 证书颁发者:必须与外部标识提供者颁发的令牌中的 iss 声明匹配。 符合 OIDC 发现规范的 URL。Microsoft Entra ID 使用此颁发者 URL 提取验证令牌所需的密钥。 对于 Google Cloud,issuer 为 https://accounts.google.com";
  • Audiences:必须与外部令牌中的 aud 声明匹配。 出于安全原因,应为用于 Microsoft Entra ID 的令牌选取唯一值。 建议的值为“api://AzureADTokenExchange”。
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://accounts.google.com' -Name 'GcpFederation' -Subject '112633961854638529490'

列出应用上的联合标识凭据

运行 Get-AzADAppFederatedCredential cmdlet,列出应用程序的联合标识凭据。

Get-AzADApplication -ObjectId $app | Get-AzADAppFederatedCredential

获取应用的联合标识凭据

运行 Get-AzADAppFederatedCredential cmdlet,按 ID 从应用程序获取联合标识凭据。

Get-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

从应用中删除联合标识凭据

运行 Remove-AzADAppFederatedCredential cmdlet,从应用程序中删除联合标识凭据。

Remove-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

先决条件

在 Microsoft Entra ID 中创建应用注册。 授予应用访问外部软件工作负载的目标 Azure 资源的权限。

找到你在以下步骤中需要的应用的对象 ID,而不是应用程序(客户端)ID。 可以在 Microsoft Entra管理中心找到应用的对象 ID。 转到已注册应用程序的列表,然后选择你的应用注册。 在“概述”->“基本信息”中,找到对象 ID。

获取外部 IdP 和软件工作负载的主题和颁发者信息,以下步骤中需要这些信息。

Microsoft Graph 终结点 (https://graph.microsoft.com) 公开 REST API 以在应用程序上创建、更新、删除 federatedIdentityCredentials。 启动 Azure Cloud Shell 并登录到租户,以便从 AZ CLI 运行 Microsoft Graph 命令。

在应用上配置联合标识凭据

GitHub 操作

运行以下方法,在应用上创建新的联合标识凭据(由应用的对象 ID 指定)。 issuer 将 GitHub 标识为外部令牌颁发者。 subject 会标识 GitHub Actions 工作流的 GitHub 组织、存储库和环境。 当 GitHub Actions 工作流请求 Microsoft 标识平台将 GitHub 令牌交换为访问令牌时,便会根据提供的 GitHub 令牌检查联合标识凭据中的值。

az rest --method POST --uri 'https://graph.microsoft.com/applications/00001111-aaaa-2222-bbbb-3333cccc4444/federatedIdentityCredentials' --body '{"name":"Testing","issuer":"https://token.actions.githubusercontent.com","subject":"repo:octo-org/octo-repo:environment:Production","description":"Testing","audiences":["api://AzureADTokenExchange"]}'

你会获得响应:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Testing",
  "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
  "issuer": "https://token.actions.githubusercontent.com",
  "name": "Testing",
  "subject": "repo:octo-org/octo-repo:environment:Production"
}

name:Azure 应用程序的名称。

issuer:GitHub OIDC 提供程序的路径:https://token.actions.githubusercontent.com。 此颁发者将受 Azure 应用程序信任。

subject:在 Azure 授予访问令牌之前,请求必须符合此处定义的条件。

  • 对于绑定到环境的作业:repo:< Organization/Repository >:environment:< Name >
  • 对于未绑定到环境的作业,请根据用于触发工作流的 ref 路径包括分支/标记的 ref 路径:repo:< Organization/Repository >:ref:< ref path>。 例如 repo:n-username/ node_express:ref:refs/heads/my-branchrepo:n-username/ node_express:ref:refs/tags/my-tag
  • 对于由拉取请求事件触发的工作流:repo:< Organization/Repository >:pull-request

audiences 列出了可出现在外部令牌中的受众。 此字段是必需的。 建议的值为“api://AzureADTokenExchange”。

Kubernetes 示例

运行以下方法,在应用上配置联合标识凭据,并创建与 Kubernetes 服务帐户的信任关系。 指定下列参数:

  • issuer 是服务帐户证书颁发者 URL(托管群集的 OIDC 证书颁发者 URL 或自托管群集的 OIDC 证书颁发者 URL)。
  • subject 是颁发给服务帐户的令牌中的使用者名称。 Kubernetes 对使用者名称使用以下格式:system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>
  • “name”是联合凭据的名称,以后将无法更改。
  • audiences 列出了可出现在外部令牌中的受众。 此字段是必需的。 建议的值为“api://AzureADTokenExchange”。
az rest --method POST --uri 'https://graph.microsoft.com/applications/00001111-aaaa-2222-bbbb-3333cccc4444/federatedIdentityCredentials' --body '{"name":"Kubernetes-federated-credential","issuer":"https://aksoicwesteurope.blob.core.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/","subject":"system:serviceaccount:erp8asle:pod-identity-sa","description":"Kubernetes service account federated credential","audiences":["api://AzureADTokenExchange"]}'

你会获得响应:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Kubernetes service account federated credential",
  "id": "51ecf9c3-35fc-4519-a28a-8c27c6178bca",
  "issuer": "https://aksoicwesteurope.blob.core.windows.net/aaaabbbb-0000-cccc-1111-dddd2222eeee/",
  "name": "Kubernetes-federated-credential",
  "subject": "system:serviceaccount:erp8asle:pod-identity-sa"
}

其他标识提供者示例

运行以下方法,在应用上配置联合标识凭据,并创建与外部标识提供者的信任关系。 指定以下参数(以在 Google Cloud 中运行的一个软件工作负载为例):

  • “name”是联合凭据的名称,以后将无法更改。
  • ObjectID:你先前在 Microsoft Entra ID 中注册的应用的对象 ID(不是应用程序(客户端)ID)。
  • subject:必须与外部标识提供者颁发的令牌中的 sub 声明匹配。 在本示例中使用 Google Cloud,subject 是你计划使用的服务帐户的唯一 ID。
  • issuer:必须与外部标识提供者颁发的令牌中的 iss 声明匹配。 符合 OIDC 发现规范的 URL。Microsoft Entra ID 使用此颁发者 URL 提取验证令牌所需的密钥。 对于 Google Cloud,issuer 为 https://accounts.google.com";
  • audiences 列出了可出现在外部令牌中的受众。 此字段是必需的。 建议的值为“api://AzureADTokenExchange”。
az rest --method POST --uri 'https://graph.microsoft.com/applications/<ObjectID>/federatedIdentityCredentials' --body '{"name":"GcpFederation","issuer":"https://accounts.google.com","subject":"112633961854638529490","description":"Testing","audiences":["api://AzureADTokenExchange"]}'

你会获得响应:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Testing",
  "id": "51ecf9c3-35fc-4519-a28a-8c27c6178bca",
  "issuer": "https://accounts.google.com"",
  "name": "GcpFederation",
  "subject": "112633961854638529490"
}

列出应用上的联合标识凭据

运行以下方法,为应用列出联合标识凭据(由应用的对象 ID 指定):

az rest -m GET -u 'https://graph.microsoft.com/applications/00001111-aaaa-2222-bbbb-3333cccc4444/federatedIdentityCredentials'

你会获得类似如下所示的响应:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials",
  "value": [
    {
      "audiences": [
        "api://AzureADTokenExchange"
      ],
      "description": "Testing",
      "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
      "issuer": "https://token.actions.githubusercontent.com/",
      "name": "Testing",
      "subject": "repo:octo-org/octo-repo:environment:Production"
    }
  ]
}

获取应用的联合标识凭据

运行以下方法,获取应用的联合标识凭据(由应用的对象 ID 指定):

az rest -m GET -u 'https://graph.microsoft.com/applications/00001111-aaaa-2222-bbbb-3333cccc4444//federatedIdentityCredentials/00aa00aa-bb11-cc22-dd33-44ee44ee44ee'

你会获得类似如下所示的响应:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials",
  "value": {
      "@odata.context": "https://graph.microsoft.com/$metadata#applications('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials/$entity",
      "@odata.id": "https://graph.microsoft.com/v2/3d1e2be9-a10a-4a0c-8380-7ce190f98ed9/directoryObjects/$/Microsoft.DirectoryServices.Application('00001111-aaaa-2222-bbbb-3333cccc4444')/federatedIdentityCredentials('00001111-aaaa-2222-bbbb-3333cccc4444')/00001111-aaaa-2222-bbbb-3333cccc4444",
    "audiences": [
        "api://AzureADTokenExchange"
      ],
      "description": "Testing",
      "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
      "issuer": "https://token.actions.githubusercontent.com/",
      "name": "Testing",
      "subject": "repo:octo-org/octo-repo:environment:Production"
    }
}

从应用中删除联合标识凭据

运行以下方法,从应用中删除联合标识凭据(由应用的对象 ID 指定):

az rest -m DELETE  -u 'https://graph.microsoft.com/applications/00001111-aaaa-2222-bbbb-3333cccc4444/federatedIdentityCredentials/00aa00aa-bb11-cc22-dd33-44ee44ee44ee'

后续步骤