Руководство по интеграции Azure Key Vault в развертывание шаблона Resource ManagerTutorial: Integrate Azure Key Vault in your Resource Manager template deployment

Узнайте, как получить секреты из Azure Key Vault и передавать эти секреты в качестве параметров во время развертывания Azure Resource Manager.Learn how to retrieve secrets from an Azure key vault and pass the secrets as parameters when you deploy Azure Resource Manager. Значение параметра никогда не предоставляется, так как указывается только его идентификатор в хранилище ключей.The parameter value is never exposed, because you reference only its key vault ID. Дополнительные сведения см. в статье Использование Azure Key Vault для передачи защищенного значения параметра во время развертывания.For more information, see Use Azure Key Vault to pass secure parameter value during deployment.

С помощью инструкций из учебника по настройке порядка развертывания ресурсов вы создадите виртуальную машину.In the Set resource deployment order tutorial, you create a virtual machine (VM). Вам нужно предоставить имя и пароль учетной записи администратора виртуальной машины.You need to provide the VM administrator username and password. Чтобы не предоставлять пароль, можно предварительно сохранить его в Azure Key Vault, а затем настроить шаблона для извлечения пароля из хранилища ключей во время развертывания.Instead of providing the password, you can pre-store the password in an Azure key vault and then customize the template to retrieve the password from the key vault during the deployment.

Схема, отображающая процесс интеграции шаблона Resource Manager с хранилищем ключей

В рамках этого руководства рассматриваются следующие задачи:This tutorial covers the following tasks:

  • Подготовка хранилища ключей.Prepare a key vault
  • Открытие шаблона быстрого запускаOpen a quickstart template
  • Изменение файла параметровEdit the parameters file
  • Развертывание шаблонаDeploy the template
  • Проверка развертыванияValidate the deployment
  • Очистка ресурсовClean up resources

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.If you don't have an Azure subscription, create a free account before you begin.

Примечание

Эта статья была изменена и теперь содержит сведения о новом модуле Az для Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Вы по-прежнему можете использовать модуль AzureRM, исправления ошибок для которого будут продолжать выпускаться как минимум до декабря 2020 г.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Дополнительные сведения о совместимости модуля Az с AzureRM см. в статье Introducing the new Azure PowerShell Az module (Знакомство с новым модулем Az для Azure PowerShell).To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Инструкции по установке модуля Az см. в статье об установке Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

Предварительные требованияPrerequisites

Для работы с этой статьей необходимо иметь следующее.To complete this article, you need:

Подготовка хранилища ключей.Prepare a key vault

Из этого раздела вы узнаете, как создать хранилище ключей и добавить в него секрет, который будет получен при развертывании шаблона.In this section, you create a key vault and add a secret to it, so that you can retrieve the secret when you deploy your template. Существует много способов создания хранилища ключей.There are many ways to create a key vault. В этом руководстве описывается, как развернуть шаблон Resource Manager с помощью Azure PowerShell.In this tutorial, you use Azure PowerShell to deploy a Resource Manager template. Этот шаблон делает следующее:This template does the following:

  • Создает хранилище ключей с включенным свойством enabledForTemplateDeployment.Creates a key vault with the enabledForTemplateDeployment property enabled. Это свойство должно получить значение true до того, как процесс развертывания шаблона сможет получить доступ к секретам, определенным в этом хранилище ключей.This property must be true before the template deployment process can access the secrets that are defined in the key vault.
  • Добавляет секрет в хранилище ключей.Adds a secret to the key vault. Секрет хранит пароль учетной записи администратора виртуальной машины.The secret stores the VM administrator password.

Примечание

Если вы (в качестве пользователя для развертывания шаблона виртуальной машины) не являетесь владельцем или участником хранилища ключей, владелец или участник хранилища ключей должен предоставить вам доступ к разрешению Microsoft.KeyVault/vaults/deploy/action для хранилища ключей.As the user who's deploying the virtual machine template, if you're not the Owner of or a Contributor to the key vault, the Owner or a Contributor must grant you access to the Microsoft.KeyVault/vaults/deploy/action permission for the key vault. Дополнительные сведения см. в статье Использование Azure Key Vault для передачи защищенного значения параметра во время развертывания.For more information, see Use Azure Key Vault to pass a secure parameter value during deployment.

Чтобы запустить следующий сценарий Azure PowerShell, выберите вкладку Попробовать для открытия Azure Cloud Shell.To run the following Azure PowerShell script, select Try it to open Azure Cloud Shell. Чтобы вставить скрипт, щелкните правой кнопкой на панели оболочки и выберите Вставить.To paste the script, right-click the shell pane, and then select Paste.

$projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$upn = Read-Host -Prompt "Enter your user principal name (email address) used to sign in to Azure"
$secretValue = Read-Host -Prompt "Enter the virtual machine administrator password" -AsSecureString

$resourceGroupName = "${projectName}rg"
$keyVaultName = $projectName
$adUserId = (Get-AzADUser -UserPrincipalName $upn).Id
$templateUri = "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorials-use-key-vault/CreateKeyVault.json"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -keyVaultName $keyVaultName -adUserId $adUserId -secretValue $secretValue

Важно!

  • Обратите внимание, что имя группы ресурсов — это имя проекта с добавлением rg.The resource group name is the project name, but with rg appended to it. Чтобы было проще удалить ресурсы, созданные при работе с этим учебником, используйте то же имя проекта и имя группы ресурсов при развертывании следующего шаблона.To make it easier to clean up the resources that you created in this tutorial, use the same project name and resource group name when you deploy the next template.
  • Имя секрета по умолчанию — vmAdminPassword.The default name for the secret is vmAdminPassword. Оно встроено в шаблон.It's hardcoded in the template.
  • Чтобы шаблон мог извлечь секрет, необходимо активировать политику доступа к хранилищу ключей, предоставленную параметром "Включить доступ к Azure Resource Manager для развертывания шаблонов".To enable the template to retrieve the secret, you must enable an access policy called "Enable access to Azure Resource Manager for template deployment" for the key vault. В шаблоне эта политика включена.This policy is enabled in the template. Подробные сведения об этой политике доступа см. в разделе о развертывании хранилищ ключей и секретов.For more information about the access policy, see Deploy key vaults and secrets.

У шаблона есть выходное значение с именем keyVaultId.The template has one output value, called keyVaultId. Запишите значение идентификатора для дальнейшего использования. Он понадобится при развертывании виртуальной машины.Write down the ID value for later use, when you deploy the virtual machine. Формат идентификатора ресурса выглядит следующим образом:The resource ID format is:

/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>

При копировании и вставке идентификатора он может быть разбит на несколько строк.When you copy and paste the ID, it might be broken into multiple lines. Вам необходимо объединить строки и удалить лишние пробелы.Merge the lines and trim the extra spaces.

Чтобы проверить развертывание, выполните следующую команду PowerShell в той же панели оболочки, чтобы получить секрет в виде простого текста.To validate the deployment, run the following PowerShell command in the same shell pane to retrieve the secret in clear text. Сценарий работает только в том же сеансе оболочки, так как используется переменная $keyVaultName, которая определена в приведенном выше сценарии PowerShell.The command works only in the same shell session, because it uses the variable $keyVaultName, which is defined in the preceding PowerShell script.

(Get-AzKeyVaultSecret -vaultName $keyVaultName  -name "vmAdminPassword").SecretValueText

Хранилище ключей и секрет подготовлены.Now you've prepared a key vault and a secret. В следующих разделах описано, как настроить существующий шаблон, чтобы получить секрет во время развертывания.The following sections show you how to customize an existing template to retrieve the secret during the deployment.

Открытие шаблона быстрого запускаOpen a quickstart template

Шаблоны быстрого запуска Azure — это репозиторий для шаблонов Resource Manager.Azure Quickstart Templates is a repository for Resource Manager templates. Вместо создания шаблона с нуля можно найти пример шаблона и настроить его.Instead of creating a template from scratch, you can find a sample template and customize it. Шаблон, используемый в этом учебнике, называется Deploy a simple Windows VM (Развертывание простой виртуальной машины Windows).The template that's used in this tutorial is called Deploy a simple Windows VM.

  1. В Visual Studio Code выберите Файл > Открыть файл.In Visual Studio Code, select File > Open File.

  2. В поле Имя файла вставьте следующий URL-адрес:In the File name box, paste the following URL:

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vm-simple-windows/azuredeploy.json
    
  3. Чтобы открыть файл, выберите Открыть.Select Open to open the file. Сценарий аналогичен тому, который используется в статье Руководство. Создание шаблонов Azure Resource Manager с зависимыми ресурсами.The scenario is the same as the one that's used in Tutorial: Create Azure Resource Manager templates with dependent resources. Шаблон определяет пять ресурсов:The template defines five resources:

    Рекомендуется получить основные сведения о шаблоне, прежде чем переходить к его настройке.It's helpful to have some basic understanding of the template before you customize it.

  4. Выберите Файл > Сохранить как, а затем сохраните на свой локальный компьютер копию файла под именем azuredeploy.json.Select File > Save As, and then save a copy of the file to your local computer with the name azuredeploy.json.

  5. Повторите шаги 1–3, чтобы открыть следующий URL-адрес, а затем сохраните файл как azuredeploy.parameters.json.Repeat steps 1-3 to open the following URL, and then save the file as azuredeploy.parameters.json.

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vm-simple-windows/azuredeploy.parameters.json
    

