Azure Key Vault で暗号化キーの自動ローテーションを構成する

概要

Key Vault の自動暗号化キー ローテーションを使用すると、ユーザーは Key Vault を構成して、指定した頻度で新しいキー バージョンを自動的に生成できます。 ローテーションを構成するには、個別のキーごとに定義できるキー ローテーション ポリシーを使用できます。

暗号化のベスト プラクティスを満たすために、少なくとも 2 年ごとに暗号化キーをローテーションすることをお勧めします。

Key Vault のオブジェクトのバージョン管理方法については、Key Vault のオブジェクト、識別子、バージョン管理に関するページを参照してください。

Azure サービスとの統合

この機能により、カスタマー マネージド キー (CMK) が Azure Key Vault に格納された Azure サービスに対して、保存時の暗号化のエンドツーエンドのゼロタッチ ローテーションが有効になります。 Azure サービスに関する特定のドキュメントを参照して、そのサービスでエンドツーエンドのローテーションに対応しているかどうかを確認してください。

Azure のデータ暗号化の詳細については、次を参照してください。

価格

スケジュールされているキー ローテーションごとに追加のコストが発生します。 詳細については、Azure Key Vault の価格ページを参照してください。

必要なアクセス許可

Key Vault のキー ローテーション機能を使用するには、キー管理のアクセス許可が必要です。 "Key Vault Crypto Officer" ロールを割り当て、ローテーション ポリシーとオンデマンド ローテーションを管理できます。

Key Vault RBAC アクセス許可モデルを使用して Azure ロールを割り当てる方法について詳しくは、「キー、シークレット、証明書へのアクセスを管理するための Azure RBAC の使用」をご覧ください

Note

アクセス ポリシーのアクセス許可モデルを使用する場合は、キーのローテーション ポリシーを管理するために、"ローテーション"、"ローテーション ポリシーの設定"、"ローテーション ポリシーの取得" キーのアクセス許可を設定する必要があります。

キー ローテーション ポリシー

キー ローテーション ポリシーを使用すると、ユーザーはローテーション通知と Event Grid 通知を有効期限に近いスケジュールで設定できます。

キー ローテーション ポリシーの設定:

  • [有効期限]: キーの有効期限。 新しくローテーションされたキーに有効期限を設定するために使用されます。 現在のキーには影響しません。
  • [有効]/[無効]: キーのローテーションを有効または無効にするフラグ
  • [Rotation types](ローテーションの種類):
    • [Automatically renew at a given time after creation (default)](作成後指定された時間が経過したら、自動的に更新する (既定値))
    • [Automatically renew at a given time before expiry](有効期限の残りが指定された日数になったら、自動的に更新する)。 ローテーション ポリシーに [有効期限] が設定されており、キーに [有効期限日] が設定されている必要があります。
  • [ローテーション時間]: キーのローテーション間隔。最小値は作成から 7 日、有効期限から 7 日です
  • [通知時間]: イベント グリッド通知のキーの有効期限が近いことを知らせるイベントの間隔。 ローテーション ポリシーに [有効期限] が設定されており、キーに [有効期限日] が設定されている必要があります。

重要

キー ローテーションでは、新しいキー マテリアルを持つ既存のキーの新しいキー バージョンが生成されます。 ターゲット サービスでは、最新バージョンのキーに自動的に更新するために、バージョンレス キー URI を使用する必要があります。 データ暗号化ソリューションでは、サービスの中断を回避するために、バージョンありのキー URI を保存し、それと共に、暗号化/ラップ操作に使用された同じキー マテリアルを指すデータを暗号化解除/ラップ解除用として保存する必要があります。 現在、すべての Azure サービスはそのパターンに従ってデータを暗号化しています。

ローテーション ポリシーの構成

キー ローテーション ポリシーを構成する

キーの作成時にキーローテーション ポリシーを構成します。

キー作成中にローテーションを構成する

既存のキーに対してローテーション ポリシーを構成します。

既存のキーのローテーションを構成する

Azure CLI

キー ローテーション ポリシーをファイルに保存します。 キー ローテーション ポリシーの例:

{
  "lifetimeActions": [
    {
      "trigger": {
        "timeAfterCreate": "P18M",
        "timeBeforeExpiry": null
      },
      "action": {
        "type": "Rotate"
      }
    },
    {
      "trigger": {
        "timeBeforeExpiry": "P30D"
      },
      "action": {
        "type": "Notify"
      }
    }
  ],
  "attributes": {
    "expiryTime": "P2Y"
  }
}

Azure CLI az keyvault key rotation-policy update コマンドを使用し、以前に保存されたファイルを渡すキーにローテーション ポリシーを設定します。

az keyvault key rotation-policy update --vault-name <vault-name> --name <key-name> --value </path/to/policy.json>

