次の方法で共有


クイック スタート: ARM テンプレートを使用してAzure Key Vaultからシークレットを設定および取得する

Azure Key Vault は、キー、パスワード、証明書、その他のシークレットなどのシークレットのセキュリティで保護されたストアを提供するクラウド サービスです。 このクイック スタートでは、Azure Resource Manager テンプレート (ARM テンプレート) をデプロイしてキー コンテナーとシークレットを作成するプロセスについて説明します。

Azure Resource Manager テンプレート は、プロジェクトのインフラストラクチャと構成を定義する JavaScript Object Notation (JSON) ファイルです。 このテンプレートでは、宣言型の構文が使用されています。 デプロイを作成するための一連のプログラミング コマンドを記述しなくても、意図したデプロイを記述できます。

環境が前提条件を満たし、ARM テンプレートの使用に慣れている場合は、 [Azure] ボタンを選択します。 テンプレートがAzure ポータルで開きます。

Resource Manager テンプレートを Azure に展開するボタン

[前提条件]

この記事を完了するには:

  • Azure サブスクリプションがない場合は、開始する前に free アカウントを作成します。

  • アクセス許可を構成するには、テンプレートでMicrosoft Entraユーザー オブジェクト ID が必要です。 次の手順では、オブジェクト ID (GUID) を取得します。

    1. 次のAzure PowerShellまたはAzure CLIコマンドTry it を選択して実行し、スクリプトをシェル ウィンドウに貼り付けます。 スクリプトを貼り付けるには、シェルを右クリックし、 [貼り付け] を選択します。

      echo "Enter your email address that is used to sign in to Azure:" &&
      read upn &&
      az ad user show --id $upn --query "Id" &&
      echo "Press [ENTER] to continue ..."
      
    2. オブジェクト ID を書き留めます。 このクイック スタートの次のセクションで必要になります。

テンプレートを確認する

Important

このクイックスタートでは、レガシーアクセス ポリシーを使用してボールトを作成する外部テンプレートを使用します。 運用環境へのデプロイでは、Azure RBAC 承認を使用してください。 を使用するテンプレートについては、enableRbacAuthorization: true を使用してキー コンテナーを作成する方法に関するページを参照してください。包括的なセキュリティ ガイダンスについては、「Azure Key Vault をセキュリティで保護する」を参照してください。

このクイック スタートで使用するテンプレートは、Azure クイック スタート テンプレートから取得します。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.26.54.24096",
      "templateHash": "8629186205194254058"
    }
  },
  "parameters": {
    "keyVaultName": {
      "type": "string",
      "metadata": {
        "description": "Specifies the name of the key vault."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Specifies the Azure location where the key vault should be created."
      }
    },
    "enabledForDeployment": {
      "type": "bool",
      "defaultValue": false,
      "metadata": {
        "description": "Specifies whether Azure Virtual Machines are permitted to retrieve certificates stored as secrets from the key vault."
      }
    },
    "enabledForDiskEncryption": {
      "type": "bool",
      "defaultValue": false,
      "metadata": {
        "description": "Specifies whether Azure Disk Encryption is permitted to retrieve secrets from the vault and unwrap keys."
      }
    },
    "enabledForTemplateDeployment": {
      "type": "bool",
      "defaultValue": false,
      "metadata": {
        "description": "Specifies whether Azure Resource Manager is permitted to retrieve secrets from the key vault."
      }
    },
    "tenantId": {
      "type": "string",
      "defaultValue": "[subscription().tenantId]",
      "metadata": {
        "description": "Specifies the Azure Active Directory tenant ID that should be used for authenticating requests to the key vault. Get it by using Get-AzSubscription cmdlet."
      }
    },
    "objectId": {
      "type": "string",
      "metadata": {
        "description": "Specifies the object ID of a user, service principal or security group in the Azure Active Directory tenant for the vault. The object ID must be unique for the list of access policies. Get it by using Get-AzADUser or Get-AzADServicePrincipal cmdlets."
      }
    },
    "keysPermissions": {
      "type": "array",
      "defaultValue": [
        "list"
      ],
      "metadata": {
        "description": "Specifies the permissions to keys in the vault. Valid values are: all, encrypt, decrypt, wrapKey, unwrapKey, sign, verify, get, list, create, update, import, delete, backup, restore, recover, and purge."
      }
    },
    "secretsPermissions": {
      "type": "array",
      "defaultValue": [
        "list"
      ],
      "metadata": {
        "description": "Specifies the permissions to secrets in the vault. Valid values are: all, get, list, set, delete, backup, restore, recover, and purge."
      }
    },
    "skuName": {
      "type": "string",
      "defaultValue": "standard",
      "allowedValues": [
        "standard",
        "premium"
      ],
      "metadata": {
        "description": "Specifies whether the key vault is a standard vault or a premium vault."
      }
    },
    "secretName": {
      "type": "string",
      "metadata": {
        "description": "Specifies the name of the secret that you want to create."
      }
    },
    "secretValue": {
      "type": "securestring",
      "metadata": {
        "description": "Specifies the value of the secret that you want to create."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.KeyVault/vaults",
      "apiVersion": "2023-07-01",
      "name": "[parameters('keyVaultName')]",
      "location": "[parameters('location')]",
      "properties": {
        "enabledForDeployment": "[parameters('enabledForDeployment')]",
        "enabledForDiskEncryption": "[parameters('enabledForDiskEncryption')]",
        "enabledForTemplateDeployment": "[parameters('enabledForTemplateDeployment')]",
        "tenantId": "[parameters('tenantId')]",
        "enableSoftDelete": true,
        "softDeleteRetentionInDays": 90,
        "accessPolicies": [
          {
            "objectId": "[parameters('objectId')]",
            "tenantId": "[parameters('tenantId')]",
            "permissions": {
              "keys": "[parameters('keysPermissions')]",
              "secrets": "[parameters('secretsPermissions')]"
            }
          }
        ],
        "sku": {
          "name": "[parameters('skuName')]",
          "family": "A"
        },
        "networkAcls": {
          "defaultAction": "Allow",
          "bypass": "AzureServices"
        }
      }
    },
    {
      "type": "Microsoft.KeyVault/vaults/secrets",
      "apiVersion": "2023-07-01",
      "name": "[format('{0}/{1}', parameters('keyVaultName'), parameters('secretName'))]",
      "properties": {
        "value": "[parameters('secretValue')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]"
      ]
    }
  ],
  "outputs": {
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    },
    "name": {
      "type": "string",
      "value": "[parameters('keyVaultName')]"
    },
    "resourceGroupName": {
      "type": "string",
      "value": "[resourceGroup().name]"
    },
    "resourceId": {
      "type": "string",
      "value": "[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]"
    }
  }
}

