ビュー:
プロファイル適用性: レベル2
GKE Sandboxを使用して、マルチテナント環境で実行する際の追加の保護層として信頼されていないワークロードを制限します。
GKE Sandboxは、クラスターノードのホストカーネルに影響を与える未確認コードを防ぐための追加のセキュリティ層を提供します。
NodeプールでGKE Sandboxを有効にすると、そのNodeプール内のノードで実行されている各Podに対してサンドボックスが作成されます。さらに、サンドボックス化されたPodを実行しているノードは、他のGCPサービスやクラスターのメタデータにアクセスすることができません。各サンドボックスは独自のユーザースペースカーネルを使用します。
マルチテナントクラスターや、コンテナが信頼されていないワークロードを実行するクラスターは、他のクラスターよりもセキュリティ脆弱性にさらされやすくなります。例としては、SaaSプロバイダー、ウェブホスティングプロバイダー、またはユーザがコードをアップロードして実行できる他の組織が含まれます。コンテナランタイムやホストカーネルの欠陥により、コンテナ内で実行されているプロセスがコンテナからエスケープし、ノードのカーネルに影響を与え、ノードをダウンさせる可能性があります。
悪意のあるテナントがそのような欠陥を悪用して、メモリまたはディスク上の他のテナントのデータにアクセスし、漏洩する可能性もあります。
注意
注意
デフォルトでは、GKE Sandboxは無効になっています。

影響

GKE Sandboxを使用するには、ノードイメージをContainer-Optimized OS with containerd (cos_containerd) に設定する必要があります。
現在、GKE Sandboxを以下のKubernetes機能と併用することはできません:
  • GPUやTPUなどのアクセラレータ
  • Istio
  • Podまたはコンテナレベルでの監視統計
  • ホストパスストレージ
  • コンテナごとのPID名前空間
  • CPUとメモリの制限は、Guaranteed PodとBurstable Podにのみ適用され、Pod内で実行されているすべてのコンテナに対してCPUとメモリの制限が指定されている場合にのみ適用されます
  • hostNetwork、hostPID、hostIPCなどのホスト名前空間を指定するPodSecurityPoliciesを使用しているPod
  • 特権モードなどのPodSecurityPolicy設定を使用しているPod
  • ボリュームデバイス
  • ポートフォワード
  • Seccomp、Apparmor、Selinux Sysctl、NoNewPrivileges、双方向MountPropagation、FSGroup、ProcMountなどのLinuxカーネルセキュリティモジュール

監査

Google Cloud Consoleを使用する:
  1. Kubernetes Engine のウェブサイトにアクセスしてください。
  2. 各クラスターをクリックし、デフォルトでプロビジョニングされていないノードプールをクリックしてください。
  3. ノードプールの詳細ページで、セキュリティの項目の下にあるノードプールの詳細ページで、gVisorによるサンドボックスが有効になっていることを確認してください。
デフォルトノードプールはGKE Sandboxを使用できません。
コマンドラインの使用:
このコマンドを実行してください:
gcloud container node-pools describe $NODE_POOL --cluster $CLUSTER_NAME 
--zone $COMPUTE_ZONE --format json | jq '.config.sandboxConfig'
上記のコマンドの出力は、ノードプールがサンドボックスを実行している場合、次のようになります。
{ 
    "sandboxType":"gvisor" 
}
サンドボックスがない場合、上記のコマンド出力はnull ({ }) になります。デフォルトのノードプールはGKEサンドボックスを使用できません。

修復

ノードプールが作成されると、GKE Sandboxを有効にすることはできず、新しいノードプールが必要です。デフォルトのノードプール (クラスターが作成されたときに作成されるクラスター内の最初のノードプール) はGKE Sandboxを使用できません。
Google Cloud Consoleを使用する:
  1. Kubernetes Engine のウェブサイトにアクセスしてください。
  2. クラスターを選択し、[ADD NODE POOL]をクリックします。
  3. 次の設定でノードプールを構成してください:
    • ノードバージョンには、v1.12.6-gke.8以上を選択してください。
    • ノードイメージには、Container-Optimized OS with Containerd (cos_containerd) (default)を選択してください。
    • セキュリティで、[Enable sandbox with gVisor]を選択します。
  4. 必要に応じて他のノードプール設定を構成します。
  5. [保存] をクリックします。
コマンドラインの使用:
既存のクラスターでGKE Sandboxを有効にするには、新しいノードプールを作成する必要があります。これは次の方法で行うことができます。
gcloud container node-pools create <node_pool_name> --zone <compute-zone> 
--cluster <cluster_name> --image-type=cos_containerd --sandbox="type=gvisor"

追加情報:

デフォルトノードプール (クラスター作成時に作成されるクラスター内の最初のノードプール) はGKE Sandboxを使用できません。
GKE Sandboxを使用する場合、クラスターには少なくとも2つのノードプールが必要です。GKE Sandboxが無効になっているノードプールを常に1つ以上持っている必要があります。このノードプールには、すべてのワークロードがサンドボックス化されている場合でも、少なくとも1つのノードを含める必要があります。
オプションですが、--enable-stackdriver-kubernetesフラグを追加してStackdriver LoggingとStackdriver Monitoringを有効にすることをお勧めします。gVisorメッセージがログに記録されます。