Упражнение. Управление секретами в шаблоне ARM
В предыдущем упражнении вы запустили базовый шаблон Azure Resource Manager (ARM), который подготавливает виртуальную машину Linux. В этом разделе вы выполните аналогичную процедуру.
На этот раз вместо того, чтобы передавать пароль в качестве параметра, пароль сохраняется в Azure Key Vault. Чтобы включить шаблон ARM для доступа к паролю, создайте файл параметров, который указывает на секрет в хранилище ключей из вашей подписки.
Развертывание Azure Key Vault
Примечание.
Из-за ограничений, связанных с песочницей, можно создать хранилище ключей в Azure Key Vault на портале Azure. Обычно для создания хранилища ключей из Azure PowerShell используется командлет New-AzKeyVault
.
Создайте хранилище ключей и разрешите доступ во время развертывания. Для этого:
Создайте переменную PowerShell, содержащую имя хранилища ключей:
$KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
Выполните
$KVNAME
, чтобы вывести его значение:$KVNAME
Выходные данные будут похожи на это (реальное значение будет отличаться):
tailwind-secrets5978564
Скопируйте значение в удобное место, чтобы воспользоваться им на следующем шаге.
Войдите на портал Azure, используя ту же учетную запись, с помощью которой вы активировали песочницу.
В меню портала Azure или на странице Домашняя выберите Создать ресурс.
В поле поиска введите Key Vault.
Выберите Key Vault из списка и нажмите кнопку Создать, чтобы начать настройку хранилища ключей.
На панели создания укажите следующие значения:
- Resource group:
имя группы ресурсов . - Имя хранилища ключей: Ваше значение
$KVNAME
, например, tailwind-secrets5978564.
- Resource group:
Выберите Review + create (Просмотреть и создать).
Нажмите кнопку создания. Это займет около минуты. После создания ресурса выберите команду Перейти к ресурсу.
Выберите "Конфигурация доступа" в Параметры. Включите параметр Azure Resource Manager для развертывания шаблона и выберите "Применить".
В сеансе PowerShell выполните командлет
ConvertTo-SecureString
и назначьте ее результат переменнойsecretSecureString
:$secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
Выполните следующую команду
Set-AzKeyVaultSecret
, чтобы создать секрет в хранилище ключей. Секрету присваивается имяvmPassword
со значениемinsecurepassword123!
:$secret = Set-AzKeyVaultSecret -VaultName $KVNAME -Name vmPassword -SecretValue $secretSecureString
Создание файла параметров
Здесь создается файл параметров, содержащий имя виртуальной машины, имя пользователя администратора и ссылку на пароль виртуальной машины в хранилище ключей.
Параметры можно передать в шаблоны из командной строки. Напоминаем, что файл параметров — это альтернативный способ передачи параметров в шаблон ARM во время развертывания. Файл параметров позволяет получить доступ к секретам хранилища ключей из шаблона.
Выполните следующую команду
Get-AzKeyVault
, чтобы вывести идентификатор Key Vault:Get-AzKeyVault -VaultName $KVNAME | Select-Object -ExpandProperty ResourceId
Результат будет примерно таким:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Эти выходные данные потребуются на следующем шаге.
В Visual Studio Code создайте файл с именем azuredeploy.parameters.json в том же каталоге, который содержит azuredeploy.json.
Добавьте это содержимое в файл azuredeploy.parameters.json.
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "adminUsername": { "value": "azureuser" }, "vmName": { "value": "vm2" }, "adminPasswordOrKey": { "reference": { "keyVault": { "id": "" }, "secretName": "vmPassword" } } } }
Замените значение
id
(пустая строка) значением, скопированным на предыдущем шаге. Затем сохраните файл.
Развертывание виртуальной машины Linux
Здесь развертывается тот же шаблон ARM, который был развернут в предыдущем упражнении. На этот раз вы предоставляете файл параметров, который ссылается на пароль виртуальной машины в хранилище ключей.
Выполните приведенную ниже команду
New-AzResourceGroupDeployment
.New-AzResourceGroupDeployment ` -TemplateFile "./azuredeploy.json" ` -TemplateParameterFile "./azuredeploy.parameters.json" ` -dnsLabelPrefix ("vm2-" + (Get-Random -Count 1 -Maximum 9999999))
В предыдущем упражнении вы указывали каждую пару "ключ-значение" непосредственно из командной строки. Здесь указывается
"./azuredeploy.parameters.json"
, чтобы предоставить файл параметров.Для
dnsLabelPrefix
задано значениеvm2-
, за которым следует случайное число. Это необходимо для того, чтобы это DNS-имя отличалось от DNS-имени, использованного в предыдущем упражнении.
Проверка развертывания
Убедитесь, что виртуальная машина подготовлена и к ней можно подключиться по протоколу SSH. Для этого:
Выполните команду
Invoke-Expression
, чтобы подключиться к виртуальной машине с помощью SSH:Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
При появлении запроса введите
yes
, чтобы продолжить подключение. Затем введите пароль администратора.insecurepassword123!
Важно!
На практике пароли следует хранить в надежном месте. Также можно использовать проверку подлинности с открытым ключом, которая обычно безопаснее, чем использование паролей.
В SSH-сеансе с виртуальной машиной выполните команду
hostname
, чтобы вывести имя узла виртуальной машины:hostname
Вы увидите внутреннее имя узла виртуальной машины:
vm1
vm2
Введите
exit
, чтобы выйти из SSH-сеанса.exit
Отличная работа! Вы расширили развертывание, включив в него файл параметров, который считывает данные секрета из хранилища ключей.
Развертывание Azure Key Vault
В Azure Key Vault создайте хранилище ключей и добавьте пароль виртуальной машины в качестве безопасного секрета. Для этого:
Создайте переменную bash, содержащую имя хранилища ключей.
KVNAME=tailwind-secrets$RANDOM
Имена хранилища должны быть уникальными. Часть
$RANDOM
гарантирует, что имя хранилища ключей заканчивается случайной серией чисел.Выполните следующую команду
az keyvault create
, чтобы создать хранилище ключей.az keyvault create \ --name $KVNAME \ --enabled-for-template-deployment true
Аргумент
--enabled-for-template-deployment
позволяет шаблону Azure Resource Manager (ARM) извлекать секреты из хранилища ключей.Выполните следующую команду
az keyvault secret set
, чтобы создать секрет в хранилище ключей. Секрету присваивается имяvmPassword
со значениемinsecurepassword123!
:az keyvault secret set \ --vault-name $KVNAME \ --name vmPassword \ --value 'insecurepassword123!'
Создание файла параметров
Здесь создается файл параметров, содержащий имя виртуальной машины, имя пользователя администратора и ссылку на пароль виртуальной машины в хранилище ключей.
Параметры можно передать в шаблоны из командной строки. Напоминаем, что файл параметров — это альтернативный способ передачи параметров в шаблон ARM во время развертывания. Файл параметров позволяет получить доступ к секретам хранилища ключей из шаблона.
Выполните следующую команду
az keyvault show
, чтобы вывести идентификатор Key Vault:az keyvault show \ --name $KVNAME \ --query id \ --output tsv
Результат будет примерно таким:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
Эти выходные данные потребуются на следующем шаге.
В Visual Studio Code создайте файл с именем azuredeploy.parameters.json в том же каталоге, который содержит azuredeploy.json.
Добавьте это содержимое в файл azuredeploy.parameters.json.
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "adminUsername": { "value": "azureuser" }, "vmName": { "value": "vm2" }, "adminPasswordOrKey": { "reference": { "keyVault": { "id": "" }, "secretName": "vmPassword" } } } }
Замените значение
id
(пустая строка) значением, скопированным на предыдущем шаге. Затем сохраните файл.
Развертывание виртуальной машины Linux
Здесь развертывается тот же шаблон ARM, который был развернут в предыдущем упражнении. На этот раз вы предоставляете файл параметров, который ссылается на пароль виртуальной машины в хранилище ключей.
Чтобы развернуть шаблон, выполните приведенную ниже команду az deployment group create
.
az deployment group create \
--template-file azuredeploy.json \
--parameters @azuredeploy.parameters.json dnsLabelPrefix="vm2-$RANDOM"
В предыдущем упражнении вы указали каждую пару "ключ-значение" в аргументе --parameters
. Здесь указывается @azuredeploy.parameters.json
, чтобы предоставить файл параметров.
Для dnsLabelPrefix
задано значение vm2-
, за которым следует случайное число. Это необходимо для того, чтобы это DNS-имя отличалось от DNS-имени, использованного в предыдущем упражнении.
Проверка развертывания
Как и в предыдущем упражнении, убедитесь, что виртуальная машина подготовлена и подключается по протоколу SSH. Для краткости на этот раз некоторые промежуточные шаги будут пропущены.
Выполните следующую команду, чтобы подключиться к виртуальной машине по протоколу SSH:
$(az deployment group show \ --name azuredeploy \ --query properties.outputs.sshCommand.value \ --output tsv)
При появлении запроса введите
yes
, чтобы продолжить подключение. Затем введите пароль администратора.insecurepassword123!
В SSH-сеансе с виртуальной машиной выполните команду
hostname
, чтобы вывести имя узла виртуальной машины:hostname
Вы увидите внутреннее имя узла виртуальной машины:
vm2
vm2
Введите
exit
, чтобы выйти из SSH-сеанса.exit
Отличная работа! Вы расширили развертывание, включив в него файл параметров, который считывает данные секрета из хранилища ключей.