I regularly use key vault references in my template parameter files in ARM to securely pass-in secrets.
Now, instead of having singular key-vaulted parameters, I'm trying to pass in an array of keyvault-referenced objects. This does not work unfortunately. For background info: I'm trying to deploy/derive a secondary keyvault from a master keyvault, and transfer/copy some entries.
For doing this deploy the following resources in my template:
{
"type": "Microsoft.KeyVault/vaults",
"name": "my-new-sub-vault",
"apiVersion": "2015-06-01",
"location": "[resourceGroup().location]",
"properties": {
"enabledForDeployment": "false",
"enabledForTemplateDeployment": "false",
"enabledForVolumeEncryption": "false",
"tenantId": "[subscription().tenantId]",
"accessPolicies": [
{
"tenantId": "[subscription().tenantId]",
"objectId": "[parameters('msiObjectId')]",
"permissions": {
"keys": ["get", "list"],
"secrets": ["get", "list"]
}
}
],
"sku": {
"name": "Standard",
"family": "A"
}
}
},
{
"type": "Microsoft.KeyVault/vaults/secrets",
"name": "[concat('my-new-sub-vault', '/', parameters('secretsObject').secrets[copyIndex()].secretName)]",
"apiVersion": "2015-06-01",
"properties": {
"value": "[parameters('secretsObject').secrets[copyIndex()].secretValue]"
},
"dependsOn": [
"[concat('Microsoft.KeyVault/vaults/my-new-sub-vault')]"
],
"copy": {
"name": "secretsCopy",
"count": "[length(parameters('secretsObject').secrets)]"
}
}
Is there an error in my syntax? Or is this not possible?
The error that is thrown is
New-AzResourceGroupDeployment : 16:25:54 - Resource Microsoft.KeyVault/vaults/secrets 'my-new-sub-vault/my-secret' failed with message '{ "error": { "code": "BadRequest", "message": "The secret is missing" } }'
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"secretsObject": {
"value": {
"secrets": [
...,
{
"secretName": "my-secret",
"secretValue": {
"reference": {
"keyVault": {
"id": "/subscriptions/subId/resourceGroups/main/providers/Microsoft.KeyVault/vaults/master-vault"
},
"secretName": "my-secret"
}
}
}
]
}
}
}
}
Cheers