Почему команда az vm secret format не работает при подготовке сертификата SSL для развертывания виртуальной машины Linux?

Я пытаюсь подготовить сертификат SSL для развертывания на виртуальной машине Linux, размещенной в Azure, следуя инструкциям, приведенным на странице:

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.

Я дважды проверил формат команды и параметры и не нашел ничего плохого. Что происходит?


person ProfNimrod    schedule 23.01.2019    source источник


Ответы (1)


Странная вещь. Команда CLI раньше работала нормально, но теперь ей нужно добавить параметр --keyvault с именем хранилища ключей и -g с именем группы ресурсов, например:

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

Или просто добавьте параметр --keyvault с идентификатором хранилища ключей:

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

Чтобы он мог нормально работать, не выдавая ошибки.

Примечание: если вы используете старое хранилище ключей, созданное серийно несколько месяцев назад, команда CLI, которая выдает ошибку, также будет работать в моем тесте. Так что это немного странно. И я обнаружил, что со значением по умолчанию для свойств есть нечто иное.

РЕДАКТИРОВАТЬ

Я думаю, что лучше запускать команду CLI в среде Linux, есть что-то другое, чем CLI rin в Windows и Linux, это может вызвать ошибку. А сценарий в 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"
person Charles Xu    schedule 24.01.2019
comment
Большое спасибо. Я предполагаю, что под keyvault_Id вы имеете в виду keyvaultname? Если я использую ваши изменения, команда теперь выполняется, и значение $ vm_secret выглядит разумным - обратите внимание, что мне пришлось использовать $ vm_secret not vm_secret. Если я сейчас выполню следующий шаг (az vm update -n vmName -g vmResourceGroup --set osProfile.secrets = $ vm_secret), я получу ошибку десериализации (Невозможно построить модель: Невозможно десериализовать как [VaultSecretGroup] ...). Любые идеи? - person ProfNimrod; 24.01.2019
comment
Keyvault_Id означает идентификатор ресурса. Затем в Linux устанавливается переменный формат vm_secret. В Windows вы можете установить это как $vm_secret. - person Charles Xu; 24.01.2019
comment
Между Windows и Linux есть разница. В Linux переменная vm_secret является строковым типом и отлично работает. В Windows это тип System.Array. Вы можете запустить сценарий в Azure Cloud Shell, а затем запустить его. Позаботьтесь о том, чтобы в Linux не использовалось $ в качестве префикса для переменной. - person Charles Xu; 24.01.2019
comment
Когда я выполняю обновление az vm, я получаю ту же самую ошибку независимо от того, использую ли я $ vm_secret или просто vm_secret (как с включением, так и без него). Ошибка начинается: Невозможно построить модель: Невозможно десериализовать как [VaultSecretGroup] объект типа ‹class 'str'› и заканчивается на: msrest.exceptions.SerializationError: Невозможно построить модель: Невозможно десериализовать как [VaultSecretGroup] объект тип. - person ProfNimrod; 24.01.2019
comment
@ProfNimrod Да, я знаю эту ошибку. Я имею в виду, что вы можете выполнить сценарий в Azure Cloud Shell в среде bash. Может нормально работать. Я думаю, что что-то не так, когда команда CLI запускается в системе Windows. - person Charles Xu; 25.01.2019
comment
Спасибо за проверку. Я еще не пробовал запускать команду в среде bash. Я дам вам знать результат. - person ProfNimrod; 26.01.2019
comment
Использование команд в вашем EDIT почти сработало. У меня возникла ошибка, связанная с тем, что виртуальная машина и сертификат находятся в двух разных местах (северо-центральная часть США и западная часть США). Я не понимал, что они должны быть в тех же регионах, поэтому попробую еще раз, когда они будут в том же регионе. - person ProfNimrod; 28.01.2019