クイックスタート: Bicep を使用して Azure Key Vault と証明書を作成する

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

Bicep は、宣言型の構文を使用して Azure リソースをデプロイするドメイン固有言語 (DSL) です。 簡潔な構文、信頼性の高いタイプ セーフ、およびコードの再利用のサポートが提供されます。 Bicep は、Azure のコードとしてのインフラストラクチャ ソリューションに最適な作成エクスペリエンスを提供します。

Prerequisites

  • Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

Bicep ファイルを確認する

このクイックスタートで使用されるテンプレートは Azure クイックスタート テンプレートからのものです。

@description('The name of the key vault to be created.')
param vaultName string

@description('The name of the certificate to be created.')
param certificateName string

@description('The location of the resources.')
param location string = resourceGroup().location

@description('The SKU of the vault to be created.')
@allowed([
  'standard'
  'premium'
])
param skuName string = 'standard'

@description('The common name (subject) for the self-signed certificate. Defaults to the certificate name.')
param certificateCommonName string = certificateName

@description('The validity of the certificate in months.')
@minValue(1)
@maxValue(1200)
param validityInMonths int = 12

resource vault 'Microsoft.KeyVault/vaults@2023-07-01' = {
  name: vaultName
  location: location
  properties: {
    enableRbacAuthorization: true
    enableSoftDelete: true
    softDeleteRetentionInDays: 90
    enablePurgeProtection: true
    enabledForDeployment: false
    enabledForDiskEncryption: false
    enabledForTemplateDeployment: false
    tenantId: subscription().tenantId
    sku: {
      name: skuName
      family: 'A'
    }
    networkAcls: {
      defaultAction: 'Allow'
      bypass: 'AzureServices'
    }
  }
}

// Key Vault certificates are a data-plane concept and cannot be created
// directly through ARM. Use the public Bicep registry module which wraps
// `az keyvault certificate create` in a deployment script (it provisions a
// user-assigned managed identity with the Key Vault Certificate Officer
// role on the vault for the duration of the deployment).
module certificate 'br/public:deployment-scripts/create-kv-certificate:3.4.2' = {
  name: 'create-${certificateName}'
  params: {
    akvName: vault.name
    location: location
    certificateNames: [certificateName]
    certificateCommonNames: [certificateCommonName]
    validity: validityInMonths
  }
}

output location string = location
output name string = vault.name
output resourceGroupName string = resourceGroup().name
output resourceId string = vault.id
output certificateSecretId string = certificate.outputs.certificateSecretIds[0][0]
output certificateThumbprint string = certificate.outputs.certificateThumbprintHexs[0][0]

Bicep ファイルには、次の 2 つの Azure リソースが定義されています。

  • Microsoft。KeyVault/vaults: AZURE RBAC 承認が有効になっている Azure キー コンテナーを作成します (enableRbacAuthorization: true)。
  • Microsoft.Resources/deployments: vault に自己署名証明書を作成するために create-kv-certificate レジストリ モジュールを実行する入れ子になったデプロイ。 証明書はデータ プレーン リソースであり、ARM リソースの種類を使用して直接作成することはできません。

Bicep ファイルをデプロイする

  1. Bicep ファイルをローカル コンピューターに main.bicep として保存します。

  2. Azure CLI または Azure PowerShell を使って Bicep ファイルをデプロイします。

    az group create --name myResourceGroup --location eastus
    az deployment group create --resource-group myResourceGroup --template-file main.bicep --parameters vaultName=<vault-name> certificateName=myCert
    

    Note

    <vault-name>キー コンテナーの名前に置き換えます。これは、vault.azure.net名前空間内でグローバルに一意である必要があります。

    デプロイが完了すると、デプロイが成功したことを示すメッセージが表示されます。

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

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

echo "Enter your key vault name:" &&
read keyVaultName &&
az role assignment create --role "Key Vault Certificates 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 certificate list --vault-name $keyVaultName &&
echo "Press [ENTER] to continue ..."

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

不要になったら、Azure portal、Azure CLI、または Azure PowerShell を使用して、リソース グループとそのリソースを削除します。

az group delete --name myResourceGroup

Note

リソース グループを削除するとキー コンテナーも削除されますが、キー コンテナーは論理削除状態となり、保持期間 (デフォルトでは 90 日間) 中は復元可能です。 ボールト名はその期間中グローバルで予約されたままとなり、さらに消去保護が有効になっているため、ボールトを早期に完全に削除することはできません。 標準のキー コンテナーの場合、論理削除されたコンテナーには料金は発生しません。 詳細については、「Key Vault ソフト削除の概要」を参照してください。

次のステップ

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