git - 是否可以使用服务主体访问azure上的git存储库?

标签 git azure

我在组织内的 Microsoft Azure 存储库上托管了一个 git 存储库。

我希望能够自动从 Azure 外部托管的服务中“git pull”代码。

documentation仅提到使用个人访问 token 或私有(private) SSH key 进行 git 身份验证。

我不想使用个人访问 token ,因为该服务的其他开发人员可以访问它。

是否可以使用服务主体来从 Azure 存储库中提取代码?

最佳答案

截至 2021 年,这可能是正确的,但到 2023 年,我们将拥有绝对的魔力,即 OAuth tokens for AAD identities .

一个重要的警告 - 这仅适用于AAD 支持的 Azure DevOps

本质上,要仅使用服务主体克隆 Azure 存储库,我们需要遵循以下步骤

  1. 创建 Service Principal in the Azure Portal 。请注意,您可以在此处使用客户端 key 或证书身份验证,因为稍后您将在 Azure CLI 中使用凭据
  2. 将服务主体添加到您的 Azure Devops 组织,并为其分配您关心的 Azure 存储库的权限,就像您为任何其他用户分配的权限一样。 This excellent Microsoft page包含有关如何执行此操作的视频。实际上,您现在可以在用户列表中看到服务主体,它们的功能与任何其他“用户帐户”相同。
  3. 使用以下代码通过客户端 key (1) 或客户端证书 (2) 进行身份验证

az login --service-principal --allow-no-subscriptions --username [YOUR_APP_ID] --password [YOUR_CLIENT_SECRET] --tenant [YOUR_TENANT_ID]

az login --service-principal --allow-no-subscriptions --username [YOUR_APP_ID] --password [PATH_TO_YOUR_PEM_FILE] --tenant [YOUR_TENANT_ID]

  • 魔法。使用以下命令获取 OAuth token :
  • az account get-access-token --scope "499b84ac-1321-427f-aa17-267ca6975798/.default"

    请注意,此处的范围是硬编码的,因为它是 fixed value used by Microsoft

  • 这将返回一个类似于以下内容的 JSON 对象(这是经典的 OAuth 访问 token 结构):
  • { "accessToken": "eyJ0eXAiOiJKV1...", "expiresOn": "2023-06-13 22:15:28.000000", "subscription": "[YOUR SUBSCRIPTION]", "tenant": "[YOUR TENANT]", "tokenType": "Bearer" }

  • 扣篮。使用此 token 作为 git 克隆 URL 中的密码(示例如下):
  • git clone https://[ACCESS_TOKEN]@dev.azure.com/[YOUR_ORG]/[YOUR_PROJECT]/_git/[YOUR_REPOSITORY]

    令人难以置信的是,这将允许您纯粹使用服务主体来克隆存储库。我几乎不敢相信我正在写这篇文章,但欢迎来到 future 。

    编辑 另一位 SO 用户请求对此问题提供纯 cURL 答案,该答案记录在 different answer I provided here 中。

    关于git - 是否可以使用服务主体访问azure上的git存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67639199/

    相关文章:

    git - Jenkins - 如何建立一个特定的分支

    git - 从 jenkins 服务器连接到 bitbucket 存储库

    python - 如何使用 Azure Cloud Function (python) 中的用户管理身份向 Azure KeyVault 发出请求?

    python - 高效地从 PyGithub 获取最新的 Commit URL

    java - 我应该使用什么以及如何将错误日志从我的 java 程序发送到服务器(邮件、git 等...)

    azure - 计算机视觉 REST API 格式

    Azure DevOps - 将构建发布的工件部署到 Feed

    c# - 如何为 Web API 指定不同的 AADInstance?

    windows - 通过LAN共享Git存储库的最佳简单方法

    azure - 尝试在 azure 数据工厂中添加表达式并获取 'The template function ' 数据集'未定义或无效。'错误