Azure Pipelines 公共预览版的工作负荷标识联合身份验证

我们很高兴地宣布,Azure Pipelines 的工作负载标识联合现在以公共预览版提供! Azure (ARM) 服务连接已使用附加方案进行更新,以支持工作负荷标识联合。

请查看发行说明,了解如何注册公共预览版。

Azure Boards

Azure Pipelines

Azure Repos

Azure Boards

区域和迭代路径的限制

限制在维护大型全球服务的运行状况和效率方面起着重要作用。 在此冲刺中,我们将针对区域和迭代路径引入每个项目的硬性限制为 10,000。 访问“工作跟踪”、“流程”和“项目限制”页,详细了解服务中的不同限制。

Screenshots of Area and Iteration Paths.

Azure Pipelines

Azure Pipelines 中的工作负荷标识联合(公共预览版)

是否停止在 Azure 服务连接中存储机密和证书? 想要停止担心何时轮换这些机密? 现在,我们宣布了 Azure 服务连接的工作负载联合身份验证公共预览版。工作负荷标识联合使用行业标准技术(Open ID 连接 (OIDC)来简化 Azure Pipelines 和 Azure 之间的身份验证。 为方便身份验证,使用了联合身份验证而非密码。

作为此功能的一部分,Azure (ARM) 服务连接已使用另一个方案进行更新,以支持工作负荷标识联合。 这允许使用 Azure 服务连接的管道任务通过联合主体(sc://<org>/<project>/<service connection name>)进行身份验证。 将此方案用于现有身份验证方案的主要优点如下:

  • 简化的管理:不再将机密从 Azure AD 中的服务主体生成、复制和存储到 Azure DevOps。 在 Azure 服务连接的其他身份验证方案中使用的机密(例如服务主体)在一定期限(目前为两年)后过期。 当管道过期时,管道会失败。 必须重新生成新的机密并更新服务连接。 切换到工作负荷标识联合可以消除管理这些机密的需要,并改善创建和管理服务连接的整体体验。
  • 提高了安全性:使用工作负荷标识联合身份验证时,Azure Pipelines 与 Azure 之间的通信中没有涉及永久性机密。 因此,管道作业中运行的任务无法泄露或泄露有权访问生产环境的机密。 这通常是我们的客户关注的问题。

可以通过两种方式利用这些功能:

若要使用工作负荷标识联合创建新的 Azure 服务连接,只需在 Azure 服务连接创建体验中选择工作负荷标识联合身份验证(自动)或(手动):

 Screenshot of resource.

Screenshot of identify federation.

若要转换以前创建的 Azure 服务连接,请在选择连接后选择“转换”操作:

 Screenshot of convert.

Azure Pipelines 附带的所有 Azure 任务现在都支持此新方案。 但是,如果使用来自市场的任务或本地自定义任务部署到 Azure,则它可能尚不支持工作负荷标识联合。 在这些情况下,我们要求你更新任务以支持工作负荷标识联合,以提高安全性。 可在此处找到受支持的任务的完整列表。

对于此预览版,我们仅支持 Azure 服务连接的工作负荷标识联合。 此方案不适用于任何其他类型的服务连接。 有关更多详细信息,请参阅我们的文档。

此博客文章 包含更多详细信息。

可以使用 Microsoft Entra ID 而不是 PAT 注册管道代理

管道代理现在支持使用服务主体或用户注册代理的更多参数。 应在其安全设置中授予用于访问代理池的标识。 这样就无需使用个人访问令牌(PAT)进行代理的一次性设置。

使用服务主体注册代理

若要使用服务主体向 Azure DevOps Services 注册 Pipelines 代理,请提供下列参数:

--auth 'SP' --clientid 12345678-1234-1234-abcd-1234567890ab --clientsecret --tenantid 12345678-1234-1234-abcd-1234567890ab

在代理 VM 扩展中使用服务主体

可以使用 VM 扩展将 Azure VM 包含在部署组中。 VM 扩展已更新为使用服务主体而不是 PAT 注册代理:

"settings": {
  "userServicePrincipal": true     
}
"protectedSettings": {
  "clientId": "[parameters('clientId')]"      
  "clientSecret": "[parameters('clientSecret')]"      
  "tenantId": "[parameters('tenantId')]"      
}

使用设备代码流以交互方式注册代理

可以使用 Web 浏览器轻松完成设置。 运行代理配置脚本时,输入 “AAD” 作为身份验证类型。 该脚本将指导你完成后续步骤,包括转到 Web 的位置和要输入的代码。 在 Web 上输入代码后,返回到控制台以完成代理设置。

 Screenshot of authentication flow.

适用于环境的 REST API

环境是一个资源集合,可以使用管道中的部署作为目标。 环境提供部署历史记录、工作项和提交和访问控制机制的可跟踪性。

我们知道你想要以编程方式创建环境,因此我们发布了其 REST API 的文档。

防止意外的管道运行

现在,如果 YAML 管道未指定节 trigger ,则会针对推送到其存储库的任何更改运行。 这可能会导致对管道运行的原因造成混淆,并导致许多意外的运行。

我们添加了一个名为“禁用隐含 YAML CI 触发器”的组织级和项目级管道设置,可用于更改此行为。 如果缺少管道的触发器部分,可以选择不触发管道。

 Screenshot of YAML CI trigger.

默认情况下,安全地生成 GitHub 存储库

最后一次冲刺,我们引入了一个 集中控件,用于从分支 GitHub 存储库生成 PR。

通过此冲刺,我们将为新组织启用 Securely build pull requests from forked repositories 组织级别的选项。 现有组织不受影响。

在生成失败时禁用了代码覆盖率策略状态的替代为“失败”

以前,如果 PR 中的生成失败,则代码覆盖率策略状态被重写为“失败”。 这是一些将生成作为可选检查的阻止程序,代码覆盖率策略是 PR 所需的检查,导致 PR 被阻止。

Screenshot of PRs blocked.

使用此冲刺,如果生成失败,代码覆盖率策略将不会重写为“失败”。 将为所有客户启用此功能。

Screenshot of results after change.

Azure Repos

无 Blob 和无树筛选器支持

Azure DevOps 现在支持克隆/提取时另外两个筛选。 以下是:--filter=blob:none--filter=tree:0第一个选项(无 blob 克隆)最适合常规开发,而第二个选项(无树克隆)则更适合在克隆后取消卡的情况,例如运行生成。

后续步骤

注意

这些功能将在未来两到三周内推出。

前往 Azure DevOps 并了解一下。

如何提供反馈

我们很想听听你对这些功能的看法。 使用帮助菜单报告问题或提供建议。

Screenshot Make a suggestion.

你还可以在 Stack Overflow 上获得社区的建议和问题的答案。

此致

Silviu Andrica