ルート鍵をローテーションする

このドキュメントでは、ルート鍵をローテーションする方法について説明します。ルート鍵が不正使用された場合、またはセキュリティを強化するためにルート鍵を定期的にローテーションする場合は、RotationJob リソースを使用して鍵を新しいルート鍵にローテーションできます。

ルート鍵をローテーションすると、新しいルート鍵が作成されます。この鍵が主キーになり、すべての非ルート鍵をラップします。ルート鍵を削除することはできません。ルート鍵を置き換えるには、ローテーションを行うしかありません。ルートキーの詳細については、ルートキーのタイプをご覧ください。

KMS API の詳細については、KMS API の概要をご覧ください。API の定義全体については、鍵管理サービス KRM API をご覧ください。

始める前に

ルート鍵をローテーションする前に、必要な権限を取得して環境を準備する必要があります。

IAM ロールをリクエストする

鍵をローテーションするには、IAM 組織管理者に連絡して KMS ローテーション ジョブ管理者(kms-rotationjob-admin)ロールをリクエストしてください。

環境を準備する

ルート鍵をローテーションする

ルート鍵をローテーションするには、まず、使用中のルート鍵のリソース名を特定する必要があります。この情報は、プロジェクト内の AEADKey リソースを調べることで確認できます。これらの鍵はすべて同じルート鍵で保護されているためです。

新しいルート鍵を作成し、鍵をローテーションします。

  1. プロジェクト内の AEADKey リソースを一覧表示します。

    kubectl get AEADKey -n PROJECT
    

    PROJECT は、プロジェクトの名前空間に置き換えます。

    出力から、任意の AEADKey の名前をメモします。

  2. AEADKey から ROOT_KEY_RESOURCE_NAME を取得します。次のコマンドは、RotationJob リソースに必要なルート鍵識別子を抽出して再フォーマットします。

    kubectl describe aeadkey KEY_NAME -n PROJECT | grep "Root Key ID:" | awk '{print $4}' | awk -F/ '{print "namespaces/" $1 "/secrets/" $2}'
    

    次のように置き換えます。

    • KEY_NAME: プロジェクト内の AEADKey の名前
    • PROJECT: プロジェクトの名前空間の名前

    出力は次のようになります。

    namespaces/kms-system/secrets/kms-key-local-root
    
  3. YAML ファイルを作成し、RotationJob リソースと次の内容を追加します。

    apiVersion: "kms.gdc.goog/v1"
    kind: RotationJob
    metadata:
      name: ROTATION_NAME
    spec:
      rootKeyResourceName: ROOT_KEY_RESOURCE_NAME
    

    次のように置き換えます。

    • ROTATION_NAME: ローテーション ジョブの名前(例: rotate-job1)。
    • ROOT_KEY_RESOURCE_NAME: 前の手順で取得した出力
  4. YAML ファイルの内容を KMS に適用します。

    kubectl apply -f FILENAME.yaml
    

    FILENAME は、YAML ファイルの名前に置き換えます。

    コマンドを実行すると、KMS は新しいルート鍵を作成し、新しいルート鍵ですべての鍵をローテーションします。

  5. ルート鍵のローテーションが完了したことを確認するには、次のコマンドを実行します。

    kubectl get rotationjobs ROTATION_NAME
    

    ROTATION_NAME は、ローテーション ジョブの名前に置き換えます。

    コマンドを実行すると、成功した場合はローテーション ジョブのステータスが Completed として表示されます。