このページでは、Shielded GKE Nodes 機能の使用方法について説明します。シールドされた GKE ノードは、強固で検証可能なノード ID と整合性を備え、Google Kubernetes Engine(GKE)ノードのセキュリティを強化します。
GKE Autopilot クラスタでは、シールドされた GKE ノード機能はデフォルトで有効になっており、オーバーライドできません。GKE Standard クラスタの場合、シールドされた GKE ノード機能はデフォルトで有効になっていますが、オーバーライドできます。
シールドされた GKE ノードの概要
シールドされた GKE ノードは、Compute Engine の Shielded VM 上に構築されます。シールドされた GKE ノードがなければ、攻撃者は Pod の脆弱性を悪用し、ブートストラップ認証情報を抜き取ってクラスタ内のノードになりすますことで、クラスタのシークレットにアクセスできるようになります。シールドされた GKE ノードを有効にすると、GKE コントロール プレーンは暗号を使用して、次の内容を確認します。
- クラスタ内のすべてのノードが、Google のデータセンター内で実行されている仮想マシンであること。
- すべてのノードが、クラスタにプロビジョニングされたマネージド インスタンス グループ(MIG)の一部であること。
- kubelet が、それが実行されているノードの証明書をプロビジョニングしていること。
これにより、攻撃者がノードのブートストラップ認証情報を抜き取った場合でも、攻撃者がクラスタ内のノードになりかわることを制限できます。
GKE クラスタのコントロール プレーン ノードは、クラスタでこの機能を無効にしても、常にシールドされた GKE ノードを使用します。シールドされた GKE ノードを有効または無効にすると、ワークロードを実行するワーカーノードがこの機能を使用できるかどうかにのみ影響します。
料金
シールドされた GKE ノードの実行に追加の費用はかかりません。ただし、シールドされた GKE ノードは標準ノードと比較して起動時に生成されるログが約 0.5 KB 多くなります。詳しくは、Cloud Logging の料金ページをご覧ください。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
コマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
新しいクラスタで Shielded GKE Nodes を有効にする
gcloud CLI または Google Cloud コンソールを使用して、Shielded GKE Nodes が有効になっている新しいクラスタを作成できます。
gcloud
新しいクラスタを作成する際に、--enable-shielded-nodes
オプションを次のように指定します。
gcloud container clusters create CLUSTER_NAME \
--enable-shielded-nodes
コンソール
Google Cloud コンソールで、[Kubernetes クラスタを作成する] ページに移動します。
ナビゲーション パネルの [クラスタ] の下の [セキュリティ] をクリックします。
[シールドされた GKE ノードを有効にする] チェックボックスをオンにします。
必要に応じてクラスタを構成します。
[作成] をクリックします。
クラスタの作成の詳細については、クラスタの作成をご覧ください。
既存のクラスタで Shielded GKE Nodes を有効にする
既存のクラスタで Shielded GKE Nodes を有効にするには、Google Cloud CLI または Google Cloud コンソールを使用します。
Shielded GKE Nodes をGKE で有効にする方法
Shielded GKE Nodes を有効にすると、ワーカーノードがシールドされた VM として再作成されます。ダウンタイムを最小限に抑えるために、ローリング方式でクラスタノードが再作成されます。
Shielded GKE Nodes を有効にすると、GKE は次の手順でクラスタを更新します。
- GKE は、メンテナンスの可用性を無視して、コントロール プレーンをすぐに再作成します。
- GKE は、メンテナンスの可用性を考慮して、ワーカーノードを Shielded VM として再作成します。GKE はサージ アップグレードを使用して、各ノードプールを更新します。これはリソースの可用性によって異なります。ノードの自動アップグレードを無効にしても、この変更は回避されません。
この変更について詳しくは、ノード アップグレード戦略に従ってノードを再作成し、メンテナンス ポリシーを遵守する手動変更の表で対応する行をご覧ください。ノードの更新の詳細については、ノードの更新の中断を計画するをご覧ください。
Shielded GKE Nodes を有効にする
gcloud
クラスタを更新するときには、次のように --enable-shielded-nodes
オプションを指定します。
gcloud container clusters update CLUSTER_NAME \
--enable-shielded-nodes
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[セキュリティ] の [Shielded GKE Nodes] フィールドで、edit [シールドされた GKE ノードを編集] をクリックします。
[シールドされた GKE ノードを有効にする] チェックボックスをオンにします。
[変更を保存] をクリックします。
Shielded GKE Nodes が有効になっていることを確認する
クラスタが Shielded GKE Nodes を使用していることを確認するには、Google Cloud CLI または Google Cloud コンソールを使用します。
gcloud
クラスタの説明を表示します。
gcloud container clusters describe CLUSTER_NAME
シールドされた GKE ノードが有効化されていると、コマンドの出力に次の行が含まれます。
shieldedNodes:
enabled: true
Console
クラスタが Shielded GKE Nodes を使用していることを確認するには:
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
検査するクラスタの名前をクリックします。
[セキュリティ] の [シールドされた GKE ノード] フィールドで、シールドされた GKE ノードが [有効] になっていることを確認します。
ノードの基盤となる Shielded VM の整合性のモニタリングもできます。手順については、Shielded VM インスタンス上の整合性モニタリングをご覧ください。
Shielded GKE Nodes を無効にする
Shielded GKE Nodes は、Google Cloud CLI または Google Cloud コンソールを使用して無効にできます。
GKE が Shielded GKE Nodes を無効にする方法
Shielded GKE Nodes を無効にすると、GKE は次の手順でクラスタを更新します。
- GKE は、メンテナンスの可用性を無視して、コントロール プレーンをすぐに再作成します。
- GKE は、メンテナンスの可用性を考慮して、ワーカーノードをシールドなし VM として再作成します。GKE はサージ アップグレードを使用して、各ノードプールを更新します。これはリソースの可用性によって異なります。ノードの自動アップグレードを無効にしても、この変更は回避されません。
この変更について詳しくは、ノード アップグレード戦略に従ってノードを再作成し、メンテナンス ポリシーを遵守する手動変更の表で対応する行をご覧ください。ノードの更新の詳細については、ノードの更新の中断を計画するをご覧ください。
Shielded GKE Nodes を無効にする
gcloud
クラスタを更新するときには、次のように --no-enable-shielded-nodes
オプションを指定します。
gcloud container clusters update CLUSTER_NAME \
--no-enable-shielded-nodes
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[セキュリティ] の [Shielded GKE Nodes] フィールドで、edit [シールドされた GKE ノードを編集] をクリックします。
[シールドされた GKE ノードを有効にする] チェックボックスをオフにします。
[変更を保存] をクリックします。
ノードの整合性
必要に応じて、ノードプールでノードの整合性チェックを構成することで、ノードのルートキットとブートキットに対する保護を強化できます。シールドされた GKE ノード、セキュアブート、および整合性モニタリングは、個別に有効または無効にできる独立した機能です。
セキュアブート
セキュアブートは、ブートプロセス中にノード VM のブート コンポーネント(カーネルやブートローダーなど)を認証するノードプールの設定です。セキュアブートは、ノードプールでデフォルトで無効になっています。
ノードプールでセキュアブートを有効にする前に、次の点を考慮してください。
- Ubuntu ノードでセキュアブートを有効にすると、未署名のサードパーティ製カーネル モジュールがノードで読み込まれなくなります。
- Container-Optimized OS ノードでセキュアブートを有効にしても、カーネル モジュールの読み込みには影響しません。これは、Container-Optimized OS ノードイメージが、セキュアブートとは別に、サードパーティのカーネル モジュールを読み込む機能を制御するためです。
セキュアブートを有効にするには、Google Cloud CLI または Google Cloud コンソールを使用します。
gcloud
クラスタを作成するときにセキュアブートを有効にするには、次のコマンドを実行します。
gcloud container clusters create CLUSTER_NAME \
--shielded-secure-boot
ノードプールを作成するときにセキュアブートを有効にするには:
gcloud container node-pools create POOL_NAME \
--shielded-secure-boot
セキュアブートはデフォルトで無効になっています。クラスタまたはノードプールを作成するときに、--no-shielded-secure-boot
オプションを使用してセキュアブートを明示的に無効化できます。
Console
ノードプールを作成するときにセキュアブートを有効にするには:
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
変更するクラスタの名前をクリックします。
add_box [ノードプールを追加] をクリックします。
ナビゲーション メニューから [セキュリティ] をクリックします。
[シールド オプション] で [セキュアブートを有効にする] チェックボックスをオンにします。
[作成] をクリックします。
整合性モニタリング
整合性モニタリングは、ノードプール設定の 1 つで、GKE ではデフォルトで有効になっています。整合性モニタリングを無効にするには、Google Cloud CLI または Google Cloud コンソールを使用します。
gcloud
ノードプールの作成時にシステム コンポーネントの整合性モニタリングを無効にするには、次のコマンドを実行します。
gcloud container node-pools create POOL_NAME \
--no-shielded-integrity-monitoring
整合性モニタリングはデフォルトで有効になっています。ノードプールを作成するときに、--shielded-integrity-monitoring
オプションを使用して明示的に有効にすることができます。
コンソール
ノードプールの作成時に整合性モニタリングを無効にするには:
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
変更するクラスタの名前をクリックします。
add_box [ノードプールを追加] をクリックします。
ナビゲーション パネルで [セキュリティ] をクリックします。
[シールド オプション] で、[整合性のモニタリングを有効にする] チェックボックスをオフにします。