チュートリアル:Resource Manager テンプレートのデプロイで Azure Key Vault を統合するTutorial: Integrate Azure Key Vault in your Resource Manager template deployment

Azure のキー コンテナーからシークレットを取得し、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. キー コンテナー ID のみを参照するため、パラメーター値が公開されることはありません。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.

リソースのデプロイ順序の設定」チュートリアルでは、仮想マシン (VM) を作成します。In the Set resource deployment order tutorial, you create a virtual machine (VM). 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 サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. AzureRM モジュールはまだ使用でき、少なくとも 2020 年 12 月までは引き続きバグ修正が行われます。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 (新しい Azure PowerShell Az モジュールの概要)」を参照してください。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. このチュートリアルでは、Azure PowerShell を使用して Resource Manager テンプレートをデプロイします。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. シークレットは、VM の管理者パスワードを格納します。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 という 1 つの出力値があります。The template has one output value, called keyVaultId. 仮想マシンをデプロイするときに、後で使用するために ID 値を書き留めておきます。Write down the ID value for later use, when you deploy the virtual machine. リソース ID の形式は、次のとおりです。The resource ID format is:

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

ID をコピーして貼り付けると、ID が複数の行に分かれてしまう場合があります。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. このコマンドは、前述の PowerShell スクリプトで定義された $keyVaultName 変数を使用しているため、同じシェル セッションでのみ機能します。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 VM をデプロイする)」と呼ばれます。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. このテンプレートには、次の 5 つのリソースが定義されています。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 の値を、前の手順で作成したキー コンテナーのリソース ID に置き換えます。Replace the value for id with the resource ID of the key vault that you created in the previous procedure.

    キー コンテナーと 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.jsonazuredeploy.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. このようにすると、2 つではなく 1 つのリソース グループのみを削除すればよいため、リソースのクリーンアップが簡単になります。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 Portalを開きます。Open the Azure portal.

  2. [リソース グループ] > [<YourResourceGroupName>] > [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 Key Vault からシークレットを取得しました。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: