从管道任务到 Azure DevOps API 的无 PAT 身份验证

管道中的任务使用 作业访问令牌(通过内置变量 System.AccessToken 提供)或 PAT 来访问 Azure DevOps 资源。 例如,“签出”任务使用此令牌向存储库进行身份验证。 同样,PowerShell 脚本可以使用此令牌访问 Azure DevOps REST API。 但是,此令牌的权限基于项目生成服务标识,这意味着项目中的所有作业访问令牌都具有相同的权限。 这会授予项目内所有管道的过度访问权限。

使用 PAT 访问 Azure DevOps 资源很常见,尤其是在任务需要跨组织边界访问这些资源时。 例如,Nuget 身份验证任务使用 PAT 令牌来验证另一个组织的源。 PAT 是一种安全反模式,因为它们通常具有广泛的权限,并且长期持有,从而增加了数据外泄的风险。

为了提高这些方案中的安全性,引入了名为“Azure DevOps Service Connection”的新服务连接类型。 它使用一个 Azure 服务主体,可以在 Azure DevOps 中添加为具有特定权限的用户。 这样,就可以使用此服务连接向管道任务中的资源进行身份验证,并限制对特定管道的访问。 我们将首先介绍新的连接类型以及一些使用它的任务。 我们将随着时间的推移逐步扩展可以使用连接类型的任务列表。