在管道中使用 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 查询机密。
先决条件
- Azure DevOps 组织。 免费创建一个(如果还没有)。
- 你自己的项目。 如果还没有项目,则创建一个项目。
- 你自己的存储库。 创建新的 Git 存储库(如果还没有)。
- Azure 订阅。 创建免费 Azure 帐户(如果还没有)。
创建密钥保管库
登录到Azure 门户,然后选择“创建资源”。
在密钥库下,选择“创建”以创建新的 Azure 密钥库。
从下拉菜单中选择订阅,然后选择现有资源组或创建新的资源组。 输入 Key Vault 名称,选择区域,选择定价层,如果想要配置其他属性,请选择“下一步”。 否则,请选择“ 查看 + 创建 ”以保留默认设置。
部署完成后,选择转到资源。
设置身份验证
创建用户分配的托管标识
登录到Azure 门户,然后在搜索栏中搜索托管标识服务。
选择“创建”,并填写必填字段,如下所示:
- 订阅:从下拉菜单中选择订阅。
- 资源组:选择现有资源组或创建新资源组。
- 区域:从下拉菜单中选择一个区域。
- 名称:输入用户分配的托管标识的名称。
完成后,选择“审阅 + 创建”。
部署完成后,选择“ 转到资源”,然后复制 订阅 和 客户端 ID 值,以在后续步骤中使用。
导航到“设置属性”>,并复制托管标识的租户 ID 值供以后使用。
设置密钥保管库访问策略
导航到Azure 门户,并使用搜索栏查找之前创建的密钥保管库。
选择“访问策略”,然后选择“创建”以添加新策略。
在“机密权限”下,选中“获取”和“列出”复选框。
选择“下一步”,然后将前面创建的托管标识的客户端 ID 粘贴到搜索栏中。 选择托管标识。
依次选择“ 下一步”、“ 下一 步”。
查看新策略,然后选择“ 完成时创建 ”。
创建服务连接
登录到 Azure DevOps 组织,并导航到你的项目。
选择项目设置>服务连接,然后选择新建服务连接以创建新的服务连接。
选择 Azure 资源管理器,然后选择“下一步”。
对于 “标识类型”,请从下拉菜单中选择 “托管标识 ”。
对于 步骤 1:托管标识详细信息,请填写字段,如下所示:
托管标识的订阅:选择包含托管标识的订阅。
托管标识的资源组:选择托管标识的资源组。
托管标识:从下拉菜单中选择托管标识。
对于 步骤 2:Azure 作用域,请填写字段,如下所示:
服务连接的范围级别:选择订阅。
服务连接的订阅:选择托管标识将访问的订阅。
服务连接的资源组:(可选)指定以限制对一个资源组的托管标识访问。
对于 步骤 3:服务连接详细信息:
服务连接名称:提供服务连接的名称。
服务管理参考:(可选)ITSM 数据库中的上下文信息。
说明:(可选) 添加说明。
在 “安全性”中 ,选中“授予对所有管道 的访问权限”复选框,以允许所有管道使用此服务连接。 如果未选择此选项,则必须手动授予对使用此服务连接的每个管道的访问权限。
选择保存以验证并创建服务连接。
在管道中查询和使用机密
使用 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'。