本文介绍如何在 Microsoft Entra ID 中管理应用程序中的联合标识凭据。 联合标识凭据在应用程序与外部标识提供者(IdP)之间创建信任关系。
然后,可以将外部软件工作负载配置为从外部 IdP 交换令牌,以获取 Microsoft 标识平台的访问令牌。 外部工作负荷可以访问 Microsoft Entra 保护的资源,而无需管理机密(在受支持的方案中)。 若要详细了解令牌交换工作流,请阅读 工作负载身份联合。
本文介绍如何在 Microsoft Entra ID 中的应用程序中创建、列出和删除联合标识凭据。
重要注意事项和限制
若要创建、更新或删除联合标识凭据,执行该作的帐户必须是应用程序的所有者,或具有以下 Entra 角色之一: 应用程序管理员、 云应用程序管理员、 全局管理员或 混合标识管理员。 需要具有 microsoft.directory/applications/credentials/update 权限 才能更新联合身份凭证。
最多可将 20 个联合标识凭据添加到应用程序或用户分配的托管标识。
配置联合标识凭据时,需要提供几个重要的信息:
颁发者和使用者是设置信任关系所需的关键信息部分。 应用中
issuer和subject的组合必须是唯一的。 当外部软件工作负荷请求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 动作添加联合身份,请执行以下步骤:
在 Microsoft Entra 管理中心的应用注册体验中找到应用注册。 在左侧导航窗格中选择 “证书和机密 ”,选择“ 联合凭据 ”选项卡,然后选择“ 添加凭据”。
在 联合凭据场景 下拉列表框中,选择 部署 Azure 资源的 GitHub 动作。
为 GitHub Actions 工作流指定组织和存储库。
对于 实体类型,请选择 “环境”、“ 分支”、“ 拉取请求”或 “标记” 并指定值。 这些值必须与 GitHub 工作流中的配置完全匹配。 分支和标签不支持模式匹配。 如果您的推送工作流在多个分支或标签上运行,请指定一个环境。 有关详细信息,请阅读 示例。
请为联合凭据添加名称。
根据输入的值自动填充 颁发者、 受众和 使用者标识符 字段。
选择 “添加” 以配置联合凭据。
在 GitHub 工作流中使用以下来自 Microsoft Entra 应用注册的值:
AZURE_CLIENT_ID应用程序(客户端)IDAZURE_TENANT_ID目录(租户)ID以下屏幕截图演示如何复制应用程序 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
指定实体类型为Environment和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.*
指定 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 管理中心的应用注册体验中找到应用注册。 在左侧导航窗格中选择 “证书和机密 ”,然后选择“ 联合凭据 ”选项卡。列出了在应用上配置的联合凭据。
若要删除联合标识凭据,请选择凭据的 “删除” 图标。
设置灵活的联合身份凭据(预览)
- 导航到Microsoft Entra ID,然后选择要在其中配置联合标识凭据的应用程序。
- 在左侧导航窗格中,选择 “证书和机密”。
- 在 “联合凭据 ”选项卡下,选择“ + 添加凭据”。
- 在显示的 “添加凭据 ”窗口中,从 联合凭据方案旁边的下拉菜单中选择 “其他颁发者”。
- 在 “值” 中,输入要使用的声明匹配表达式。
先决条件
- 如果没有 Azure 帐户,请在继续前注册免费帐户。
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅 使用 Azure CLI 向 Azure 进行身份验证。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 使用和管理 Azure CLI 中的扩展。
运行az version命令,以查看已安装的版本和依赖库。 若要升级到最新版本,请运行az upgrade。
- 在 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-branch或repo: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,请执行以下操作:
安装最新版本的 Azure PowerShell(如果尚未安装)。
登录到 Azure。
Connect-AzAccount-
Install-Module -Name PowerShellGet -AllowPrerelease在下一步运行此命令后,可能需要
Exit退出当前 PowerShell 会话。 安装
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-branch或repo: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-branch或repo: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'
另请参阅
- 若要了解如何使用 Kubernetes 的工作负荷标识联合,请参阅 Microsoft Entra Workload ID for Kubernetes 开源项目。
- 若要了解如何使用 GitHub Actions 工作负载身份联合,请参阅 配置 GitHub Actions 工作流以获取访问令牌。
- 阅读 GitHub Actions 文档 ,详细了解如何配置 GitHub Actions 工作流,以便从Microsoft标识提供者获取访问令牌并访问 Azure 资源。
- 有关详细信息,请阅读 Microsoft Entra ID 如何使用 OAuth 2.0 客户端凭据授权 和由另一个 IdP 颁发的客户端断言来获取令牌。
- 有关外部标识提供者创建的 JWT 所需的格式的信息,请阅读 断言格式。