如何在部署过程中使用Azure Key Vault传递安全参数值?

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

我有一个用于在Azure管道中部署Service Fabric群集的ARM模板:

- task: AzureResourceManagerTemplateDeployment@3
  displayName: 'Deploy SF cluster'
  inputs:
    deploymentScope: 'Resource Group'
    subscriptionId: '${{ parameters.SubscriptionId }}'
    azureResourceManagerConnection: '${{ parameters.ArmConnection }}'
    action: 'Create Or Update Resource Group'
    resourceGroupName: '${{ parameters.ResourceGroupName }}'
    location: 'West Europe'
    templateLocation: 'Linked artifact'
    csmFile: '$(Build.SourcesDirectory)/pipelines/templates/sfcluster.json'
    csmParametersFile: '$(Build.SourcesDirectory)/pipelines/templates/sfcluster-params.json'
    overrideParameters: '-certificateThumbprint $(Thumbprint) -sourceVaultResourceId $(KeyvaultId) -certificateUrlValue $(SecretId)'
    deploymentMode: 'Incremental'

当我使用ARM模板时,效果很好(因为已经使用了很多天,并且使用了5条不同的管道:

"osProfile": {
    "adminUsername": "RdpUsername",
    "adminPassword": "RdpPassword",

    "computernamePrefix": "[variables('vmNodeType0Name')]",
    "secrets": [
        {
            "sourceVault": {
                "id": "[parameters('sourceVaultResourceId')]"
            },
            "vaultCertificates": [
                {
                    "certificateStore": "My",
                    "certificateUrl": "[parameters('certificateUrlValue')]"
                }
            ]
        }
    ]
},

但是具有硬编码的RDP凭据是一个安全问题,所以我想Use Azure Key Vault to pass secure parameter value during deployment

因此,我向Keyvault添加了2个随机秘密字符串,该字符串在管道中较早部署,然后尝试:

"osProfile": {
    "adminUsername": {
        "reference": {
            "keyVault": {
                "id": "[parameters('sourceVaultResourceId')]"
            },
            "secretName": "RdpUsername"
        }
    },
    "adminPassword": {
        "reference": {
            "keyVault": {
                "id": "[parameters('sourceVaultResourceId')]"
            },
            "secretName": "RdpPassword"
        }
    },

    "computernamePrefix": "[variables('vmNodeType0Name')]",
    "secrets": [
        {
            "sourceVault": {
                "id": "[parameters('sourceVaultResourceId')]"
            },
            "vaultCertificates": [
                {
                    "certificateStore": "My",
                    "certificateUrl": "[parameters('certificateUrlValue')]"
                }
            ]
        }
    ]
},

不幸的是,这会产生错误:

screenshot pipeline

解析值时遇到意外字符:{。路径'properties.virtualMachineProfile.osProfile.adminUsername',第1行,位置3178。

我的问题是:为什么括号{在那里意外?

我的ARM模板基于azure-quickstart-templates/service-fabric-secure-cluster-5-node-1-nodetype,并且如上所写,适用于硬编码值。

azure azure-pipelines azure-service-fabric azure-resource-manager azure-keyvault
1个回答
0
投票

keyVault引用只能用作参数值-因此在param文件或部署的parameters属性中。您不能将其直接用作资源上的属性值。

© www.soinside.com 2019 - 2024. All rights reserved.