テンプレートには、次の 2 つのAzure リソースが定義されています。

その他Azure Key Vaultテンプレートのサンプルについては、Azure クイック スタート テンプレートを参照してください。

テンプレートをデプロイする

  1. 次の画像を選択し、Azure にサインインしてテンプレートを開きます。 このテンプレートでは、キー コンテナーとシークレットが作成されます。

    Resource Manager テンプレートを Azure に展開するボタン

  2. 次の値を選択または入力します。

    ARM テンプレート、Key Vault統合、ポータルのデプロイ

    指定されていない限り、既定値を使用してキー コンテナーとシークレットを作成します。

    • Subscription: Azure サブスクリプションを選択します。
    • リソース グループ: [新規作成] を選択し、リソース グループの一意の名前を入力し、 [OK] をクリックします。
    • 場所: 場所を選択します。 たとえば [米国中部] です。
    • Key Vault Name: key vaultの名前を入力します。これは、.vault.azure.net 名前空間内でグローバルに一意である必要があります。 デプロイを検証するときは、次のセクションの名前が必要です。
    • テナント ID: テンプレート関数は、テナント ID を自動的に取得します。 既定値は変更しないでください。
    • Ad User Id: Prerequisites から取得したMicrosoft Entra ユーザー オブジェクト ID を入力します。
    • シークレット名: キー コンテナーに格納するシークレットの名前を入力します。 たとえば、 adminpassword です
    • シークレット値: シークレット値を入力します。 パスワードを保存する場合は、「前提条件」で作成した生成されたパスワードを使用することをお勧めします。
    • 上記の使用条件に同意する: 選択。
  3. [購入] を選択します。 キーボールトが成功裏にデプロイされると、通知が届きます。

    ARM テンプレート、Key Vault統合、ポータル通知のデプロイ

Azure ポータルは、テンプレートのデプロイに使用されます。 Azure ポータルに加えて、Azure PowerShell、Azure CLI、REST API も使用できます。 他のデプロイ方法については、「テンプレートのデプロイ」を参照してください。

デプロイされているリソースを確認する

Azure ポータルを使用してキー コンテナーとシークレットを確認するか、次のAzure CLIまたはAzure PowerShellスクリプトを使用して作成されたシークレットを一覧表示できます。

echo "Enter your key vault name:" &&
read keyVaultName &&
az keyvault secret list --vault-name $keyVaultName &&
echo "Press [ENTER] to continue ..."

出力は次のようになります。

リソースをクリーンアップする

その他のKey Vaultクイック スタートとチュートリアルは、このクイック スタートに基づいています。 後続のクイック スタートおよびチュートリアルを引き続き実行する場合は、これらのリソースをそのまま残しておくことをお勧めします。 不要になったら、リソース グループを削除し、Key Vaultおよび関連リソースを削除します。 Azure CLIまたはAzure PowerShellを使用してリソース グループを削除するには:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

次のステップ

このクイック スタートでは、ARM テンプレートを使用してキー コンテナーとシークレットを作成し、デプロイを検証しました。 Key VaultとAzure Resource Managerの詳細については、以下の記事に進んでください。