为什么'az vm secret format'命令在准备 Linux VM 部署的 SSL 证书时失败?



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

HTTPS 访问 Azure ubuntu 虚拟机

第一行:

$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.

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

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

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

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

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

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

注意:如果您使用几个月前创建的旧密钥保管库,则给出错误的 CLI 命令也适用于我的测试。所以这有点奇怪。我发现属性默认值有所不同。

编辑

我认为最好在 Linux 环境中运行 CLI 命令,在 Windows 和 Linux 中与 CLI rin 有所不同,可能会导致错误。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"

最新更新