このドキュメントでは、ルート鍵をローテーションする方法について説明します。ルート鍵が不正使用された場合、またはセキュリティを強化するためにルート鍵を定期的にローテーションする場合は、RotationJob リソースを使用して鍵を新しいルート鍵にローテーションできます。
ルート鍵をローテーションすると、新しいルート鍵が作成されます。この鍵が主キーになり、すべての非ルート鍵をラップします。ルート鍵を削除することはできません。ルート鍵を置き換えるには、ローテーションを行うしかありません。ルートキーの詳細については、ルートキーのタイプをご覧ください。
KMS API の詳細については、KMS API の概要をご覧ください。API の定義全体については、鍵管理サービス KRM API をご覧ください。
始める前に
ルート鍵をローテーションする前に、必要な権限を取得して環境を準備する必要があります。
IAM ロールをリクエストする
鍵をローテーションするには、IAM 組織管理者に連絡して KMS ローテーション ジョブ管理者(kms-rotationjob-admin)ロールをリクエストしてください。
環境を準備する
kubectlアクセスを構成する kubeconfig ファイルを生成します。
ルート鍵をローテーションする
ルート鍵をローテーションするには、まず、使用中のルート鍵のリソース名を特定する必要があります。この情報は、プロジェクト内の AEADKey リソースを調べることで確認できます。これらの鍵はすべて同じルート鍵で保護されているためです。
新しいルート鍵を作成し、鍵をローテーションします。
プロジェクト内の
AEADKeyリソースを一覧表示します。kubectl get AEADKey -n PROJECTPROJECTは、プロジェクトの名前空間に置き換えます。出力から、任意の
AEADKeyの名前をメモします。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-rootYAML ファイルを作成し、
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: 前の手順で取得した出力
YAML ファイルの内容を KMS に適用します。
kubectl apply -f FILENAME.yamlFILENAME は、YAML ファイルの名前に置き換えます。
コマンドを実行すると、KMS は新しいルート鍵を作成し、新しいルート鍵ですべての鍵をローテーションします。
ルート鍵のローテーションが完了したことを確認するには、次のコマンドを実行します。
kubectl get rotationjobs ROTATION_NAMEROTATION_NAME は、ローテーション ジョブの名前に置き換えます。
コマンドを実行すると、成功した場合はローテーション ジョブのステータスが
Completedとして表示されます。