Привет! Хочешь сохранить свой пароль в своём контроле исходного кода?
Наша цель: развернуть виртуальную машину Windows Nano с использованием шаблона ARM в GitHub, без необходимости вводить имя пользователя или пароль администратора в любом месте в виде простого текста.
Для этого нам понадобится место, чтобы спрятать секреты. В этом случае мы будем использовать хранилище ключей Azure. В Key Vault вы создаете группу ресурсов и хранилище (используя PowerShell или шаблон ARM), а затем загружаете некоторые секреты или ключи. Вы можете скрыть основные пароли или загрузить сертификаты.
Я собираюсь создать свое хранилище ключей с помощью PowerShell. Я специально создаю свое хранилище в своей собственной группе ресурсов. Вы можете создать хранилище ключей в той же группе ресурсов, что и остальная часть развертывания, но затем, если вы удалите целую группу во время тестирования, вам придется каждый раз заново создавать хранилище.
- Войдите в Azure.
- Получите данные своей подписки, скопируйте GUID подписки, которую вы хотите использовать для хранилища ключей, в переменную $ VSSubID.
- Настройте переменные для имени группы ресурсов, имени хранилища и региона развертывания.
- После создания хранилища настройте «SuperSecretPassword» и «FancyAdminName» по своему вкусу и добавьте эти секреты в хранилище.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Login-AzureRmAccount Get-AzureRmSubscription $VSSubID = {subcription_guid} Set-AzureRmContext -SubscriptionID $VSSubID $RGName = "KeyVaultRG" $VaultName = "MyVaultName" $Location = "West US" New-AzureRmResourceGroup -Name $RGName -Location $Location New-AzureRmKeyVault -VaultName $VaultName -ResourceGroupName $RGName -Location $Location Set-AzureRmKeyVaultAccessPolicy -VaultName $VaultName -EnabledForTemplateDeployment -ResourceGroupName $RGName $secretvalue = ConvertTo-SecureString 'SuperSecretPassword' -AsPlainText -Force $secret = Set-AzureKeyVaultSecret -VaultName $VaultName -Name 'ServerAdminPassword' -SecretValue $secretvalue $secretvalue = ConvertTo-SecureString 'FancyAdminName' -AsPlainText -Force $secret = Set-AzureKeyVaultSecret -VaultName $VaultName -Name 'ServerAdminName' -SecretValue $secretvalue |
Теперь, когда мое хранилище заполнено, мне нужно отредактировать шаблон ARM, чтобы получить секреты из хранилища ключей при развертывании моей виртуальной машины. Внесите изменения в ваш parameters.json файл, а не ваш шаблон развертывания. Таким образом, вы можете легко использовать один и тот же шаблон развертывания с разными подписками и хранилищами. Вместо использования базового типа строки для имени adminUsername и adminPassword, используйте ссылки, которые вы добавили в хранилище.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
"adminUsername": { "reference": { "keyVault": { "id": "/subscriptions/{guid}/resourceGroups/KeyVaultRG/providers/Microsoft.KeyVault/vaults/ImperfectKeyVault" }, "secretName": "ServerAdminName" } }, "adminPassword": { "reference": { "keyVault": { "id": "/subscriptions/{guid}/resourceGroups/KeyVaultRG/providers/Microsoft.KeyVault/vaults/ImperfectKeyVault" }, "secretName": "ServerAdminPassword" } } |
Теперь при запуске развертывания имя пользователя и пароль администратора будут извлечены из хранилища и переданы вашей виртуальной машине во время создания. Стоит отметить, что никто не может вытащить ключи из вашего хранилища. По умолчанию только администратор подписки сможет получить доступ к содержимому хранилища, но вы можете добавить дополнительные разрешения к хранилищу, чтобы другие пользователи и средства автоматизации могли получить доступ к тем же секретам.