このページでは、Confidential Google Kubernetes Engine ノードを使用して、ノードとワークロードで使用中のデータの暗号化を適用する方法を説明します。暗号化を適用すると、ワークロードのセキュリティを強化できます。
このページは、GKE にセキュリティ対策を実装するセキュリティ スペシャリストを対象としています。 Google Cloud のコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE Enterprise ユーザーロールとタスクをご覧ください。
このページを読む前に、使用中のデータのコンセプトを理解しておいてください。
Confidential GKE Node とは
ワークロードを暗号化するには、Confidential GKE Node を使用するか、Hyperdisk Balanced の情報保護モードを使用します。
Confidential GKE Node
Confidential GKE Node は Compute Engine Confidential VM を基盤として構築されていますが、これに使用される AMD Secure Encryption Virtualization(SEV)によって、VM の使用中メモリの内容が暗号化されます。使用中の暗号化は、エンドツーエンドの暗号化に関する 3 つの状態のうちの一つです。
Confidential GKE Node により、GKE がクラスタ コントロール プレーンに適用するセキュリティ対策が変更されることはありません。これらの対策については、コントロール プレーンのセキュリティをご覧ください。 Google Cloudプロジェクトのコントロール プレーンにどのユーザーがアクセスしているかを可視化するには、アクセスの透明性を使用します。
Confidential GKE Node を有効にするには、次の手順で操作します。
- 新しいクラスタを作成する
- ノードの自動プロビジョニングを使用してワークロードをデプロイする
- ノードプールを作成する
- 既存のノードプールを更新する
クラスタレベルの Confidential GKE Node の設定を変更するために、既存のクラスタを更新することはできません。
次の表に示すのは、Confidential GKE Node を有効にしたときに適用される GKE の動作です。
Confidential GKE Node の設定 | 構成方法 | 動作 |
---|---|---|
クラスタレベル | Autopilot モードまたは Standard モードの新しいクラスタを作成する | すべてのノードで Confidential GKE Node が使用されます。この操作は元に戻せません。個々のノードの設定をオーバーライドすることはできません。 GKE Autopilot クラスタでは、すべてのノードで Balanced コンピューティング クラスのデフォルトのマシンシリーズ(N2D)が自動的に使用されます。 |
ノードプール レベル |
|
GKE は、ノードプール内のノードのメモリの内容を暗号化します。これは、Confidential GKE Node がクラスタレベルで無効になっている場合にのみ可能です。 |
Hyperdisk Balanced の情報保護モード
Hyperdisk Balanced の情報保護モードをブートディスク ストレージに対して有効にすることもできます。これにより、追加のハードウェアベース エンクレーブでデータが暗号化されます。
Hyperdisk Balanced の情報保護モードは、次のいずれかを行うときに有効化できます。
- 新しいクラスタを作成する
- 新しいノードプールを作成する
既存のクラスタまたはノードプールを更新して Hyperdisk Balanced の情報保護モードの設定を変更することはできません。
次の表に示すのは、Hyperdisk Balanced の情報保護モードの設定をクラスタレベルまたはノードプール レベルで有効にしたときに適用される GKE の動作です。
Hyperdisk Balanced の情報保護モードの設定 | 設定方法 | 動作 |
---|---|---|
クラスタレベル | 新しいクラスタを作成する | クラスタのデフォルト ノードプールのみが、Hyperdisk Balanced の情報保護モードの設定を使用します。以下のことはできません。
|
ノードプール レベル | 新しいノードプールを作成する | 新しいノードプールについては、その作成時に Hyperdisk Balanced の情報保護モードの設定を構成できます。Hyperdisk Balanced の情報保護モードの設定を使用するように既存のノードプールを更新することはできません。 |
料金
次の料金が適用されます。
Autopilot:
- Confidential GKE Node を有効にすると、クラスタのデフォルトのマシンシリーズが N2D に変更されるため、Balanced コンピューティング クラスの料金に基づいて費用が発生します。料金の詳細については、Autopilot の料金をご覧ください。
- GKE Autopilot の料金のほか、Confidential GKE Node の料金が発生します。詳細については、Confidential VM の料金の「GKE Autopilot 上の Confidential GKE Node の料金」をご覧ください。
Standard: Confidential GKE Node をデプロイするための追加料金は、Compute Engine Confidential VMs の料金以外は発生しません。ただし、Confidential GKE Node は、起動時に生成するログデータが標準ノードよりも若干多くなることがあります。ログの料金については、Google Cloud Observability の料金をご覧ください。
可用性
Confidential GKE Node には、可用性について次の要件があります。
- ノードは、N2D インスタンス、C2D インスタンス、または C3D インスタンスをサポートするゾーンまたはリージョンに配置する。
- Autopilot クラスタは GKE バージョン 1.30.2 以降を使用する。
- Standard ノードプールでは、サポートされているマシンタイプと Container-Optimized OS ノードイメージのいずれかを使用する。
始める前に
始める前に、次の作業が完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
Autopilot で Confidential GKE Node を使用する
Autopilot クラスタ全体で Confidential GKE Node を有効にすると、すべてのノードが機密ノードになります。すべてのワークロードは機密ノードで実行されます。ワークロード マニフェストに変更を加える必要はありません。Confidential GKE Node を有効にすると、クラスタのデフォルトのマシンシリーズが N2D に変更されます。
新しい Autopilot クラスタで Confidential GKE Node を有効にする
次のコマンドを実行します。
gcloud container clusters create-auto CLUSTER_NAME \
--location=LOCATION \
--enable-confidential-nodes
次のように置き換えます。
CLUSTER_NAME
: Autopilot クラスタの名前。LOCATION
: クラスタの Compute Engine のロケーション。
クラスタはバージョン 1.30.2 以降を実行している必要があります。クラスタの作成時に特定のバージョンを設定するには、新しい Autopilot クラスタのバージョンとリリース チャンネルを設定するをご覧ください。
Standard モードで Confidential GKE Node を使用する
Confidential GKE Node は、Standard モードでクラスタレベルまたはノードプール レベルで有効にできます。
Standard クラスタで Confidential GKE Node を有効にする
gcloud CLI または Google Cloud コンソールを使用して、Confidential GKE Node が有効になっている新しいクラスタを作成できます。クラスタレベルで Confidential GKE Node を有効にすると、クラスタ内のすべてのノードが Confidential VMs になります。
ノードの自動プロビジョニングを使用してノードプールを自動的にスケーリングするクラスタで Confidential GKE Node を使用することもできます。
gcloud
新しいクラスタを作成するときに、gcloud CLI で --enable-confidential-nodes
オプションを指定します。
gcloud container clusters create CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--enable-confidential-nodes
次のように置き換えます。
コンソール
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
[add_box 作成] をクリックします。
[Standard] セクションで [構成] をクリックします。
ナビゲーション パネルの [クラスタ] の下の [セキュリティ] をクリックします。
[Confidential GKE Node を有効にする] チェックボックスをオンにします。
必要に応じてクラスタを構成します。
[作成] をクリックします。
クラスタの作成の詳細については、リージョン クラスタの作成をご覧ください。
Confidential GKE Node を使用してクラスタを作成すると、このクラスタ内で作成されたノードプールは機密ノードしか使用できません。Confidential GKE Node が有効になっているクラスタには、通常のノードプールを作成できません。また、クラスタレベルで Confidential GKE Node が有効になっている場合、個々のノードプールで Confidential GKE Node を無効にすることはできません。
Hyperdisk Balanced の情報保護モードの設定を指定して作成されたノードプールについては、そのノードプール内のノードのみが、指定した設定に従うよう制約されます。クラスタ内に作成される新しいノードプールについては、作成時に情報保護モードを設定する必要があります。
ノードプールで Confidential GKE Node を有効にする
クラスタレベルで Confidential GKE Node が無効になっている場合、特定のノードプールで Confidential GKE Node を有効にできます。
Hyperdisk Balanced の情報保護モードの設定は、ノードプールの作成をリクエストするときに指定する必要があります。
新しいノードプールを作成する
Confidential GKE Node が有効になっている新しいノードプールを作成するには、次のコマンドを実行します。
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--enable-confidential-nodes
次のように置き換えます。
- NODE_POOL_NAME: 新しいノードプールの名前。
- CLUSTER_NAME: クラスタの名前。
- MACHINE_TYPE: ノードプールのマシンタイプ。N2D、C2D、または C3D マシンタイプである必要があります。
既存のノードプールを更新する
Confidential GKE Node は、N2D、C2D、C3D マシンタイプを使用する既存のノードプールで有効にできます。次のコマンドを実行します。
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--enable-confidential-nodes
次のように置き換えます。
- NODE_POOL_NAME: ノードプールの名前。
- CLUSTER_NAME: クラスタの名前。
この変更を行うにはノードの再作成が必要になるため、実行中のワークロードが中断する可能性があります。この変更について詳しくは、メンテナンス ポリシーに準拠せずにノード アップグレード戦略を使用してノードを再作成する手動変更の表で対応する行をご覧ください。ノードの更新の詳細については、ノードの更新による中断の計画をご覧ください。
ワークロードを Confidential GKE Node ノードプールにのみ配置する
クラスタレベルで Confidential GKE Node を有効にすると、すべてのワークロードが Confidential ノードで実行されます。マニフェストを変更する必要はありません。ただし、特定のノードプールでのみ Confidential GKE Node を有効にする場合は、ワークロードを Confidential GKE Node を使用するノードプールでのみ実行する必要があることを宣言的に指定する必要があります。次の例のように、cloud.google.com/gke-confidential-nodes
ノードセレクタを使用します。
apiVersion: v1
kind: Pod
spec:
containers:
- name: my-confidential-app
image: us-docker.pkg.dev/myproject/myrepo/my-confidential-app
nodeSelector:
cloud.google.com/gke-confidential-nodes: "true"
Confidential GKE Node が有効になっていることを確認する
クラスタまたはノードが Confidential GKE Node を使用しているかどうかを確認するには、クラスタまたはノードを調査します。
Autopilot モードまたは Standard モードのクラスタの場合
Autopilot クラスタまたは Standard クラスタが Confidential GKE Node を使用しているかどうかは、gcloud CLI またはGoogle Cloud コンソールで確認できます。
gcloud
クラスタの説明を表示します。
gcloud container clusters describe CLUSTER_NAME
Confidential GKE Node が有効になっている場合、コマンドの出力に次の行が含まれます。
confidentialNodes:
enabled: true
コンソール
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
検査するクラスタの名前をクリックします。
[セキュリティ] の [Confidential GKE Node] フィールドで、Confidential GKE Node が [有効] になっていることを確認します。
Autopilot モードまたは Standard モードのノードの場合
特定の Autopilot ノードまたは Standard ノードが Confidential GKE Node を使用しているかどうかを確認する手順は次のとおりです。
ノード名を確認します。
kubectl get nodes
ノードの詳細を確認します。
kubectl describe NODE_NAME
NODE_NAME
は調査するノードの名前に置き換えます。
Confidential GKE Node が有効になっている場合、出力は次のようになります。
# lines omitted for clarity
cloud.google.com/gke-confidential-nodes=true
Standard モードのノードプールの場合
ノードプールが Confidential GKE Node を使用しているかどうかを確認するには、次のコマンドを実行します。
gcloud container node-pools describe NODE_POOL_NAME \
--cluster=CLUSTER_NAME
Confidential GKE Node が有効化されている場合、出力は次のようになります。
confidentialNodes:
enabled: true
Hyperdisk Balanced の情報保護モードの設定が有効化されている場合、出力は次のようになります。
enableConfidentialStorage: true
個々の Standard モードノードの場合
Standard クラスタ内の特定のノードの機密性を検証するには、次の操作を行います。
組織のポリシーの制約を設定する
組織のポリシーの制約を定義して、組織全体に作成された VM リソースすべてが Confidential VMs インスタンスであることを保証できます。GKE の場合、[Confidential Computing 以外を制限する] 制約をカスタマイズして、すべての新しいクラスタを Confidential GKE Node を有効にして作成するように要求できます。組織のポリシーの制約を適用するときは、拒否リストに container.googleapis.com
API サービスの名前を追加します。次に例を示します。
gcloud resource-manager org-policies deny \
constraints/compute.restrictNonConfidentialComputing compute.googleapis.com container.googleapis.com \
--project=PROJECT_ID
PROJECT_ID は、実際のプロジェクト ID に置き換えます。
Hyperdisk Balanced の情報保護モード対応の PersistentVolume を作成する
スループットまたは IOPS の許容値については、Hyperdisk ボリュームのパフォーマンス レベルを計画するをご覧ください。
次の例では、Hyperdisk のタイプごとに Hyperdisk Balanced の情報保護モードの StorageClass を作成する方法を示します。
Hyperdisk Balanced
次のマニフェストを
confidential-hdb-example-class.yaml
という名前のファイルに保存します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: balanced-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-balanced provisioned-throughput-on-create: "250Mi" provisioned-iops-on-create: "7000" enable-confidential-storage: true disk-encryption-kms-key: "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/HSM_KEY_NAME"
次のように置き換えます。
KMS_PROJECT_ID
: Cloud KMS 鍵を所有するプロジェクトREGION
: ディスクが配置されるリージョンKEY_RING
: 鍵を含むキーリングの名前HSM_KEY_NAME
: ディスクの暗号化に使用される HSM 鍵の名前
StorageClass を作成します。
kubectl create -f hdb-example-class.yaml
Hyperdisk Balanced ボリュームの情報保護モードを使用する GKE 用の Hyperdisk Persistent Volume Claim を作成します。
クラスタで使用可能な StorageClass の名前を確認するには、次のコマンドを実行します。
kubectl get sc
制限事項
Confidential GKE Node には、次の制限事項があります。
- Confidential GKE Node には、Compute Engine Confidential VM インスタンスの制限がすべて適用されます。
- C2D マシンタイプの Confidential GKE Node の場合、GKE バージョン 1.24 以降でのみノードの自動プロビジョニングを使用できます。
- コントロール プレーンが GKE バージョン 1.22 以降を実行している場合にのみ、Confidential GKE Node は永続ディスクによってバックアップされる PersistentVolumes をサポートします。手順については、Compute Engine 永続ディスクの CSI ドライバを使用をご覧ください。
- Confidential GKE Node は GPU に対応していません。
- Confidential GKE Node は、単一テナントノードに対応していません。
- Confidential GKE Node は、ローカル SSD でのエフェメラル ストレージの使用のみをサポートしています。一般的なローカル SSD の使用はサポートしていません。
- Container-Optimized OS ノードのみがサポートされています。Ubuntu ノードと Windows ノードはサポートされていません。
Confidential GKE Node を無効にする
Confidential GKE Node を無効にできるのは、ノードプールが Standard モードの場合のみです。クラスタレベルで Confidential GKE Node を使用するクラスタにノードプールがある場合、ノードプール レベルでこの機能を無効にすることはできません。
- 制限事項のセクションで、Hyperdisk Balanced の情報保護モードに関する追加情報をご確認ください。
- Hyperdisk Balanced の情報保護モードがサポートされるのは Confidential GKE Node 上のみです。
ライブ マイグレーションの制限
一部の Compute Engine Confidential VM マシンタイプはライブ マイグレーションをサポートしています。これにより、ホスト メンテナンス イベントによるワークロードの中断を最小限に抑えることができます。ライブ マイグレーションが行われる GKE バージョンは次のとおりです。
- 1.27.10-gke.1218000 以降
- 1.28.6-gke.1393000 以降
- 1.29.1-gke.1621000 以降
ライブ マイグレーションの追加時にノードプールがサポート対象のバージョンをすでに実行している場合は、同じバージョンまたは別のサポート対象バージョンにノードプールを手動でアップグレードします。ノードをアップグレードすると、ノードの再作成がトリガーされ、新しいノードでライブ マイグレーションが有効になります。
ライブ マイグレーションに対応している Compute Engine マシンタイプの詳細については、サポートされている構成をご覧ください。
ライブ マイグレーションをサポートしていないノードでホスト メンテナンス イベントが発生すると、ノードは NotReady
状態になります。ノードが再び準備状態になるまで、Pod の実行は中断されます。メンテナンスに 5 分以上かかる場合、GKE は他のノードで Pod の再作成を試みることがあります。
Confidential GKE Node を無効にする
Confidential GKE Node を無効にできるのは、Confidential GKE Node を有効にしたノードプールのみです。Confidential GKE Node を使用してクラスタを作成した場合、この機能を無効にすることはできません。次のコマンドを実行して、ノードプールで Confidential GKE Node を無効にします。
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--no-enable-confidential-nodes
この変更を行うにはノードの再作成が必要になるため、実行中のワークロードが中断する可能性があります。この変更について詳しくは、メンテナンス ポリシーに準拠せずにノード アップグレード戦略を使用してノードを再作成する手動変更の表で対応する行をご覧ください。ノードの更新の詳細については、ノードの更新による中断の計画をご覧ください。
次のステップ
- Confidential VMs の詳細を確認する
- Google Cloud における保存データの暗号化について詳細を確認する
- Google Cloud における転送データの暗号化について詳細を確認する
- 顧客管理の暗号鍵(CMEK)について確認する
- ワークロードが Confidential VMs で実行されていることをリモートで証明する方法を確認する