灵活联合标识凭据是 Microsoft Entra Workload ID 的高级功能,可增强现有的联合标识凭据模型。 本文会介绍这些凭据的工作原理、优点和当前限制。
灵活联合标识凭据允许使用受限的表达式语言来匹配传入的 subject
声明,且允许包含自定义声明,从而减少管理开销,解决工作负载联合身份验证中的缩放限制。 如果希望利用 Microsoft Entra 简化外部工作负载的身份验证,本指南会提供使用此强大功能所需的见解和步骤。
为何使用灵活联合标识凭据?
在将联合标识凭据中定义的 subject
、issuer
和 audience
与发送到 Microsoft Entra 的令牌中包含的 subject
、issuer
和 audience
进行比较时,工作负载联合身份验证中联合标识凭据的当前行为需要显式匹配。 当与给定应用程序或用户分配的托管标识的当前 20 个联合身份凭据限制相结合时,很快就会达到缩放限制。
灵活联合标识凭据允许在与传入的 subject
声明匹配时,使用受限的表达式语言来扩展现有的联合标识凭据模型。 其还允许在联合标识凭据中包含某些允许的自定义声明,将联合标识凭据授权模型扩展到 subject
、issuer
和 audience
声明之外。
在尝试使用 Microsoft Entra 对外部工作负载进行身份验证时,灵活联合标识凭据有助于减少管理开销,解决工作负载联合身份验证实现中的缩放限制。
灵活联合标识凭据是如何工作的?
灵活联合标识凭据不会更改联合标识凭据提供的基线功能。 这些信任关系仍用于指示应用程序应信任来自外部 IdP 的哪个令牌。 这些关系通过启用以前需要多个联合标识凭据的方案来扩展联合标识凭据的功能,而不是在单个灵活联合标识凭据下进行管理。 一些示例包括:
- 具有多种工作流的 GitHub 存储库,每个工作流在不同的分支上运行(或跨分支使用)。 以前,每个可以运行工作流的分支都需要唯一的联合标识凭据。 使用灵活联合标识凭据,即可在单个联合标识凭据下管理此方案。
- Terraform Cloud
run_phases
计划,每个计划都需要唯一的联合标识凭据。 使用灵活联合标识凭据,即可在单个灵活联合标识凭据下管理此计划。 - 可重用的 GitHub Actions 工作流,可在其中对 GitHub 的自定义
job_workflow_ref
声明使用通配符。
注意
目前提供了灵活联合标识凭据支持,以便与 GitHub、GitLab 和 Terraform Cloud 颁发的令牌进行匹配。 此支持仅适用于当前在应用程序对象上配置的联合标识凭据。 只能通过 Microsoft Graph 或 Azure 门户创建和管理灵活联合标识凭据。
灵活联合标识凭据语言结构
灵活联合标识凭据表达式由声明查找、运算符和比较数三个部分组成。 有关每个部分的分解,请参阅下表:
名称 | 步骤 | 示例 |
---|---|---|
声明查找 | 声明查找必须遵循以下模式:claims[‘<claimName>’] |
claims['sub'] |
操作员 | 运算符部分必须只是运算符名称,由单个空格将之与声明查找和比较数分隔 | matches |
Comparand | 比较数包含要与查找中指定的声明进行比较的内容,且必须包含在单引号中 | 'repo:contoso/contoso-repo:ref:refs/heads/*' |
组合起来后,灵活联合标识凭据表达式类似于以下 JSON 对象:
"claims['sub'] matches 'repo:contoso/contoso-repo:ref:refs/heads/*'."
通过 Microsoft Graph 设置联合标识凭据
为了适应灵活联合标识凭据功能,federatedIdentityCredentials
资源正使用新属性 claimsMatchingExpression
进行扩展。 除此之外,该 subject
属性现在也可为 Null。 属性 claimsMatchingExpression
和 subject
互相排斥,因此不能在联合标识凭据中定义这两者。
audiences
:必须在外部令牌中显示的受众。 此为必填字段,应设置为api://AzureADTokenExchange
Microsoft Entra ID。 它表示 Microsoft 标识平台应接受传入令牌中的aud
声明。 此值表示外部标识提供者中的 Microsoft Entra ID,且在标识提供者中没有固定值。你可能需要在 IdP 中创建新应用程序注册,以用作此令牌的受众。issuer
:外部标识提供者的 URL。 必须与正交换的外部令牌的颁发者声明匹配。subject
:外部标识提供者中外部软件工作负载的标识符。 与受众值类似,该值没有固定格式,因为每个 IdP 都使用自己的格式,格式有时是 GUID,有时是冒号分隔的标识符,有时是任意字符串。 此处的值必须与提供给 Microsoft Entra ID 的令牌中的sub
声明匹配。 如果subject
已定义,claimsMatchingExpression
必须设置为 Null。name
:用于标识凭据的唯一字符串。 此属性是备用键,其值可用于通过 GET 和 UPSERT 操作引用联合标识凭据。claimsMatchingExpression
:包含value
和languageVersion
这两个属性的新复杂类型。 其值用于定义表达式,languageVersion
用于定义所使用的灵活联合标识凭据表达式语言 (FFL) 的版本。languageVersion
应始终设置为 1。 如果claimsMatchingExpression
已定义,subject
必须设置为 Null。
灵活联合标识凭据表达式语言功能
灵活联合标识凭据目前支持在启用的颁发者中使用几个运算符。 在灵活联合标识凭据表达式语言中,单引号被解释为转义字符。
运算符 | 说明 | 示例 |
---|---|---|
matches |
支持对指定声明使用单字符(表示为 ? )和多字符(表示 * )通配符匹配 |
• “claims[‘sub’] matches ‘repo:contoso/contoso-repo:ref:refs/heads/*’” • “claims[‘sub’] matches ‘repo:contoso/contoso-repo-*:ref:refs/heads/????’” |
eq |
用于显式匹配指定的声明 | • “claims[‘sub’] eq ‘repo:contoso/contoso-repo:ref:refs/heads/main’” |
and |
用于针对多个声明组合表达式的布尔运算符 | • “claims[‘sub’] eq ‘repo:contoso/contoso-repo:ref:refs/heads/main’ and claims[‘job_workflow_ref’] matches ‘foo-org/bar-repo /.github/workflows/*@refs/heads/main’” |
按平台列出的颁发者 URL、支持的声明和运算符
根据所使用的平台,必须实现不同的颁发者 URL、声明和运算符。 使用以下选项卡选择所选的平台。
支持的颁发者 URL:https://token.actions.githubusercontent.com
每个声明支持的声明和运算符:
- 声明
sub
支持运算符eq
和matches
- 声明
job_workflow_ref
支持运算符eq
和matches
Azure CLI、Azure PowerShell 和 Terraform 提供程序
Azure CLI、Azure PowerShell 或 Terraform 提供程序中尚不存在显式的灵活联合标识凭据支持。 如果尝试使用其中任何一种工具配置灵活联合标识凭据,则会看到错误。 此外,如果通过 Microsoft Graph 或 Azure 门户 配置灵活联合标识凭据,并尝试使用其中任何一种工具读取该灵活联合标识凭据,则会看到错误。
可以使用 Azure CLI az rest
方法发出 REST API 请求来创建和管理灵活联合标识凭据。
az rest --method post \
--url https://microsoftgraph.chinacloudapi.cn/beta/applications/{objectId}/federatedIdentityCredentials
--body "{'name': 'FlexFic1', 'issuer': 'https://token.actions.githubusercontent.com', 'audiences': ['api://AzureADTokenExchange'], 'claimsMatchingExpression': {'value': 'claims[\'sub\'] matches \'repo:contoso/contoso-org:ref:refs/heads/*\'', 'languageVersion': 1}}"
相关内容
- 实现灵活联合标识凭据
- 配置用户分配的托管标识以信任外部标识提供者
- 如何在应用注册中创建、删除、获取或更新联合标识凭据。
- 阅读 GitHub Actions 文档,详细了解如何配置 GitHub Actions 工作流,以便从 Microsoft 标识提供者获取访问令牌并访问受 Microsoft Entra 保护的资源。
- 了解断言格式。