在管道中使用 Azure Key Vault 机密

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

Azure Key Vault 使开发人员能够安全地存储和管理敏感信息,例如密码、API 密钥和证书。 本文介绍如何在管道中查询和使用 Azure Key Vault 中的机密。

先决条件

产品 要求
Azure DevOps - 一个 Azure DevOps 项目
- 权限:
    - 若要授予对项目中所有管道的访问权限:必须是 项目管理员组的成员。
    - 若要创建服务连接:必须具有服务连接的管理员创建者角色。
GitHub - GitHub 帐户和 GitHub 存储库
- 用于授权 Azure Pipelines 的 GitHub 服务连接
天蓝色 - Azure 订阅

创建密钥保管库

  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 任务,现在可以从 Azure Key Vault 查询和提取机密,并在管道中的后续任务中使用机密。 请注意,机密必须显式映射到环境变量,如以下示例所示:

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”。