es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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 comando jq para extraer el valor secreto.

    Por ejemplo:

    password=$(az keyvault secret show --vault-name <mykv> --name AdminPassWord --query value -o tsv | jq -r)
    

    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 comando az 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:

    identity=$(az ad sp show --id <objectid> --query objectId -o tsv)
    
    az keyvault set-policy --name <mykv> --secret-permissions get --object-id $identity
    

    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.

Comments are closed.