Azure Key Vault は、キー、パスワード、証明書、その他のシークレットなどのシークレットのセキュリティで保護されたストアを提供するクラウド サービスです。 このクイック スタートでは、Azure Resource Manager テンプレート (ARM テンプレート) をデプロイしてキー コンテナーとシークレットを作成するプロセスについて説明します。
Azure Resource Manager テンプレート は、プロジェクトのインフラストラクチャと構成を定義する JavaScript Object Notation (JSON) ファイルです。 このテンプレートでは、宣言型の構文が使用されています。 デプロイを作成するための一連のプログラミング コマンドを記述しなくても、意図したデプロイを記述できます。
環境が前提条件を満たし、ARM テンプレートの使用に慣れている場合は、
[前提条件]
この記事を完了するには:
- Azure サブスクリプションがない場合は、開始する前に free アカウントを作成します。
テンプレートを確認する
このクイック スタートで使用するテンプレートは、Azure クイック スタート テンプレートから取得します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.42.1.51946",
"templateHash": "10998800669048245550"
}
},
"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."
}
},
"skuName": {
"type": "string",
"defaultValue": "standard",
"allowedValues": [
"standard",
"premium"
],
"metadata": {
"description": "Specifies whether the key vault is a standard vault or a premium vault."
}
},
"secretsObject": {
"type": "secureObject",
"metadata": {
"description": "Specifies all secrets {\"secretName\":\"\",\"secretValue\":\"\"} wrapped in a secure object."
}
}
},
"resources": [
{
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2023-07-01",
"name": "[parameters('keyVaultName')]",
"location": "[parameters('location')]",
"properties": {
"enabledForDeployment": "[parameters('enabledForDeployment')]",
"enabledForTemplateDeployment": "[parameters('enabledForTemplateDeployment')]",
"enabledForDiskEncryption": "[parameters('enabledForDiskEncryption')]",
"enableRbacAuthorization": true,
"tenantId": "[parameters('tenantId')]",
"enableSoftDelete": true,
"softDeleteRetentionInDays": 90,
"enablePurgeProtection": true,
"sku": {
"name": "[parameters('skuName')]",
"family": "A"
},
"networkAcls": {
"defaultAction": "Allow",
"bypass": "AzureServices"
}
}
},
{
"copy": {
"name": "secrets",
"count": "[length(parameters('secretsObject').secrets)]"
},
"type": "Microsoft.KeyVault/vaults/secrets",
"apiVersion": "2023-07-01",
"name": "[format('{0}/{1}', parameters('keyVaultName'), parameters('secretsObject').secrets[copyIndex()].secretName)]",
"properties": {
"value": "[parameters('secretsObject').secrets[copyIndex()].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 リソースが定義されています。
-
Microsoft.KeyVault/vaults: Azure RBAC 認可 (
enableRbacAuthorization: true)、ソフト削除、およびパージ保護が有効な Azure キー コンテナーを作成します。 -
Microsoft。KeyVault/vaults/secrets: テンプレートに渡された
secretsObject.secrets配列を反復処理して、1 つ以上のキー コンテナー シークレットを作成します。
Key Vault ではデータ プレーンの認可に Azure RBAC を使用するため、アクセス ポリシーを構成するのではなく、Azure ロールを割り当てることでシークレットへのアクセス権を付与します。
その他Azure Key Vaultテンプレートのサンプルについては、Azure クイック スタート テンプレートを参照してください。
テンプレートをデプロイする
次の画像を選択し、Azure にサインインしてテンプレートを開きます。 このテンプレートでは、キー コンテナーとシークレットが作成されます。
次の値を選択または入力します。 指定されていない限り、既定値を使用します。
Subscription: Azure サブスクリプションを選択します。
リソース グループ: [ 新規作成] を選択し、リソース グループの一意の名前を入力して、[ OK] を選択します。
リージョン: 場所を選択します。 たとえば [米国中部] です。
Key Vault Name: key vaultの名前を入力します。これは、
vault.azure.net名前空間内でグローバルに一意である必要があります。 この名前は、次のセクションでデプロイを検証するときに必要になります。SKU 名: Standard または Premium を選択します。 既定値は 標準です。
Secrets オブジェクト:
secrets配列を含む JSON オブジェクトとして作成するシークレットを提供します。 例えば次が挙げられます。{ "secrets": [ { "secretName": "adminpassword", "secretValue": "<your-secret-value>" } ] }Secrets オブジェクトは
secureObjectパラメーターであるため、その値はデプロイ後にログに記録されたりエコーバックされたりすることはありません。
[ 確認と作成] を選択し、[ 作成] を選択します。 キー ボールトとシークレットが正常にデプロイされると、通知が表示されます。
Azure PowerShell、Azure CLI、または REST API を使用してテンプレートをデプロイすることもできます。 他のデプロイ方法については、「テンプレートのデプロイ」を参照してください。
Key Vault RBAC ロールを割り当てる
このテンプレートによって作成されたキー コンテナーでは、承認に Azure RBAC が使用されます。 データ プレーンを介してシークレットにアクセスするには (たとえば、Azure CLIまたはAzure PowerShellを使用して)、適切なロールを自分自身に割り当てる必要があります。
Microsoft Entraユーザー オブジェクト ID を取得します。
az ad signed-in-user show --query id -o tsvキー コンテナー上で、自身に キー コンテナーのシークレット オフィサーのロールを割り当てます:
echo "Enter your key vault name:" && read keyVaultName && az role assignment create --role "Key Vault Secrets Officer" \ --assignee-object-id $(az ad signed-in-user show --query id -o tsv) \ --scope $(az keyvault show --name $keyVaultName --query id -o tsv)Note
ロールの割り当てが反映されるまでに 1 ~ 2 分かかる場合があります。
デプロイされているリソースを確認する
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 ..."
Note
リソース グループを削除するとキー コンテナーも削除されますが、キー コンテナーは論理削除状態となり、保持期間 (デフォルトでは 90 日間) 中は復元可能です。 ボールト名はその期間中グローバルで予約されたままとなり、さらに消去保護が有効になっているため、ボールトを早期に完全に削除することはできません。 標準のキー コンテナーの場合、論理削除されたコンテナーには料金は発生しません。 詳細については、「Key Vault ソフト削除の概要」を参照してください。
次のステップ
このクイック スタートでは、ARM テンプレートを使用してキー コンテナーとシークレットを作成し、デプロイを検証しました。 Key VaultとAzure Resource Managerの詳細については、以下の記事に進んでください。
- Azure Key Vault のオーバービューをご覧ください
Azure Resource Manager - Key Vault セキュリティの概要 を確認します>