如何在管道运行期间将从 Key Vault 检索到的机密传递到 ARM 模板部署?

问题描述 投票:0回答:1

在管道运行中,我们尝试在 ARM 模板部署中使用检索到的密钥保管库机密。秘密值是 SAS URL。

我们首先使用 AzureKeyVault@2 任务检索所有机密

  - task: AzureKeyVault@2
    displayName: 'Retrieve all secrets necessary for install'
    inputs:
      azureSubscription: 'SUBSCRIPTION'
      KeyVaultName: 'KEYVAULT'
      SecretsFilter: 'SECRET'
      RunAsPreJob: false

我们的存储库中有两个文件:一个 Bicep 模板和一个参数 JSON 文件,因为 .bicepparam 不支持密钥保管库引用。参数文件已经引用了我们需要的秘密,但模板在部署期间似乎没有使用它。管道的服务主体在密钥保管库范围内具有密钥保管库机密用户角色。

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "SECRET_PARAM": {
        "reference": {
            "keyVault": {
                "id": "/subscriptions/SUBSCRIPTION/resourceGroups/RESOURCEGROUP/providers/Microsoft.KeyVault/vaults/KEYVAULT"
            },
                "secretName": "SECRET"
            }
        }
    }
}

我猜我应该将检索到的秘密值从管道任务传递到部署任务,但当我已经引用参数文件时,我不确定如何执行此操作。

如果需要任何其他详细信息,请告诉我。我很感激你们能够提供的任何指导。

azure azure-pipelines azure-keyvault
1个回答
0
投票

我认为你混合了两种不同的参数方法。

1。从参数文件引用 AKV。

在这种情况下,您不需要使用

AzureKeyVault@2
。查看本手册:https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/key-vault-parameter?tabs=azure-cli

2。部署期间更新参数

在这种情况下,您不需要参数文件中的秘密引用。只需将其存储为通常的值即可。然后您可以在

AzureResourceManagerTemplateDeployment@3
任务中更新它。

举个例子:

参数(只是有一些默认值)

"parameters": {
        "SECRET_PARAM": {
           "value": "SECRET"
        }
    }

ARM 任务

- task: AzureResourceManagerTemplateDeployment@3
  displayName: 'ARM Template deployment: Resource Group scope'
  inputs:
    azureResourceManagerConnection: 'MY_CONNECTIO'
    subscriptionId: 'MY_ID'
    resourceGroupName: 'MY_RG'
    location: 'West Europe'
    csmFile: '$(System.DefaultWorkingDirectory)/my_template_or_bicep_file'
    csmParametersFile: '$(System.DefaultWorkingDirectory)/mt_parameters_file'
    overrideParameters: '-SECRET_PARAM "$(SECRET)"'
© www.soinside.com 2019 - 2024. All rights reserved.