Изменение файла параметровEdit the parameters file

В файл шаблона не нужно вносить изменения.You don't need to make any changes to the template file.

  1. В Visual Studio Code откройте файл azuredeploy.parameters.json, если он еще не открыт.In Visual Studio Code, open azuredeploy.parameters.json if it's not already open.

  2. Укажите для параметра adminPassword следующий код.Update the adminPassword parameter to:

    "adminPassword": {
        "reference": {
            "keyVault": {
            "id": "/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>"
            },
            "secretName": "vmAdminPassword"
        }
    },
    

    Важно!

    Замените значение для id на идентификатор ресурса хранилища ключей, созданного во время предыдущей процедуры.Replace the value for id with the resource ID of the key vault that you created in the previous procedure.

    Интеграция Key Vault и файла параметров развертывания виртуальной машины шаблона Resource Manager

  3. Обновите следующие значения:Update the following values:

    • adminUsername. Имя учетной записи администратора виртуальной машины.adminUsername: The name of the virtual machine administrator account.
    • dnsLabelPrefix. Дайте имя значению dnsLabelPrefix.dnsLabelPrefix: Name the dnsLabelPrefix value.

    Примеры имен см. на предыдущем рисунке.For examples of names, see the preceding image.

  4. Сохраните изменения.Save the changes.

Развертывание шаблонаDeploy the template

Следуйте указаниям в этом разделе о развертывании шаблона.Follow the instructions in Deploy the template. Отправьте оба файла (azuredeploy.json и azuredeploy.parameters.json) в Cloud Shell. После этого выполните следующий сценарий PowerShell для развертывания шаблона.Upload both azuredeploy.json and azuredeploy.parameters.json to Cloud Shell, and then use the following PowerShell script to deploy the template:

$projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault"
$location = Read-Host -Prompt "Enter the same location that is used for creating the key vault (i.e. centralus)"
$resourceGroupName = "${projectName}rg"

New-AzResourceGroupDeployment `
    -ResourceGroupName $resourceGroupName `
    -TemplateFile "$HOME/azuredeploy.json" `
    -TemplateParameterFile "$HOME/azuredeploy.parameters.json"

При развертывании шаблона используйте ту же группу ресурсов, что и для хранилища ключей.When you deploy the template, use the same resource group that you used in the key vault. Такой подход упрощает процесс чистки ресурсов, так как вам необходимо удалить одну группу вместо двух.This approach makes it easier for you to clean up the resources, because you need to delete only one resource group instead of two.

Проверка развертыванияValidate the deployment

После успешного развертывания виртуальной машины проверьте учетные данные входа в систему с помощью пароля, сохраненного в хранилище ключей.After you've successfully deployed the virtual machine, test the sign-in credentials by using the password that's stored in the key vault.

  1. Откройте портал Azure.Open the Azure portal.

  2. Выберите Группа ресурсов > <имя вашей группы ресурсов> > simpleWinVM.Select Resource groups > <YourResourceGroupName> > simpleWinVM.

  3. Выберите Подключение в верхней части страницы.Select connect at the top.

  4. Выберите Скачать RDP-файл и следуйте инструкциям, чтобы войти в виртуальную машину с помощью пароля, сохраненного в хранилище ключей.Select Download RDP File, and then follow the instructions to sign in to the virtual machine by using the password that's stored in the key vault.

Очистка ресурсовClean up resources

Если ресурсы Azure больше не нужны, очистите их, удалив группу ресурсов.When you no longer need your Azure resources, clean up the resources that you deployed by deleting the resource group.

$projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault"
$resourceGroupName = "${projectName}rg"

Remove-AzResourceGroup -Name $resourceGroupName

Дополнительная информацияNext steps

С помощью этого учебника вы извлекли секрет из хранилища ключей Azure,In this tutorial, you retrieved a secret from your Azure key vault. а затем использовали этот секрет при развертывании шаблона.You then used the secret in your template deployment. Чтобы узнать, как создавать связанные шаблоны, обратитесь к статье:To learn how to create linked templates, see:

Tutorial: Create linked Azure Resource Manager templates (Руководство по созданию связанных шаблонов Azure Resource Manager)Create linked templates