首页 > 解决方案 > 为什么在准备 Linux VM 部署的 SSL 证书时,“az vm secret format”命令会失败?

问题描述

我正在尝试按照以下提供的说明准备 SSL 证书以部署到 Azure 上托管的 Linux VM:

对 Azure ubuntu 虚拟机的 HTTPS 访问

第一行:

$secret=$(az keyvault secret list-versions --vault-name myVaultName --name myCertName --query "[?attributes.enabled].id" --output tsv)

执行良好,并且 $secret 包含预期值。但是,当我执行第二行时:

$vm_secret=$(az vm secret format --secret "$secret")

我收到一个错误:

unable to find vault 'myVaultName' in current subscription.

我仔细检查了命令格式和参数,没有发现任何问题。怎么了?

标签: azureazure-web-app-serviceazure-cli

解决方案


这是一件很奇怪的事情。CLI 命令以前可以正常工作,但现在它需要添加--keyvault带有密钥保管库名称和-g资源组名称的参数,如下所示:

$vm_secret=$(az vm secret format --secret "$secret" -g groupName --keyvault keyvaultName)

或者只是添加--keyvault带有密钥保管库 ID 的参数:

$vm_secret=$(az vm secret format --secret "$secret" --keyvault keyvault_resourceId)

这样它就可以正常工作而不会出现错误。

注意:如果您使用几个月前创建的旧密钥库,那么给出错误的 CLI 命令也可以在我的测试中使用。所以有点奇怪。而且我发现属性默认值有些不同。

编辑

我认为最好在 Linux 环境中运行 CLI 命令,在 Windows 和 Linux 中 CLI 运行有些不同,可能会导致错误。Linux 中的脚本如下所示:

az keyvault certificate create --vault-name keyvault_name --name cert_name --policy "$(az keyvault certificate get-default-policy)"

secret=$(az keyvault secret list-versions --vault-name keyvault_name --name cert_name --query "[?attributes.enabled].id" --output tsv)

vm_secret=$(az vm secret format --secrets "$secret" --resource-group group_name --keyvault keyvault_name)

az vm update -g charles -n azureUbuntu18 --set osProfile.secrets="$vm_secret"

推荐阅读