鍵のローテーション

このトピックでは、鍵を自動または手動でローテーションする方法について説明します。鍵のローテーションの詳細については、鍵のローテーションをご覧ください。

必要なロール

鍵をローテーションするために必要な権限を取得するには、鍵に対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、鍵のローテーションに必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

鍵をローテーションするには、次の権限が必要です。

  • メインの鍵バージョンを変更する: cloudkms.cryptoKeys.update
  • 自動ローテーションを変更または無効にする: cloudkms.cryptoKeys.update
  • 新しい鍵バージョンを作成する: cloudkms.cryptoKeyVersions.create
  • 古い鍵バージョンを無効にする: cloudkms.cryptoKeyVersions.update
  • データを再暗号化する:
    • cloudkms.cryptoKeyVersions.useToDecrypt
    • cloudkms.cryptoKeyVersions.useToEncrypt

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

これらの権限のすべてを含むカスタムロールを持つ 1 人のユーザーが、鍵をローテーションし、独自にデータを再暗号化できます。Cloud KMS 管理者のロールを持つユーザーと Cloud KMS 暗号鍵の暗号化/復号のロールを持つユーザーは、協力して鍵のローテーションとデータの再暗号化を行うことができます。ロールを割り当てるときは、最小権限の原則に従います。詳細については、権限とロールをご覧ください。

鍵をローテーションする場合、以前の鍵バージョンで暗号化されたデータは自動的に再暗号化されることはありません。詳しくは、復号と再暗号化をご覧ください。鍵をローテーションしても、既存の鍵バージョンが自動的に無効になったり、破棄されたりすることはありません。不要になった鍵バージョンを破棄すると、費用を削減できます。

自動ローテーションを構成する

カスタム ローテーション スケジュールで新しい鍵を作成する

新しい鍵の作成時に自動ローテーションを構成するには:

コンソール

Google Cloud コンソールを使用して鍵を作成すると、Cloud KMS は自動的にローテーション期間と次のローテーション時間を設定します。デフォルト値を使用するか、別の値を指定できます。

異なるローテーション期間と開始時間を指定する場合は、鍵の作成時に次の操作を行ってから、[作成] ボタンをクリックします。

  1. [鍵のローテーション期間] で、オプションを選択します。

  2. [開始日] で、最初の自動ローテーションを行う日付を選択します。[開始日] をデフォルト値のままにして、鍵を作成してから 1 回の鍵のローテーション期間が経過した後に最初の自動ローテーションを開始できます。

gcloud

コマンドラインで Cloud KMS を使用するには、まず Google Cloud CLI の最新バージョンをインストールまたはアップグレードします

gcloud kms keys create KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --purpose "encryption" \
    --rotation-period ROTATION_PERIOD \
    --next-rotation-time NEXT_ROTATION_TIME

以下を置き換えます。

  • KEY_NAME: 鍵の名前
  • KEY_RING: 鍵を含むキーリングの名前。
  • LOCATION: キーリングの Cloud KMS のロケーション
  • ROTATION_PERIOD: 鍵をローテーションする間隔。たとえば、30d は 30 日ごとに鍵をローテーションします。ローテーション期間は 1 日~100 年にする必要があります。詳細については、CryptoKey.rotationPeriod をご覧ください。
  • NEXT_ROTATION_TIME: 最初のローテーションが完了する時点のタイムスタンプ(例: 2023-01-01T01:02:03)。--next-rotation-time を省略すると、最初のローテーションをコマンドの実行時から 1 回のローテーション期間にスケジュール設定できます。詳細については、CryptoKey.nextRotationTime をご覧ください。

すべてのフラグと有効な値については、--help フラグを指定してコマンドを実行してください。

C#

このコードを実行するには、まず C# 開発環境を設定し、Cloud KMS C# SDK をインストールします。


using Google.Cloud.Kms.V1;
using Google.Protobuf.WellKnownTypes;
using System;

public class CreateKeyRotationScheduleSample
{
    public CryptoKey CreateKeyRotationSchedule(
      string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring",
      string id = "my-key-with-rotation-schedule")
    {
        // Create the client.
        KeyManagementServiceClient client = KeyManagementServiceClient.Create();

        // Build the parent key ring name.
        KeyRingName keyRingName = new KeyRingName(projectId, locationId, keyRingId);

        // Build the key.
        CryptoKey key = new CryptoKey
        {
            Purpose = CryptoKey.Types.CryptoKeyPurpose.EncryptDecrypt,
            VersionTemplate = new CryptoKeyVersionTemplate
            {
                Algorithm = CryptoKeyVersion.Types.CryptoKeyVersionAlgorithm.GoogleSymmetricEncryption,
            },

            // Rotate the key every 30 days.
            RotationPeriod =