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

借助Azure DevOps变量组在Azure Key Vault中存储与检索密钥

Azure DevOps Pipeline集成Key Vault变量组安全传递密钥指南

步骤1:创建关联Key Vault的变量组

  • 登录Azure DevOps项目,进入库 -> 变量组
  • 点击新建变量组,填写组名(比如TerraformBackendVars)
  • 勾选链接到Azure Key Vault,选择已配置好的服务连接,再选中你的目标Key Vault
  • 从Key Vault中添加所需机密:确保Key Vault内已存储以下值(名称可自定义,需和后续YAML引用一致):
    • serviceConnectionName:Terraform初始化用的服务连接名称
    • backendResourceGroupName:存储tfstate文件的资源组名称
    • backendStorageAccountName:存储账户名称
    • backendContainerName:存储容器名称
    • backendTfstateKey:tfstate文件的密钥名称
  • 保存变量组

步骤2:在Pipeline中引用变量组

在YAML的variables块中添加变量组引用,替换原硬编码变量部分。

步骤3:替换YAML中的硬编码值

将所有需要从Key Vault获取的值替换为$(变量名)格式,同时修正原YAML中重复的tfdeploy stage名称(同名stage会导致Pipeline执行报错)。

修改后的完整YAML

trigger: none
#########################
# 构建代理配置
#########################
pool:
  vmImage: ubuntu-latest

######################
# 参数声明
######################
parameters:
- name: ResourceGroup
  displayName: 请输入资源组名称
  type: string
  default: <请填写资源组名称>

- name: Region
  displayName: 请输入区域名称
  type: string
  default: <请填写区域名称>

- name: sqlserver
  displayName: 请输入SQL Server名称
  type: string
  default: <请填写SQL Server名称>
######################
# 变量与变量组引用
######################
variables:
  - group: TerraformBackendVars # 引用关联Key Vault的变量组
  - name: TF_VAR_ResourceGroup
    value: ${{ parameters.ResourceGroup }}
  - name: TF_VAR_REGION
    value: ${{ parameters.Region }}
  - name: TF_VAR_SQLSERVER_NAME
    value: ${{ parameters.sqlserver }}

###################
# 阶段声明
###################
stages:
  - stage: tfvalidate
    jobs:
      - job: validate
        continueOnError: false
        steps:
          - task: TerraformInstaller@0
            inputs:
              terraformVersion: 'latest'

          - task: TerraformTaskV3@3
            displayName: Terraform Init
            inputs:
              provider: 'azurerm'
              command: 'init'
              backendServiceArm: $(serviceConnectionName) # 从Key Vault变量组获取
              backendAzureRmResourceGroupName: $(backendResourceGroupName) # 从Key Vault变量组获取
              backendAzureRmStorageAccountName: $(backendStorageAccountName) # 从Key Vault变量组获取
              backendAzureRmContainerName: $(backendContainerName) # 从Key Vault变量组获取
              backendAzureRmKey: $(backendTfstateKey) # 从Key Vault变量组获取
          - task: TerraformTaskV3@3
            displayName: Terraform Validate
            inputs:
              provider: 'azurerm'
              command: 'validate'
  - stage: tfdeploy_first
    condition: succeeded('tfvalidate')
    dependsOn: tfvalidate
    jobs:
      - job: apply
        steps: 
          - task: TerraformInstaller@0
            inputs:
              terraformVersion: 'latest'

          - task: TerraformTaskV3@3
            displayName: Terraform Init
            inputs:
              provider: 'azurerm'
              command: 'init'
              backendServiceArm: $(serviceConnectionName)
              backendAzureRmResourceGroupName: $(backendResourceGroupName)
              backendAzureRmStorageAccountName: $(backendStorageAccountName)
              backendAzureRmContainerName: $(backendContainerName)
              backendAzureRmKey: $(backendTfstateKey)
          - task: TerraformTaskV3@3
            displayName: Terraform Validate
            inputs:
              provider: 'azurerm'
              command: 'validate'
          - task: TerraformTaskV3@3
            displayName: Terraform Plan
            inputs:
              provider: 'azurerm'
              command: 'plan'
              environmentServiceNameAzureRM: $(serviceConnectionName)
          - task: TerraformTaskV3@3
            displayName: Terraform Apply
            inputs:
              provider: 'azurerm'
              command: 'apply'
              commandOptions: '-auto-approve'
              environmentServiceNameAzureRM: $(serviceConnectionName)
              backendAzureRmContainerName: $(backendContainerName)
              backendAzureRmKey: $(backendTfstateKey)
          - task: TerraformTaskV3@3
            displayName: Terraform Validate Post-Apply
            inputs:
              provider: 'azurerm'
              command: 'validate'
  - stage: tfdeploy_second
    condition: succeeded('tfvalidate')
    dependsOn: tfvalidate
    jobs:
      - job: apply
        steps: 
          - task: TerraformInstaller@0
            inputs:
              terraformVersion: 'latest'

          - task: TerraformTaskV3@3
            displayName: Terraform Init
            inputs:
              provider: 'azurerm'
              command: 'init'
              backendServiceArm: $(serviceConnectionName)
              backendAzureRmResourceGroupName: $(backendResourceGroupName)
              backendAzureRmStorageAccountName: $(backendStorageAccountName)
              backendAzureRmContainerName: $(backendContainerName)
              backendAzureRmKey: $(backendTfstateKey)
          - task: TerraformTaskV3@3
            displayName: Terraform Validate
            inputs:
              provider: 'azurerm'
              command: 'validate'
          - task: TerraformTaskV3@3
            displayName: Terraform Plan
            inputs:
              provider: 'azurerm'
              command: 'plan'
              environmentServiceNameAzureRM: $(serviceConnectionName)
          - task: TerraformTaskV3@3
            displayName: Terraform Apply
            inputs:
              provider: 'azurerm'
              command: 'apply'
              commandOptions: '-auto-approve'
              environmentServiceNameAzureRM: $(serviceConnectionName)

注意事项

  • 确保Azure Key Vault已授予Azure DevOps服务连接机密用户角色权限,允许读取机密内容
  • 变量组引用的Key Vault机密名称必须和YAML中使用的$(变量名)完全匹配
  • 原YAML中存在两个同名tfdeploy stage,会导致Pipeline执行失败,已修改为tfdeploy_first和tfdeploy_second,可根据实际需求调整名称或合并阶段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:25:54