Cómo crear un servidor de Azure PostgreSQL con una contraseña de administrador en Key Vault?
Para hacer que los parámetros que utilizan los key vaults estén disponibles para mi aplicación web de Azure, he ejecutado lo siguiente:
identity = `az webapp identity assign \
--name $(appName) \
--resource-group $(appResourceGroupName) \
--query principalId -o tsv`
az keyvault set-policy \
--name $(keyVaultName) \
--secret-permissions get \
--object-id $identity
Ahora quiero crear un servidor postgres de Azure utilizando la clave de administrador obtenida de un key vault:
az postgres server create \
--location $(location) \
--resource-group $(ResourceGroupName) \
--name $(PostgresServerName) \
--admin-user $(AdminUserName) \
--admin-password '$(AdminPassWord)' \
--sku-name $(pgSkuName)
Si el valor de mi AdminPassWord es algo así como:
@Microsoft.KeyVault(SecretUri=https://<myKv>.vault.azure.net/secrets/AdminPassWord/)
Necesito las comillas simples (como en el ejemplo anterior) para crear el servidor postgres. ¿Pero esto significa que la contraseña será toda la cadena '@Microsoft.KeyVault(SecretUri=https://<myKv>.vault.azure.net/secrets/AdminPassWord/)'
en lugar del secreto almacenado en <myKv>
?
Cuando ejecuté mi canalización sin las comillas simples (es decir, solo --admin-password $(AdminPassWord) \
), recibí el mensaje de error syntax error near unexpected token ('
. Pensé que podría ser consecuencia del hecho de que no había configurado la política --secret-permissions get
para el recurso del servidor postgres. ¿Pero cómo puedo configurarlo antes de crear el servidor postgres?
davy.ai
Las comillas simples son necesarias para asegurar que se utilice toda la cadena de la variable AdminPassWord como contraseña, incluyendo la referencia al almacén de claves.
Sin embargo, esto significa que la contraseña será la cadena completa
'@Microsoft.KeyVault(SecretUri=https://<mykv>.vault.azure.net/secrets/AdminPassWord/)'
, en lugar del valor secreto real almacenado en el almacén de claves.Para recuperar la contraseña real del almacén de claves, se puede utilizar el comando
az keyvault secret show
en combinación con el comandojq
para extraer el valor secreto.Por ejemplo:
Este comando recupera el valor secreto para la clave “AdminPassWord” del almacén de claves “myKv”, y utiliza
jq
para eliminar cualquier marca de comillas u otro formato de la salida.Luego, se puede pasar la variable
$password
directamente al comandoaz postgres server create
sin ninguna comilla.Para establecer los permisos de secreto para el recurso de almacén de claves antes de crear el servidor Postgres, se puede utilizar el comando
az keyvault set-policy
de manera similar a como se usó en el ejemplo para la aplicación web anterior, pero especificando el ID de objeto para el grupo de recursos que contiene el servidor Postgres.Por ejemplo:
Donde
<objectid>
es el ID de objeto del principal de servicio para el grupo de recursos que contiene el servidor Postgres. Esto dará a ese principal de servicio permiso para recuperar secretos del almacén de claves.