AzureKeyVault@2 - Azure 密钥保管库 v2 任务
使用此任务下载机密,例如身份验证密钥、存储帐户密钥、数据加密密钥。Azure 密钥保管库 实例中的 PFX 文件和密码。 该任务可用于从保管库中提取所有机密或机密子集的最新值,并将其设置为可在管道的后续任务中使用的变量。 该任务基于节点,适用于 Linux、macOS 和 Windows 上的代理。
语法
# Azure Key Vault v2
# Download Azure Key Vault secrets.
- task: AzureKeyVault@2
inputs:
azureSubscription: # string. Alias: ConnectedServiceName. Required. Azure subscription.
KeyVaultName: # string. Required. Key vault.
SecretsFilter: '*' # string. Required. Secrets filter. Default: *.
#RunAsPreJob: false # boolean. Make secrets available to whole job. Default: false.
输入
azureSubscription
- Azure 订阅
输入别名: ConnectedServiceName
。 string
. 必需。
为包含 Azure 密钥保管库 实例的 Azure 订阅选择服务连接,或创建新连接。 了解详细信息。
KeyVaultName
- Key Vault
string
. 必需。
包含要下载的机密的 Azure 密钥保管库的名称。
SecretsFilter
- 机密筛选器
string
. 必需。 默认值:*
。
根据输入的值下载机密名称。 该值可以是从所选密钥保管库下载所有机密的默认值,也可以是逗号分隔的机密名称列表。
RunAsPreJob
- 使机密可供整个作业使用
boolean
. 默认值:false
。
在作业开始执行之前运行任务。 向作业中的所有任务公开机密,而不仅仅是遵循此任务的任务。
任务控件选项
除任务输入外,所有任务都有控制选项。 有关详细信息,请参阅 控制选项和常见任务属性。
输出变量
无。
备注
版本 2.0 中的新增功能:添加了对 %3B、%5D 机密的支持。
使用此任务下载机密,例如身份验证密钥、存储帐户密钥、数据加密密钥。Azure 密钥保管库 实例中的 PFX 文件和密码。 该任务可用于从保管库中提取所有机密或机密子集的最新值,并将其设置为可在管道的后续任务中使用的变量。 该任务基于节点,适用于 Linux、macOS 和 Windows 上的代理。
在从 Azure 密钥保管库获取凭据时,我在管道上收到forbidden
错误
如果 Azure 密钥保管库中缺少所需的权限,则会发生这种情况。 若要解决此问题, 请添加具有正确权限的访问策略。
先决条件
该任务具有以下先决条件:
- 使用 Azure 资源管理器服务连接链接到 Azure Pipelines 或 Team Foundation Server 的 Azure 订阅。
- 一个包含机密的 Azure Key Vault。
可以创建密钥保管库:
- 在 Azure 门户中
- 使用 Azure PowerShell
- 使用 Azure CLI
将机密添加到密钥保管库:
使用 PowerShell cmdlet Set-AzureKeyVaultSecret。 如果机密不存在,此 cmdlet 将创建它。 如果机密已存在,则此 cmdlet 会创建该机密的新版本。
使用 Azure CLI。 若要将机密添加到密钥保管库,例如名为 SQLPassword 且值为 PlaceholderPassword 的机密,请键入:
az keyvault secret set --vault-name 'ContosoKeyVault' --name 'SQLPassword' --value 'PlaceholderPassword'
想要访问机密时:
确保 Azure 服务连接至少对保管库具有“获取”和“列出”权限。 可以在Azure 门户中设置以下权限:
- 打开保管库的“设置”边栏选项卡,选择“访问策略”,然后选择“添加新”。
- 在 “添加访问策略 ”边栏选项卡中,选择 “选择主体 ”,然后选择客户端帐户的服务主体。
- 在 “添加访问策略 ”边栏选项卡中,选择“ 机密权限 ”,并确保选中 “获取 ”和 “列表 ” (勾选) 。
- 选择 “确定” 以保存更改。
备注
如果你正在使用 Microsoft 托管的代理,则必须将 Microsoft 托管代理的 IP 范围添加到防火墙。 从每周三发布的每周 JSON 文件中获取 IP 范围的每周列表。 新的 IP 范围将在下周一开始生效。 有关详细信息,请参阅 Microsoft 托管的代理。 若要查找你的 Azure DevOps 组织所需的 IP 范围,请了解如何识别 Microsoft 托管代理的可能 IP 范围。
注意
值以字符串的形式检索。 例如,如果有名为 connectionString 的机密,则会使用从 Azure 密钥保管库提取的相应机密的最新值创建任务变量 connectionString
。 然后,此变量在后续任务中可用。
如果从保管库提取的值是证书 (例如 PFX 文件) ,则任务变量将包含字符串格式的 PFX 内容。 可以使用以下 PowerShell 代码从任务变量检索 PFX 文件:
$kvSecretBytes = [System.Convert]::FromBase64String("$(PfxSecret)")
$certCollection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection
$certCollection.Import($kvSecretBytes,$null,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
如果证书文件将存储在本地计算机上,最好是使用密码对其进行加密:
#Get the file created
$password = 'your password'
$protectedCertificateBytes = $certCollection.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $password)
$pfxPath = [Environment]::GetFolderPath("Desktop") + "\MyCert.pfx"
[System.IO.File]::WriteAllBytes($pfxPath, $protectedCertificateBytes)
有关详细信息,请参阅 Azure 密钥保管库证书入门。