プロファイル適用範囲: レベル2
マルチテナント環境で実行する際の追加の保護層として、GKE Sandboxを使用して信頼されていないワークロードを制限します。
GKE Sandboxは、信頼できないコードがクラスターノードのホストカーネルに影響を与えるのを防ぐための追加のセキュリティ層を提供します。
GKE Sandboxをノードプールで有効にすると、そのノードプール内のノードで実行されている各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を使用するポッド- PodSecurityPolicy設定を使用するPod、例えば特権モード
- ボリュームデバイス
- ポートフォワード
- Linuxカーネルセキュリティモジュール (Seccomp、Apparmor、Selinux Sysctl、NoNewPrivileges、双方向MountPropagation、FSGroup、ProcMountなど)
監査
Google Cloud Consoleを使用する:
- Google CloudコンソールKubernetes EngineページにアクセスしてKubernetes Engineに移動します。
- 各クラスターをクリックし、デフォルトでプロビジョニングされていないノードプールをクリックしてください。
- ノードプール詳細ページのセキュリティ見出しの下で、gVisorによるサンドボックスが有効になっていることを確認してください。
デフォルトノードプールではGKE Sandboxを使用できません。
コマンドラインを使用:
最初にノードプール、クラスター名、ロケーション、プロジェクトの3つの変数を定義し、次にこのコマンドを実行してください。
gcloud container node-pools describe $NODE_POOL --cluster $CLUSTER_NAME -- location $LOCATION --project $PROJECT_ID --format json | jq '.config.sandboxConfig'
上記のコマンドの出力は、ノードプールがサンドボックスを実行している場合、次のように返されます。
{ "sandboxType":"gvisor" }
サンドボックスがない場合、上記のコマンド出力はnull ({ }) になります。デフォルトのノードプールは
GKE Sandboxを使用できません。修復
ノードプールが作成されると、
GKE Sandboxを有効にすることはできず、新しいノードプールが必要です。デフォルトのノードプール (クラスターが作成されたときに作成されるクラスター内の最初のノードプール) はGKE Sandboxを使用できません。Google Cloud Consoleを使用する:
- Google Cloud ドキュメントにアクセスしてKubernetes Engineに移動します。
- クラスターを選択し、ADD NODE POOLをクリックしてください。
- 次の設定でノードプールを構成します: o ノードバージョンには、v1.12.6-gke.8以上を選択します。 o ノードイメージには、Containerdを使用したContainer-Optimized
OS (
cos_containerd) を選択します (デフォルト)。 o セキュリティの項目で、gVisorを使用してサンドボックスを有効にします。 - 必要に応じて他のノードプール設定を行います。
- 保存をクリックしてください。
Command Lineを使用する: 既存のクラスターで
GKE Sandboxを有効にするには、新しいノードプールを作成する必要があります。これは次のコマンドで行うことができます:gcloud container node-pools create <node_pool_name> --location <location> - -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 メッセージが記録されます。
