クイック スタート: ARM テンプレートを使用して Azure キー コンテナーとキーを作成する

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

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

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

Resource Manager テンプレートを Azure に配置するボタン。

[前提条件]

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

  • Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
  • ユーザーには Azure の組み込みロールが割り当てられている必要があり、推奨されるロールは寄稿者です。 詳しくはこちらをご覧ください

テンプレートを確認する

このクイックスタートで使用されるテンプレートは 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": "9113739717796369919"
    }
  },
  "parameters": {
    "vaultName": {
      "type": "string",
      "metadata": {
        "description": "The name of the key vault to be created."
      }
    },
    "keyName": {
      "type": "string",
      "metadata": {
        "description": "The name of the key to be created."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location of the resources."
      }
    },
    "skuName": {
      "type": "string",
      "defaultValue": "standard",
      "allowedValues": [
        "standard",
        "premium"
      ],
      "metadata": {
        "description": "The SKU of the vault to be created."
      }
    },
    "keyType": {
      "type": "string",
      "defaultValue": "RSA",
      "allowedValues": [
        "EC",
        "EC-HSM",
        "RSA",
        "RSA-HSM"
      ],
      "metadata": {
        "description": "The JsonWebKeyType of the key to be created."
      }
    },
    "keyOps": {
      "type": "array",
      "defaultValue": [],
      "metadata": {
        "description": "The permitted JSON web key operations of the key to be created."
      }
    },
    "keySize": {
      "type": "int",
      "defaultValue": 2048,
      "metadata": {
        "description": "The size in bits of the key to be created."
      }
    },
    "curveName": {
      "type": "string",
      "defaultValue": "",
      "allowedValues": [
        "",
        "P-256",
        "P-256K",
        "P-384",
        "P-521"
      ],
      "metadata": {
        "description": "The JsonWebKeyCurveName of the key to be created."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.KeyVault/vaults",
      "apiVersion": "2023-07-01",
      "name": "[parameters('vaultName')]",
      "location": "[parameters('location')]",
      "properties": {
        "enableRbacAuthorization": true,
        "enableSoftDelete": true,
        "softDeleteRetentionInDays": 90,
        "enablePurgeProtection": true,
        "enabledForDeployment": false,
        "enabledForDiskEncryption": false,
        "enabledForTemplateDeployment": false,
        "tenantId": "[subscription().tenantId]",
        "sku": {
          "name": "[parameters('skuName')]",
          "family": "A"
        },
        "networkAcls": {
          "defaultAction": "Allow",
          "bypass": "AzureServices"
        }
      }
    },
    {
      "type": "Microsoft.KeyVault/vaults/keys",
      "apiVersion": "2023-07-01",
      "name": "[format('{0}/{1}', parameters('vaultName'), parameters('keyName'))]",
      "properties": {
        "kty": "[parameters('keyType')]",
        "keyOps": "[parameters('keyOps')]",
        "keySize": "[parameters('keySize')]",
        "curveName": "[parameters('curveName')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.KeyVault/vaults', parameters('vaultName'))]"
      ]
    }
  ],
  "outputs": {
    "proxyKey": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.KeyVault/vaults/keys', parameters('vaultName'), parameters('keyName')), '2023-07-01')]"
    },
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    },
    "name": {
      "type": "string",
      "value": "[parameters('vaultName')]"
    },
    "resourceGroupName": {
      "type": "string",
      "value": "[resourceGroup().name]"
    },
    "resourceId": {
      "type": "string",
      "value": "[resourceId('Microsoft.KeyVault/vaults', parameters('vaultName'))]"
    }
  }
}

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

テンプレートでは、Azure RBAC 承認が有効になっているキー コンテナーが作成されます。 つまり、このコンテナーでは、データ プレーンの認証にアクセス ポリシーではなく、Azure のロールベースのアクセス制御 (Azure RBAC) を使用しています。

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

テンプレートパラメーター

