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

CyberArk与Azure DevOps集成:YAML流水线密钥管理新手指引

CyberArk与Azure DevOps集成(基于Safe方法)高阶指南

1. CyberArk侧初始配置(对接Azure DevOps)

  • 构建可信工作负载认证策略
    1. 在CyberArk PVWA或CLI中创建针对Azure DevOps的策略:
      • 收集Azure DevOps流水线代理的固定IP/IP范围,作为可信访问源
      • 策略中指定AllowedMachines为代理IP段,启用WorkloadAuthentication模块
    2. 加载策略到CyberArk环境:
      # CyberArk CLI加载策略示例
      pvwa uploadpolicy -name "AzureDevOps_Trusted_Workloads" -policyfile "azure_devops_trusted_policy.xml"
      
    3. 配置专用Safe:创建用于存储CI/CD密钥的专属Safe,开启必要的AutoSync功能,同时设置AccessRestrictions限制仅可信工作负载可访问

2. 访问管理:授权Azure DevOps任务/流水线访问密钥

  • 最小权限角色配置
    • 为Azure DevOps创建专用Application User(非人类用户),分配以下核心权限:
      • Safe级别:List Accounts、Retrieve Accounts、Use Accounts(仅保留必要权限)
      • 账户级别:针对目标密钥账户,仅授予Retrieve和Use权限
    • 细化访问策略:在CyberArk策略中添加规则,限制该应用用户仅能从Azure DevOps代理IP访问,且仅允许在CI/CD常规运行时段内获取密钥
  • 身份绑定:将Azure DevOps流水线的服务主体/代理身份与CyberArk应用用户做关联,确保认证时身份匹配

3. Azure DevOps YAML流水线访问密钥最佳实践

推荐实现方式

  • 官方扩展任务:使用CyberArk提供的Azure DevOps扩展任务,简化密钥获取流程:
    - task: CyberArk.retrieve-secrets-task.retrieve-secrets-task.RetrieveSecrets@1
      displayName: '拉取CyberArk密钥'
      inputs:
        vaultUrl: 'https://your-pvwa-url'
        safeName: 'CI-CD-Secrets-Safe'
        accountName: 'Azure-DB-Admin'
        applicationId: 'AzureDevOps-CI-CD-App'
        authenticationType: 'WorkloadIdentity'
        outputVariable: 'DBAdminPassword'
    
  • 自定义脚本/API调用:适合复杂场景,通过CyberArk REST API实现密钥拉取:
    # PowerShell示例:基于工作负载身份认证获取密钥
    $authPayload = @{
      ClientID = "AzureDevOps-CI-CD-App"
      MachineIP = "$($env:AGENT_IP)"
    } | ConvertTo-Json
    
    $authToken = Invoke-RestMethod -Uri "https://your-pvwa-url/PasswordVault/api/auth/Workload/Login" -Method Post -Body $authPayload -ContentType "application/json"
    
    $secret = Invoke-RestMethod -Uri "https://your-pvwa-url/PasswordVault/api/Accounts/1234/Password/Retrieve" -Headers @{ Authorization = "Bearer $($authToken)" }
    Write-Host "##vso[task.setvariable variable=DBPassword;issecret=true]$($secret.Content)"
    
  • 核心注意事项:所有拉取的密钥必须标记为Azure DevOps秘密变量(issecret=true),禁止写入磁盘,仅在内存中使用

4. 参数化:安全管理safeName、accountName等参数

  • 使用保密变量组:创建专用Azure DevOps变量组并标记为保密,将safeName、accountName、vaultUrl等参数存入,在YAML中引用:
    variables:
    - group: CyberArk-Secrets-Params
    
  • 环境动态切换:针对多环境流水线,通过参数化模板自动切换对应Safe和账户:
    parameters:
    - name: environment
      type: string
      values:
      - dev
      - test
      - prod
    
    variables:
    - ${{ if eq(parameters.environment, 'dev') }}:
      - name: safeName
        value: 'CI-CD-Secrets-Dev'
      - name: accountName
        value: 'Azure-DB-Admin-Dev'
    
  • 禁止硬编码:绝对不要在YAML文件中直接写入敏感参数,所有配置通过变量传递

5. 端到端完整高阶流程概览

  1. CyberArk侧准备
    • 创建CI/CD专用Safe并配置访问限制
    • 定义并加载Azure DevOps可信工作负载策略
    • 创建应用用户,分配最小权限到目标Safe和密钥账户
  2. Azure DevOps侧准备
    • 安装CyberArk官方Azure DevOps扩展
    • 创建保密变量组存储CyberArk连接参数
    • 确认流水线代理IP在CyberArk可信IP范围内
  3. 流水线配置
    • 在YAML中引用变量组,添加密钥拉取任务
    • 配置输出变量为秘密类型,确保密钥不泄露
  4. 测试与验证
    • 运行流水线,验证密钥正常获取并使用
    • 查看CyberArk审计日志,确认访问符合权限规则
    • 检查Azure DevOps日志,确保无密钥明文泄露

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:35:02