ビュー:
プロファイル適用性: レベル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. ノードプールの詳細ページで、セキュリティの見出しの下にあるノードプールの詳細ページで、Sandbox with 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メッセージが記録されます。