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

如何在Azure DevOps GUI中创建长有效期的Azure Container Registry服务主体

Azure DevOps ACR服务连接长有效期SP解决方案

核心结论

通过Azure DevOps GUI直接创建ACR类型服务连接时,无法自定义自动生成的Service Principal(SP)密钥有效期,默认固定为3个月,没有GUI配置选项。要获得长有效期SP,需通过手动创建SP再关联服务连接,或结合脚本自动化实现。

手动创建长有效期SP并关联服务连接

按以下步骤操作,可自主设置SP密钥有效期(如1年):

  1. 在Azure Portal创建SP
    • 搜索“应用注册”,点击“新注册”,填写名称,选择租户类型(推荐单租户),完成注册。
    • 进入该应用注册页面,转到「证书和密码」,点击「新建客户端密码」,设置有效期(支持自定义时长,最长可选24个月),保存生成的密钥值(仅显示一次,务必记录)。
  2. 为SP分配ACR权限
    • 打开目标Azure容器注册表(ACR),转到「访问控制(IAM)」,点击「添加角色分配」。
    • 选择所需角色(如「ACR推送」用于流水线推送镜像,「ACR拉取」用于拉取镜像),搜索并选择刚创建的SP作为主体,完成分配。
  3. 在Azure DevOps手动创建服务连接
    • 进入项目的「项目设置」→「服务连接」→「新建服务连接」,选择「Azure Container Registry」。
    • 选择「手动」选项,依次填写ACR注册表名称、订阅ID、租户ID,再输入SP的客户端ID和刚才保存的密钥,完成创建。
      此方式创建的服务连接,密钥有效期与你设置的一致,到期前只需更新SP密钥并同步到服务连接即可,无需重建连接。

解决更新SP密钥后流水线失败的问题

你之前更新SP密钥但未重建服务连接导致失败,原因是Azure DevOps服务连接存储的仍是旧密钥。正确操作无需重建连接:

  • 进入Azure DevOps服务连接列表,找到目标ACR服务连接,点击「编辑」。
  • 在编辑页面更新「客户端密码」为新生成的SP密钥,保存后流水线即可正常使用新密钥。

自动化获取长有效期SP的方案

若需自动化管理SP生命周期,可通过Azure CLI/PowerShell脚本实现:

  1. 脚本创建长有效期SP
    以下PowerShell脚本可创建有效期1年的SP并分配ACR权限:
    # 替换为你的订阅ID、资源组、ACR名称
    $subscriptionId = "你的订阅ID"
    $resourceGroup = "你的资源组名称"
    $acrName = "你的ACR名称"
    
    # 创建SP并分配ACR推送权限,有效期1年
    $sp = az ad sp create-for-rbac --name "ACR-Pipeline-SP" `
        --scopes "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.ContainerRegistry/registries/$acrName" `
        --role "ACR推送" `
        --years 1 | ConvertFrom-Json
    
    # 输出关键信息,用于后续配置服务连接
    Write-Host "客户端ID: $($sp.appId)"
    Write-Host "客户端密码: $($sp.password)"
    Write-Host "租户ID: $($sp.tenant)"
    
  2. 自动同步密钥到服务连接
    若需到期自动更新密钥并同步到Azure DevOps服务连接,可调用Azure DevOps REST API实现,示例curl命令:
    # 替换为你的组织、项目、服务连接ID、PAT令牌和新密钥
    ORGANIZATION="你的组织名称"
    PROJECT="你的项目名称"
    ENDPOINT_ID="服务连接ID"
    PAT_BASE64=$(echo -n ":你的PAT令牌" | base64)
    NEW_SECRET="新的SP密钥"
    
    curl -X PATCH -H "Content-Type: application/json" -H "Authorization: Basic $PAT_BASE64" \
    -d '{
        "data": {
            "servicePrincipalKey": "'"$NEW_SECRET"'"
        }
    }' \
    "https://dev.azure.com/$ORGANIZATION/$PROJECT/_apis/serviceendpoint/endpoints/$ENDPOINT_ID?api-version=7.1-preview.4"
    
    可将此脚本集成到Azure自动化账户或DevOps管道中,定期执行实现自动续期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 19:27:45