You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用托管标识在同一AAD托管ADO组织内克隆Git仓库

利用Azure托管标识克隆Azure DevOps Git仓库的安全方案

方案1:给VM配置系统托管标识(快速部署)

  • 给Terraform部署的VM启用系统托管标识,在Terraform代码中添加:
    resource "azurerm_linux_virtual_machine" "your_vm" {
      # 其他VM配置(名称、资源组、镜像等)
      identity {
        type = "SystemAssigned"
      }
    }
    
  • 登录Azure DevOps组织,找到目标Git仓库,将该VM的系统托管标识添加到仓库的读者/贡献者组(按需选择最小权限)
  • 在custom_data脚本中,通过Azure CLI获取托管标识的ADO访问令牌,然后克隆仓库:
    # 安装Azure CLI(如果VM镜像未预装)
    apt update && apt install -y azure-cli
    
    # 获取Azure DevOps专用访问令牌(资源ID固定为499b84ac-1321-427f-aa17-267ca6975798)
    ADO_TOKEN=$(az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query accessToken -o tsv)
    
    # 克隆仓库,替换为你的组织、项目和仓库名
    git clone https://$ADO_TOKEN@dev.azure.com/YourOrg/YourProject/_git/YourRepo
    

方案2:使用用户托管标识(多VM复用/精细权限)

  • 先创建一个用户托管标识,在Azure DevOps中给它分配目标仓库的访问权限
  • 在Terraform中关联该标识到VM:
    # 创建用户托管标识
    resource "azurerm_user_assigned_identity" "ado_repo_access" {
      name                = "ado-repo-access-identity"
      resource_group_name = azurerm_resource_group.your_rg.name
      location            = azurerm_resource_group.your_rg.location
    }
    
    # 关联到VM
    resource "azurerm_linux_virtual_machine" "your_vm" {
      # 其他VM配置
      identity {
        type = "UserAssigned"
        identity_ids = [azurerm_user_assigned_identity.ado_repo_access.id]
      }
    }
    
  • custom_data中的克隆脚本和方案1完全一致,无需修改

安全性对比(为什么比SYSTEM_ACCESS_TOKEN更好)

  • 托管标识的令牌是短期有效(默认1小时),且只能通过Azure内部API获取,不会明文出现在Terraform状态或custom_data中
  • SYSTEM_ACCESS_TOKEN是流水线级别的令牌,权限范围通常覆盖整个ADO组织,泄露风险高;托管标识可以只授予单个Git仓库的最小权限
  • 托管标识的权限独立管理,无需依赖流水线的权限配置,权限变更更灵活

内容的提问来源于stack exchange,提问作者Owensteam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:37:10