このページでは、シールドされた GKE ノード機能の使用方法について説明します。シールドされた 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
を実行して最新のバージョンを取得する。
新しいクラスタでシールドされた GKE ノードを有効にする
gcloud CLI または Google Cloud コンソールを使用して、シールドされた GKE ノードが有効になった新しいクラスタを作成できます。
gcloud
新しいクラスタを作成する際に、--enable-shielded-nodes
オプションを次のように指定します。
gcloud container clusters create CLUSTER_NAME \
--enable-shielded-nodes
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
[add_box 作成] をクリックします。
ナビゲーション パネルの [クラスタ] の下の [セキュリティ] をクリックします。
[シールドされた GKE ノード] チェックボックスをオンにします。
必要に応じてクラスタを構成します。
[作成] をクリックします。
クラスタの作成の詳細については、クラスタの作成をご覧ください。
既存のクラスタでシールドされた GKE ノードを有効にする
Google Cloud CLI または Google Cloud コンソールを使用すると、既存のクラスタでシールドされた GKE ノードを有効にできます。
シールドされた GKE ノードを有効にすると、ワーカーノードがシールドされた VM として再作成されます。ダウンタイムを最小限に抑えるために、ローリング方式でクラスタノードが再作成されます。
gcloud
クラスタを更新するときには、次のように --enable-shielded-nodes
オプションを指定します。
gcloud container clusters update CLUSTER_NAME \
--enable-shielded-nodes
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[セキュリティ] の [シールドされた GKE ノード] フィールドで、edit [シールドされた GKE ノードを編集] をクリックします。
[シールドされた GKE ノード] チェックボックスをオンにします。
[変更を保存] をクリックします。
シールドされた GKE ノードが有効になっていることを確認する
クラスタがシールドされた GKE ノードを使用していることを確認するには、Google Cloud CLI または Google Cloud コンソールを使用します。
gcloud
クラスタの説明を表示します。
gcloud container clusters describe CLUSTER_NAME
シールドされた GKE ノードが有効になっていれば、コマンドの出力に次の行が含まれます。
shieldedNodes:
enabled: true
コンソール
クラスタがシールドされた GKE ノードを使用していることを確認するには:
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
検査するクラスタの名前をクリックします。
[セキュリティ] の [シールドされた GKE ノード] フィールドで、シールドされた GKE ノードが [有効] になっていることを確認します。
ノードの基盤となる Shielded VM の整合性のモニタリングもできます。手順については、Shielded VM インスタンス上の整合性モニタリングをご覧ください。
シールドされた GKE ノードを無効にする
Google Cloud CLI または Google Cloud コンソールを使用して、シールドされた GKE ノードを無効にできます。
gcloud
クラスタを更新するときには、次のように --no-enable-shielded-nodes
オプションを指定します。
gcloud container clusters update CLUSTER_NAME \
--no-enable-shielded-nodes
コンソール
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
[セキュリティ] の [シールドされた GKE ノード] フィールドで、edit [シールドされた GKE ノードを編集] をクリックします。
[シールドされた GKE ノードを有効にする] チェックボックスをオフにします。
[変更を保存] をクリックします。
シールドされた GKE ノードを無効にすると、ノードは通常のシールドのない VM として再作成されます。ダウンタイムを最小限に抑えるために、ローリング方式でクラスタノードが再作成されます。
ノードの整合性
必要に応じて、ノードプールでノードの整合性チェックを構成することで、ノードのルートキットとブートキットに対する保護を強化できます。シールドされた 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
オプションを使用してセキュアブートを明示的に無効化できます。
コンソール
ノードプールを作成するときにセキュアブートを有効にするには:
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
add_box [ノードプールを追加] をクリックします。
ナビゲーション メニューから [セキュリティ] をクリックします。
[シールド オプション] で [セキュアブートを有効にする] チェックボックスをオンにします。
[作成] をクリックします。
整合性モニタリング
整合性モニタリングは、ノードプール設定の 1 つで、GKE ではデフォルトで有効になっています。整合性モニタリングを無効にするには、Google Cloud CLI または Google Cloud コンソールを使用します。
gcloud
クラスタの作成時にシステム コンポーネントの整合性モニタリングを無効にするには、次のコマンドを実行します。
gcloud container clusters create CLUSTER_NAME \
--no-shielded-integrity-monitoring
ノードプールの作成時にシステム コンポーネントの整合性モニタリングを無効にするには、次のコマンドを実行します。
gcloud container node-pools create POOL_NAME \
--no-shielded-integrity-monitoring
整合性モニタリングはデフォルトで有効になっています。クラスタやノードプールを作成するときに、--shielded-integrity-monitoring
オプションを使ってこれを明示的に有効化できます。
コンソール
ノードプールの作成時に整合性モニタリングを無効にするには:
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
変更するクラスタの名前をクリックします。
add_box [ノードプールを追加] をクリックします。
ナビゲーション パネルで [セキュリティ] をクリックします。
[シールド オプション] で、[整合性のモニタリングを有効にする] チェックボックスをオフにします。