2

我在 azurecr.io 中有一个带有容器的容器实例模板是否可以在 ARM 模板中使用 Azure Key Vault 机密?以下示例不起作用:

            "imageRegistryCredentials": [
                {
                    "server": "***.azurecr.io",
                    "username": "***",
                    "password": {   
                        "reference": {                      
                            "keyVault": {
                                "id": "[resourceId(parameters('vaultSubscription'), parameters('vaultResourceGroupName'), 'Microsoft.KeyVault/vaults', parameters('vaultName'))]"
                            },
                            "secretName": "[parameters('secretName')]"  
                        }                       
                    }
                }
            ],

我已经尝试过:

"resources": [        
        {
            ...
            "properties": {
                "parameters":{
                    "secretPassword": { 
                        "type": "securestring",
                        "reference": {                      
                            "keyVault": {
                                "id": "[resourceId(parameters('vaultSubscription'), parameters('vaultResourceGroupName'), 'Microsoft.KeyVault/vaults', parameters('vaultName'))]"
                            },
                            "secretName": "[parameters('secretName')]"  
                        }                       
                    }                   
                },

和:

        "imageRegistryCredentials": [
            {
                "server": "**.azurecr.io",
                "username": "**",
                "password": "[parameters('secretPassword')]"
            }
        ],

结果:

  "error": {
    "code": "InvalidTemplate",
    "message": "Unable to process template language expressions for resource '/subscriptions/**/resourceGroups/**/providers/Microsoft.ContainerInstance/containerGroups/**' at line '28' and co
lumn '9'. 'The template parameter 'secretPassword' is not found. Please see https://aka.ms/arm-template/#parameters for
 usage details.'"
  }
}'
4

2 回答 2

1

因此,我创建了一个解决方法,通过使用 github 上的公开可用模板,您可以相对简单地在模板中使用任何 keyvault 机密。有关示例,请参阅https://github.com/bobvandevijver/azure-arm-keyvault-secret-output

如果微软只是修复了这个实现显然会更好,但它是一些东西!

于 2019-05-29T11:10:33.417 回答
0

您只能在模板(或嵌套模板)的参数中使用密钥保管库引用。

所以您要么需要将此部分移动到参数部分,要么将其移动到嵌套模板并将其用作嵌套模板的参数。这是将值从 kv 传递到嵌套模板的示例:

{
    "apiVersion": "2017-05-10",
    "name": "[concat('kvReference-', copyIndex())]",
    "type": "Microsoft.Resources/deployments",
    "copy": {
        "name": "kvReference",
        "count": 2
    },
    "properties": {
        "mode": "Incremental",
        "templateLink": {
            "uri": "nested_template_uri"
        },
        "parameters": {
            "cer": {
                "reference": {
                    "keyVault": {
                        "id": "keyvaultId"
                    },
                    "secretName": "secretname"
                }
            }
        }
    }
},

您可以将这些输入用作嵌套模板中的参数

于 2019-02-08T13:38:28.990 回答