如何在 keyvault 中使用管理员密码创建 azure postgres 服务器?

Howto create azure postgres server with admin-password in keyvault?

为了使使用密钥保管库的参数可用于我的 azure webapp,我执行了以下操作

        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

现在我想创建一个 azure postgres 服务器,从密钥库中获取管理员密码:

                az postgres server create \
                --location $(location) \
                --resource-group $(ResourceGroupName) \
                --name $(PostgresServerName) \
                --admin-user $(AdminUserName) \
                --admin-password '$(AdminPassWord)' \
                --sku-name $(pgSkuName)

如果我的 AdminPassWord 的值类似于

@Microsoft.KeyVault(SecretUri=https://<myKv>.vault.azure.net/secrets/AdminPassWord/)  

我需要单引号(如上)来创建 postgres 服务器。但这是否意味着密码将是整个字符串 '@Microsoft.KeyVault(SecretUri=https://<myKv>.vault.azure.net/secrets/AdminPassWord/)' 而不是存储在 <myKv> 中的秘密?

当 运行 我的管道没有引号(即 --admin-password $(AdminPassWord) \)时,我收到错误消息 syntax error near unexpected token ('。我认为这可能是我没有为资源 postgres 服务器设置策略 --secret-permissions get 的结果。但是如何在创建 postgres 服务器之前设置它?

表达式@Microsoft.KeyVault(SecretUri=https://<myKv>.vault.azure.net/secrets/AdminPassWord/) 用于访问 Azure Web 应用程序中的密钥保管库机密值,当您使用前两个命令配置它时,Web 应用程序的托管标识将能够访问密钥保管库机密.

但是如果你想用密码创建一个azure postgres服务器,你需要先获取秘密值并使用它而不是使用表达式。

对于 Azure CLI,您可以使用 az keyvault secret show,然后将密钥传递给 az postgres server create 中的参数 --admin-password

az keyvault secret show [--id]
                        [--name]
                        [--query-examples]
                        [--subscription]
                        [--vault-name]
                        [--version]