Recuperando el secreto de una bóveda de claves de una bóveda creada en el mismo archivo bicep.
Tengo un problema similar a https://stackoverflow.com/questions/69461223/retrieve-a-secret-from-keyvault-in-bicep-and-use-as-input-for-synapse-workspace.
(Aunque no puedo continuar la discusión allí ya que no tengo suficiente reputación)
Necesito crear tanto el keyvault como las máquinas virtuales en un mismo archivo de plantilla de implementación de Bicep. Un secreto generado en el archivo del módulo Bicep de keyvault debe ser utilizado para establecer la contraseña para el administrador local de la VM. Aunque no es un requisito que el secreto se cree a nivel de módulo de keyvault, no veo ninguna otra forma de lograr una implementación segura.
Esta es la parte relevante de la plantilla principal de Bicep:
module kv './modules/keyvault.bicep' = {
name: '${deployment().name}-kv'
scope: rg
params: {
keyvaultName: kvName
createLocalAdmin: true
}
}
resource kvRef 'Microsoft.KeyVault/vaults@2019-09-01' existing = {
name: kvName
scope: rg
}
module vm './modules/vm.bicep' = {
name: '${deployment().name}-vm-${vm.hostShortName}'
scope: rg
params: {
adminPassword: kvRef.getSecret('localadmin')
adminUsername: 'localadmin'
}
dependsOn: [
network
kv
]
}
El desafío aquí es que cuando se implementa el archivo Bicep, obtengo el error: No se pudo encontrar el KeyVault especificado ‘
En una plantilla de ARM se puede resolver esto de la siguiente manera:
"adminPassword": {
"Value":{
"reference": {
"keyVault": {
"id":"concat(subscription().Id,'/resourceGroups/',variables('rgName'),'/providers/Microsoft.KeyVault/vaults/',reference('deploy-keyvault').outputs.KeyvaultName.value)]
},
"secretName": "[variables('localAdminSecretname')]"
}
}
}
¿Existe alguna manera de utilizar el mismo enfoque en Bicep como se muestra en el ejemplo de ARM o se puede resolver de alguna otra manera?
davy.ai
El mensaje de error “No se pudo encontrar el KeyVault especificado ‘‘” indica que el módulo no puede obtener el objeto de Key Vault del grupo de recursos durante la implementación. Una posible solución es pasar el parámetro
keyvaultName
del módulokeyvault.bicep
al módulovm.bicep
y utilizarlo para construir el ID de recurso del Key Vault en el objetoauth
del parámetroadminPassword
.Aquí tienes un ejemplo de implementación que demuestra este enfoque:
En
keyvault.bicep
, pasa el parámetrokeyvaultName
al módulovm.bicep
:En
vm.bicep
, utiliza la salidakeyvaultId
del módulokeyvault.bicep
para construir el ID de recurso del Key Vault:Este enfoque construye el ID de recurso del Key Vault utilizando la salida del módulo
keyvault.bicep
y el nombre del secreto de administrador local. Dado que el módulokeyvault.bicep
crea el objeto Key Vault, se puede asumir que el ID de recurso del Key Vault estará disponible durante la implementación del módulovm.bicep
.