このページでは、GKE コントロール プレーン認証局用に構成した etcd とコントロール プレーンのブートディスク暗号鍵をローテーションする方法について説明します。このページは、クラスタ管理者とセキュリティ エンジニアを対象としています。
このページを読む前に、次の GKE コントロール プレーン権限のコンセプトを理解しておいてください。
鍵のローテーションを計画する
このページでは、コントロール プレーンで次の認証情報コンポーネントをローテーションする方法について説明します。
- etcd とコントロール プレーンのブートディスクの暗号鍵。
- 障害復旧に Google Cloud が使用する etcd 内部バックアップの暗号鍵。
GKE control plane authority で構成した顧客管理の認証局(CA)とサービス アカウントの署名鍵をローテーションすることもできます。詳細については、顧客管理のコントロール プレーンの CA と署名鍵をローテーションするをご覧ください。
Cloud Key Management Service(Cloud KMS)の鍵は期限切れになりません。組織で鍵のローテーションに関するセキュリティ要件がある場合は、鍵を手動でローテーションします。実行中のワークロードの中断を最小限に抑えるため、これらの鍵の自動ローテーションは構成しないでください。
コントロール プレーンのブートディスクと etcd の暗号鍵をローテーションすると、GKE は新しい鍵を使用して暗号化された新しいディスクを作成します。リージョン クラスタの場合、コントロール プレーンがレプリケートされるため、このオペレーションにダウンタイムはありません。ゾーンクラスタの場合、新しいディスクが使用可能になるまでコントロール プレーンが使用できなくなります。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
コントロール プレーンのブートディスクと etcd の暗号化を使用する既存のクラスタがある
次の Google Cloud プロジェクトのプロジェクト ID を特定します。
- 鍵プロジェクト: Cloud KMS リソースを含むプロジェクト。
- クラスタ プロジェクト: GKE クラスタを含むプロジェクト。
このページの検証タスクを行うには、Cloud Key Management Service(KMS)API で
DATA_READ
データアクセス監査ログが有効になっていることを確認します。詳細については、データアクセス監査ログを有効にするをご覧ください。
必要なロールと権限
顧客管理の CA と鍵をローテーションするために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
鍵または鍵バージョンを管理する: 鍵プロジェクトに対する Cloud KMS 管理者 (
roles/cloudkms.admin
) -
新しい鍵を使用するようにクラスタを構成する: クラスタ プロジェクトに対する Kubernetes Engine クラスタ管理者 (
roles/container.clusterAdmin
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
制限事項
クラスタを更新して既存の鍵の新しいバージョンを使用することはできますが、これらの暗号オペレーションにまったく新しい鍵を使用するようにクラスタを更新することはできません。
GKE サービス エージェントに IAM ロールを付与する
ブートディスクと etcd の暗号鍵をローテーションするには、鍵プロジェクトの暗号鍵に対する Kubernetes Engine KMS 暗号鍵ユーザー(roles/container.cloudKmsKeyUser
)ロールを、クラスタ プロジェクトの GKE サービス エージェントに付与します。
gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \
--keyring=KEYRING_NAME \
--location=LOCATION \
--member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
--role=roles/container.cloudKmsKeyUser \
--project=KEY_PROJECT_ID
次のように置き換えます。
KCP_DISK_KEY_NAME
: コントロール プレーンのブートディスクと etcd ディスクの暗号鍵の名前。KEYRING_NAME
: 鍵を含むキーリングの名前。LOCATION
: キーリングの Google Cloud ロケーション。これは、クラスタのロケーションと同じにする必要があります。リージョンの一覧については、Cloud KMS のロケーションの表で「リージョン」でフィルタしてください。CLUSTER_PROJECT_NUMBER
: クラスタ プロジェクトの数値のプロジェクト番号。KEY_PROJECT_ID
: 鍵プロジェクトのプロジェクト ID。
etcd とコントロール プレーンのブートディスクの鍵をローテーションする
ブートディスクと etcd 暗号鍵の新しいプライマリ鍵バージョンを作成します。
gcloud kms keys versions create \ --key=KCP_DISK_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --primary
変更がプロジェクトに反映されるまでに 10 分ほどかかることがあります。
クラスタ コントロール プレーンの現在のパッチ バージョンを確認します。
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format='value(currentMasterVersion)'
次のように置き換えます。
CLUSTER_NAME
: GKE クラスタの名前。LOCATION
: GKE クラスタ コントロール プレーンのロケーション(us-central1
など)。
クラスタ コントロール プレーンを、すでに使用しているバージョンにアップグレードします。
gcloud container clusters upgrade CLUSTER_NAME \ --master \ --location=LOCATION \ --cluster-version=CONTROL_PLANE_VERSION \ --project=CLUSTER_PROJECT_ID
次のように置き換えます。
CONTROL_PLANE_VERSION
: 前の手順の出力で取得したクラスタ コントロール プレーンのバージョン。CLUSTER_PROJECT_ID
: クラスタ プロジェクトのプロジェクト ID。
コントロール プレーンのアップグレード オペレーションが完了すると、クラスタは新しい鍵バージョンを使用して、コントロール プレーンのブートディスクと etcd ディスクを暗号化します。
etcd 内部バックアップ暗号鍵をローテーションする
このセクションでは、障害復旧に使用する etcd 内部バックアップの暗号鍵をローテーションする方法について説明します。 Google Cloud この鍵の自動ローテーションを構成できますが、手動ローテーションを行うことをおすすめします。鍵をローテーションすると、クラスタは新しい鍵バージョンを使用して新しい etcd 内部バックアップを暗号化します。
etcd 内部バックアップでは、プライマリ鍵バージョンが使用され、次の間隔で実行されます。
- ゾーンクラスタの場合は 30 分ごと。
- Autopilot クラスタとリージョン Standard クラスタの場合は 10 分ごと。
鍵をローテーションした後、以前の鍵バージョンをすぐに無効にしたり破棄したりしないでください。GKE が新しい鍵バージョンを使用する新しい etcd 内部バックアップを作成するのに十分な時間が経過するまで待ちます。
etcd 内部バックアップ暗号鍵の新しいプライマリ鍵バージョンを作成します。
gcloud kms keys versions create \ --key=ETCD_BACKUP_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --primary
次のように置き換えます。
ETCD_BACKUP_KEY_NAME
: etcd 内部バックアップ暗号鍵の名前。KEYRING_NAME
: 鍵を含むキーリングの名前。LOCATION
: キーリングの Google Cloud ロケーション。これは、クラスタのロケーションと同じにする必要があります。リージョンの一覧については、Cloud KMS のロケーションの表で「リージョン」でフィルタしてください。KEY_PROJECT_ID
: 鍵プロジェクトのプロジェクト ID。