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

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

然后,可以将外部软件工作负载配置为从外部 IdP 交换令牌,以获取 Microsoft 标识平台的访问令牌。 外部工作负荷可以访问 Microsoft Entra 保护的资源,而无需管理机密(在受支持的方案中)。 若要详细了解令牌交换工作流,请阅读 工作负载身份联合

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

重要注意事项和限制

若要创建、更新或删除联合标识凭据,执行该作的帐户必须是应用程序的所有者,或具有以下 Entra 角色之一: 应用程序管理员云应用程序管理员全局管理员混合标识管理员。 需要具有 microsoft.directory/applications/credentials/update 权限 才能更新联合身份凭证。

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

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

  • 颁发者和使用者是设置信任关系所需的关键信息部分。 应用中issuersubject的组合必须是唯一的。 当外部软件工作负荷请求Microsoft标识平台以将外部令牌交换为访问令牌时,会根据外部令牌中提供的issuer检查联合标识凭据的颁发者使用者值。 如果验证检查通过,Microsoft标识平台向外部软件工作负荷颁发访问令牌。

  • 颁发者 是外部标识提供者的 URL,必须与进行交换的外部令牌中的 issuer 声明相匹配。 必填。 issuer如果声明在值中包含前导或尾随空格,则会阻止令牌的交换。 此字段的字符限制为 600 个字符。

  • subject 是外部软件工作负载的标识符,必须与被交换的外部令牌的 sub (subject) 声明匹配。 subject 没有固定格式,因为每个 IdP 使用他们自己的格式- 有时候是全球唯一标识符 (GUID),有时候是冒号分隔的标识符,有时候是任意的字符串。 此字段的字符限制为 600 个字符。

    重要

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

    重要

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

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

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

  • 说明 是用户为联合身份凭证提供的说明。 可选。 说明未经过 Microsoft Entra ID 的验证或检查。 此字段的限制为 600 个字符。

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

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

先决条件

  • 在 Microsoft Entra ID 中创建应用注册托管身份。 向应用授予对外部软件工作负荷所针对的 Azure 资源的访问权限。
  • 在以下步骤中,查找应用程序的对象 ID(不是应用程序(客户端)ID)。 可以在 Microsoft Entra 管理中心中找到应用的对象 ID。 转到应用注册列表并选择应用注册。 在 “概述”中,可以找到 对象 ID
  • 获取外部 IdP 和软件工作负载的 主体发行者 信息,这些信息在以下步骤中需要用到。

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

GitHub Actions

若要为 GitHub 动作添加联合身份,请执行以下步骤:

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

  2. 联合凭据场景 下拉列表框中,选择 部署 Azure 资源的 GitHub 动作

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

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

  5. 请为联合凭据添加名称

  6. 根据输入的值自动填充 颁发者受众使用者标识符 字段。

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

    “添加凭据”窗口的屏幕截图,其中显示了示例值。

在 GitHub 工作流中使用以下来自 Microsoft Entra 应用注册的值:

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

  • AZURE_TENANT_ID 目录(租户)ID

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

    演示如何从 Microsoft Entra 管理中心复制应用程序 ID 和租户 ID 的屏幕截图。

实体类型示例

分支示例

对于由主分支上的推送或拉取请求事件触发的工作流:

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

指定 Branch实体类型,以及“main”的 GitHub 分支名称

环境示例

对于绑定到名为“production”的环境的作业:

on:
  push:
    branches:
      - main

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

指定实体类型EnvironmentGitHub 环境名称为“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.*

指定 Tag实体类型以及“v2”的 GitHub 标记名称

拉取请求示例

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

Kubernetes

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

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

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

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

其他标识提供者

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

从下拉菜单中选择 “其他颁发者” 方案。

指定以下字段(使用 Google Cloud 中运行的软件工作负载作为示例):

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

列出应用程序中的联合标识凭据

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

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

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

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

设置灵活的联合身份凭据(预览)

  1. 导航到Microsoft Entra ID,然后选择要在其中配置联合标识凭据的应用程序。
  2. 在左侧导航窗格中,选择 “证书和机密”。
  3. “联合凭据 ”选项卡下,选择“ + 添加凭据”。
  4. 在显示的 “添加凭据 ”窗口中,从 联合凭据方案旁边的下拉菜单中选择 “其他颁发者”。
  5. “值” 中,输入要使用的声明匹配表达式。

先决条件

  • 在 Microsoft Entra ID 中创建应用注册。 向应用授予对外部软件工作负荷所针对的 Azure 资源的访问权限。
  • 在以下步骤中,需要查找应用的对象标识、应用(客户端)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 示例

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

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

主题标识 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 示例

发行者是您的服务帐户发行者 URL(托管群集的 OIDC 发行者 URL 或自托管群集的 OIDC 发行者 URL)。

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

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

访问群体列出了可在外部令牌中显示的访问群体。 该字段是必需字段。 推荐的值是 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 的本示例中,主体 是计划使用的服务帐户的唯一 ID。
  • issuer:必须与外部身份提供者发行的令牌中 iss 的声明相匹配。 符合 OIDC 发现规范的 URL。Microsoft Entra ID 使用此颁发者 URL 提取验证令牌所需的密钥。 对于 Google Cloud, 颁发者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。

指定联合身份凭据的 ID 或名称为 federated-credential-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)。
  • 颁发者 将 GitHub 标识为外部令牌颁发者。
  • 主体标识 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.
  • 名称 是联合凭据的名称,以后无法更改。
  • 访问群体 列出可在外部令牌中显示的访问群体。 该字段是必需字段。 推荐的值是 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)。
  • 发行者 是您的服务帐户发行者 URL(对于托管群集是 OIDC 发行者 URL,对于自托管群集是 OIDC 发行者 URL)。
  • 主体 是颁发给服务帐户的令牌中的主体名称。 Kubernetes 的主体名称使用以下格式: system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>
  • 名称 是联合凭据的名称,以后无法更改。
  • 访问群体 列出了可在外部令牌声明中显示的 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。
  • 名称 是联合凭据的名称,以后无法更改。
  • 主题:必须与外部标识提供者颁发的令牌中包含的 sub 声明匹配。 在此使用 Google Cloud 的示例中,主体 是计划使用的服务帐户的唯一 ID。
  • 颁发者:必须与外部身份提供者颁发的令牌中的iss声明匹配。 符合 OIDC 发现规范的 URL。Microsoft Entra ID 使用此颁发者 URL 提取验证令牌所需的密钥。 对于 Google Cloud, 颁发者https://accounts.google.com
  • 受众:必须与外部令牌里的声明相符 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 Actions

运行以下方法,在应用 上创建新的联合标识凭据 (由应用的对象 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 中运行的软件工作负载作为示例):

  • 名称 是联合凭据的名称,以后无法更改。
  • ObjectID:您之前在 Microsoft Entra ID 中注册的应用的对象 ID(而不是应用程序(客户端)ID)。
  • subject:必须与外部标识提供者颁发的令牌中sub的声明匹配。 在此示例中,在使用 Google Cloud 时,主体 是您计划使用的服务帐户的唯一 ID。
  • 颁发者:必须与由外部身份提供者颁发的令牌中的 iss 声明匹配。 符合 OIDC 发现规范的 URL。Microsoft Entra ID 使用此颁发者 URL 提取验证令牌所需的密钥。 对于 Google Cloud, 颁发者 为“https://accounts.google.com"。
  • 访问群体 列出了可在外部令牌中显示的访问群体。 该字段是必需字段。 建议的值为“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'

另请参阅