Использование секретного ключа Azure KeyVault в шаблоне ARM Azure
У меня есть шаблон экземпляра контейнера с контейнером в azurecr.io. Можно ли использовать секрет хранилища ключей Azure в шаблоне ARM? Ниже пример не работает.
"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.'"
}
}'
1 ответ
Итак, я создал обходной путь, который позволяет вам относительно просто использовать любой секрет keyvault в вашем шаблоне, используя общедоступный шаблон на github. См. Пример https://github.com/bobvandevijver/azure-arm-keyvault-secret-output.
Очевидно, было бы лучше, если бы Microsoft только исправила эту реализацию, но это что-то!
Вы можете использовать только ссылку на хранилище ключей в параметрах шаблона (или вложенного шаблона).
поэтому вам нужно либо переместить эту часть в раздел параметров, либо переместить ее во вложенный шаблон и использовать его в качестве параметра для вложенного шаблона. Вот пример для передачи значений из 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"
}
}
}
}
},
и вы можете просто использовать эти входные данные в качестве параметров внутри вложенного шаблона