パラメーター Description
vaultName 新しいキー コンテナーの名前。 vault.azure.net名前空間内でグローバルに一意である必要があります。
Keyname ボールト内に作成するキーの名前。
場所 リソースのAzureリージョン。 既定値はリソース グループの場所です。
skuName コンテナー SKU。 standard (既定) または premium
keyType 作成するキーの種類。 RSARSA-HSMECEC-HSMのいずれか。 既定値は RSA です。 JsonWebKeyType を参照してください。
keySize キーのビット単位のサイズ (RSA のみ)。 既定値は 2048 です。
curveName 楕円曲線名 (EC キーのみ)。 P-256P-256KP-384P-521のいずれか。 JsonWebKeyCurveName を参照してください。
keyOps キーに対して許可される JSON Web キー操作 (たとえば、 ["sign","verify","encrypt","decrypt","wrapKey","unwrapKey"])。 空の配列 (既定値) では、すべての操作が許可されます。

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

  1. Azure にサインインし、テンプレートを開くには次のイメージを選択します。 このテンプレートは、Key Vault とキーを作成します。

    Resource Manager テンプレートを Azure に配置するボタン。

  2. 次の値を選択または入力します。 指定されていない限り、既定値を使用します。

    • サブスクリプション: Azure サブスクリプションを選択します。
    • リソース グループ: [ 新規作成] を選択し、リソース グループの一意の名前を入力して、[ OK] を選択します
    • リージョン: 場所を選択します。 たとえば [米国中部] です。
    • コンテナー名: キー コンテナーの名前を入力します。これは、 vault.azure.net 名前空間内でグローバルに一意である必要があります。
    • キー名: キー ヴォールトに格納するキーの名前を入力します。
    • SKU 名: Standard または Premium を選択します。 既定値は 標準です
    • キーの種類: キーの種類を選択します。 既定値は RSA です。
    • キー サイズ: キー サイズ (RSA キー) を入力します。 既定値は 2048 です
    • 曲線名: EC キーの場合は、曲線を選択します。 RSA キーの場合は空白のままにします。
  3. [ 確認と作成] を選択し、[ 作成] を選択します。 キー コンテナーとキーのデプロイが正常に完了すると、通知が届きます。

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

Key Vault RBAC ロールを割り当てる

このテンプレートによって作成されたキー コンテナーでは、承認に Azure RBAC が使用されます。 データ プレーンを介してキーにアクセスするには (たとえば、Azure CLIまたはAzure PowerShellを使用して)、適切なロールを自分自身に割り当てる必要があります。

  1. Microsoft Entraユーザー オブジェクト ID を取得します。

    az ad signed-in-user show --query id -o tsv
    
  2. キー コンテナーで、ご自身に Key Vault Crypto Officer ロールを割り当ててください。

    echo "Enter your key vault name:" &&
    read keyVaultName &&
    az role assignment create --role "Key Vault Crypto 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 portal を使用して、キー コンテナーとキーを確認できます。 または、次の Azure CLI または Azure PowerShell スクリプトを使用して、作成されたキーを一覧表示します。

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

ARM テンプレートを使用したキーの作成は、データ プレーンを使用したキーの作成とは異なります

ARM を使用したキーの作成

  • 新しいキーを作成することだけが可能です。 既存のキーを更新したり、既存のキーの新しいバージョンを作成したりすることはできません。 キーが既に存在する場合は、既存のキーがストレージから取得され、使用されます (書き込み操作は行われません)。

  • この API の使用を承認するには、呼び出し元に "Microsoft.KeyVault/vaults/keys/write" ロールベースのアクセス制御 (Azure RBAC) アクションが必要です。 組み込みの "Key Vault 共同作成者" ロールで十分です。これは、パターン "Microsoft.KeyVault/*" に一致するすべての Azure RBAC アクションを承認するためです。

    ARM を使用してキーを作成する 1 ARM 2 を使用してキーを作成する

既存の API (データ プレーンを使用したキーの作成)

  • 新しいキーを作成し、既存のキーを更新し、既存のキーの新しいバージョンを作成することができます。
  • 呼び出し元は、この API を使用する権限を持っている必要があります。 キー コンテナーで Azure RBAC が有効になっている場合、呼び出し元は「Microsoft.KeyVault/vaults/keys/create/action」という Azure RBAC DataAction の権限を持っている必要があります。

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

その他の 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 の詳細については、次の記事を参照してください。