Azure PowerShell

Azure Powershell Set-AzKeyVaultKeyRotationPolicy コマンドレットを使用し、ローテーション ポリシーを設定します。

Set-AzKeyVaultKeyRotationPolicy -VaultName <vault-name> -KeyName <key-name> -ExpiresIn (New-TimeSpan -Days 720) -KeyRotationLifetimeAction @{Action="Rotate";TimeAfterCreate= (New-TimeSpan -Days 540)}

オンデマンドでのローテーション

キー ローテーションは手動で呼び出すことができます。

ポータル

ローテーションを呼び出すには、[Rotate Now](今すぐローテーション) をクリックします。

オンデマンドでのローテーション

Azure CLI

Azure CLI az keyvault key rotate コマンドを使用してキーをローテーションします。

az keyvault key rotate --vault-name <vault-name> --name <key-name>

Azure PowerShell

Azure PowerShell Invoke-AzKeyVaultKeyRotation コマンドレットを使用します。

Invoke-AzKeyVaultKeyRotation -VaultName <vault-name> -Name <key-name>

キーの有効期限が近いことを知らせる通知を構成する

イベント グリッドのキーの有効期限が近いことを知らせるイベントの有効期限通知の構成。 ローカル HSM からキーをインポートする場合など、自動ローテーションを使用できない場合、キーの有効期限が近いことを知らせる通知を手動ローテーションのリマインダーとして、または Event Grid との統合によるカスタム自動ローテーションのトリガーとして構成できます。 有効期限の何日前、何か月前、何年前に有効期限が近いことを知らせるイベントをトリガーするかを構成できます。

通知を構成する

Key Vault のイベント グリッド通知について詳しくは、「Event Grid ソースとしての Azure Key Vault」をご覧ください

ARM テンプレートを使用してキー ローテーションを構成する

キー ローテーション ポリシーは、ARM テンプレートを使用して構成することもできます。

Note

管理プレーンを使用してキーをデプロイするには、Azure RBAC で構成された Key Vault に対する "Key Vault 共同作成者" ロールが必要です。

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "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."
            }
        },
        "rotatationTimeAfterCreate": {
            "defaultValue": "P18M",
            "type": "String",
            "metadata": {
                "description": "Time duration to trigger key rotation. i.e. P30D, P1M, P2Y"
            }
        },
        "expiryTime": {
            "defaultValue": "P2Y",
            "type": "String",
            "metadata": {
                "description": "The expiry time for new key version. i.e. P90D, P2M, P3Y"
            }
        },
        "notifyTime": {
            "defaultValue": "P30D",
            "type": "String",
            "metadata": {
                "description": "Near expiry Event Grid notification. i.e. P30D"
            }
        }

    },
    "resources": [
        {
            "type": "Microsoft.KeyVault/vaults/keys",
            "apiVersion": "2021-06-01-preview",
            "name": "[concat(parameters('vaultName'), '/', parameters('keyName'))]",
            "location": "[resourceGroup().location]",
            "properties": {
                "vaultName": "[parameters('vaultName')]",
                "kty": "RSA",
                "rotationPolicy": {
                    "lifetimeActions": [
                        {
                            "trigger": {
                                "timeAfterCreate": "[parameters('rotatationTimeAfterCreate')]",
                                "timeBeforeExpiry": ""
                            },
                            "action": {
                                "type": "Rotate"
                            }
                        },
                        {
                            "trigger": {
                                "timeBeforeExpiry": "[parameters('notifyTime')]"
                            },
                            "action": {
                                "type": "Notify"
                            }
                        }

                    ],
                    "attributes": {
                        "expiryTime": "[parameters('expiryTime')]"
                    }
                }
            }
        }
    ]
}

キー ローテーション ポリシーのガバナンスを設定する

Azure Policy サービスを使用すると、キーのライフサイクルを管理し、すべてのキーが指定した日数内にローテーションするように構成されていることを確認できます。

ポリシー定義を作成して割り当てる

  1. Policy リソースに移動します
  2. Azure Policy ページの左側にある [作成] の下の [割り当て] を選択します。
  3. ページの上部にある [Assign policy](ポリシーを割り当てる) を選択します。 このボタンをクリックすると [ポリシーの割り当て] ページが開きます。
  4. 次の情報を入力します。
  5. その他のフィールドに入力します。 ページの下部にある [前へ] ボタンと [次へ] ボタンをクリックしてタブ内を移動します。
  6. [確認と作成] を選択します
  7. [作成] を選択します。

組み込みポリシーを割り当てると、スキャンが完了するまで最大 24 時間かかる場合があります。 スキャンが完了すると、次のようなコンプライアンス結果を確認できます。

キーローテーションポリシー準拠のスクリーンショット。

リソース