在管道中使用 Azure Key Vault 机密

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

使用 Azure Key Vault,可以安全地存储和管理敏感信息,例如密码、API 密钥、证书等。 使用 Azure Key Vault,可以轻松创建和管理加密密钥来加密数据。 Azure Key Vault 还可用于管理所有资源的证书。 本文将指导如何进行以下操作:

  • 创建 Azure 密钥保管库。
  • 配置密钥保管库权限。
  • 创建新的服务连接。
  • 从 Azure Pipeline 查询机密。

先决条件

创建密钥保管库

  1. 登录到Azure 门户,然后选择“创建资源”。

  2. 在密钥库,选择“创建以创建新的 Azure 密钥库。

  3. 从下拉菜单中选择订阅,然后选择现有资源组或创建新的资源组输入 Key Vault 名称,选择区域,选择定价层,如果想要配置其他属性,请选择“下一步”。 否则,请选择“ 查看 + 创建 ”以保留默认设置。

  4. 部署完成后,选择转到资源

设置身份验证

创建用户分配的托管标识

  1. 登录到Azure 门户,然后在搜索栏中搜索托管标识服务。

  2. 选择“创建”,并填写必填字段,如下所示:

    • 订阅:从下拉菜单中选择订阅。
    • 资源组:选择现有资源组或创建新资源组。
    • 区域:从下拉菜单中选择一个区域。
    • 名称:输入用户分配的托管标识的名称。
  3. 完成后,选择“审阅 + 创建”。

  4. 部署完成后,选择“ 转到资源”,然后复制 订阅客户端 ID 值,以在后续步骤中使用。

  5. 导航到“设置属性>,并复制托管标识的租户 ID 值供以后使用。

设置密钥保管库访问策略

  1. 导航到Azure 门户,并使用搜索栏查找之前创建的密钥保管库。

  2. 选择“访问策略”,然后选择“创建以添加新策略。

  3. 在“机密权限”下,选中“获取”和列出”复选框。

  4. 选择“下一步,然后将前面创建的托管标识的客户端 ID 粘贴到搜索栏中。 选择托管标识。

  5. 依次选择“ 下一步”、“ 下一 步”。

  6. 查看新策略,然后选择“ 完成时创建 ”。

创建服务连接

  1. 登录到 Azure DevOps 组织,并导航到你的项目。

  2. 选择项目设置>服务连接,然后选择新建服务连接以创建新的服务连接。

  3. 选择 Azure 资源管理器,然后选择“下一步”。

  4. 对于 “标识类型”,请从下拉菜单中选择 “托管标识 ”。

  5. 对于 步骤 1:托管标识详细信息,请填写字段,如下所示:

    • 托管标识的订阅:选择包含托管标识的订阅。

    • 托管标识的资源组:选择托管标识的资源组。

    • 托管标识:从下拉菜单中选择托管标识。

  6. 对于 步骤 2:Azure 作用域,请填写字段,如下所示:

    • 服务连接的范围级别:选择订阅。

    • 服务连接的订阅:选择托管标识将访问的订阅。

    • 服务连接的资源组:(可选)指定以限制对一个资源组的托管标识访问。

  7. 对于 步骤 3:服务连接详细信息

    • 服务连接名称:提供服务连接的名称。

    • 服务管理参考:(可选)ITSM 数据库中的上下文信息。

    • 说明:(可选) 添加说明。

  8. “安全性”中 ,选中“授予对所有管道 的访问权限”复选框,以允许所有管道使用此服务连接。 如果未选择此选项,则必须手动授予对使用此服务连接的每个管道的访问权限。

  9. 选择保存以验证并创建服务连接。

    显示如何创建托管标识 ARM 服务连接的屏幕截图。

在管道中查询和使用机密

使用 Azure Key Vault 任务,我们可以提取机密的值,并将其用于管道中的后续任务。 需要记住的一点是,机密必须显式映射到 env 变量,如下例所示。

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzureKeyVault@1
  inputs:
    azureSubscription: 'SERVICE_CONNECTION_NAME'
    KeyVaultName: 'KEY_VAULT_NAME'
    SecretsFilter: '*'

- bash: |
    echo "Secret Found! $MY_MAPPED_ENV_VAR"        
  env:
    MY_MAPPED_ENV_VAR: $(SECRET_NAME)

上一个 bash 命令的输出应如下所示:

Secret Found! ***

注意

如果要从 Azure Key Vault 查询多个机密,请使用 SecretsFilter 参数传递以逗号分隔的机密名称的列表:'secret1, secret2'