CIS ベンチマーク


このページでは、Kubernetes と GKE の Center for Internet Security(CIS)ベンチマークへの準拠を強化するために Google Kubernetes Engine(GKE)が採用しているアプローチについて説明します。このページには、次の情報が含まれています。

  • CIS Kubernetes Benchmark に準拠するようにマネージド GKE コントロール プレーンを構成する方法
  • CIS Google Kubernetes Engine(GKE)ベンチマークに準拠するように GKE ノードとワークロードを構成する方法

CIS ベンチマークについて

CIS は、Kubernetes の安全な構成ガイドラインを含む次のベンチマークをリリースしています。

  • CIS Kubernetes Benchmark: オープンソースの Kubernetes プロジェクトに適用されます。さまざまなセルフマネージド Kubernetes 実装とホスト型 Kubernetes 実装に関するガイダンスを提供することを目的としています。
  • CIS GKE Benchmark: GKE クラスタで制御できるコンポーネントの安全な構成に関するガイドラインを確立します。Google Cloud 上の GKE に固有の推奨事項が含まれています。

Google Cloud の GKE に固有であるため、CIS GKE ベンチマークを優先することをおすすめします。CIS Kubernetes Benchmark には、GKE で表示または変更できないコントロールに関する推奨事項が多数含まれています。Google のクラスタ セキュリティへのアプローチには、オープンソースの Kubernetes ベンチマークの範囲を超える緩和策が含まれており、それらの推奨事項と競合する可能性があります。

GKE に適用されるその他のベンチマーク

CIS GKE Benchmark と CIS Kubernetes Benchmark に加えて、次のベンチマークが GKE で使用可能なオペレーティング システムに適用されます。特定の OS ベンチマークで Kubernetes の使用が明示的に扱われていない場合でも、追加のセキュリティ ガイダンスについては、そのベンチマークを参照する必要があります。

デフォルトのコンテナ ランタイムである containerd にはベンチマークがありません。

共有責任モデル

Google は、GKE の共有責任モデルに基づいて、次のコンポーネントを管理します。

  • コントロール プレーン VM、API サーバー、etcd、kube-controller-manager、kube-scheduler などのコンポーネントを含むコントロール プレーン。
  • ノードのオペレーティング システム。

これらのコンポーネントは GKE が所有するプロジェクトに存在するため、対応する CIS Benchmark コントロールに対してこれらのコンポーネントを変更または評価することはできません。ただし、ワーカーノードとワークロードに適用される CIS Benchmark コントロールを評価して修正することはできます。GKE の共有責任モデルに基づき、これらのコンポーネントはお客様の責任で管理する必要があります。

CIS Benchmark 向けの GKE の保護に対する Google のアプローチ

GKE は、オープンソースの Kubernetes のマネージド実装です。Google はコントロール プレーンを完全に管理し、コントロール プレーン コンポーネントの構成を保護します。次の表に、CIS ベンチマークのスコアリングに影響する可能性がある Google の決定の一部を示します。

GKE のセキュリティ アプローチ
認証
  • 一部の GKE モニタリング コンポーネントは、匿名認証を使用して指標を取得します。
  • 一部のコントロール プレーン コンポーネントは静的トークンを使用してブートストラップされ、API サーバーの認証に使用されます。これらのトークンは、VM の起動または再起動のたびに生成されます。
アドミッション コントローラ

GKE では、次のアドミッション コントローラが無効になります。

  • EventRateLimit: Kubernetes のアルファ版機能
  • AlwaysPullImages: このコントローラは、非協調型のマルチテナント クラスタの非公開レジストリ イメージを保護しますが、クラスタ内で新しい Pod を作成する際にイメージ レジストリが単一障害点となります。
  • SecurityContextDeny: Pod セキュリティ アドミッション コントローラが推奨され、すべての GKE エディションで使用できます。 GKE Enterprise を使用している場合は、Policy Controller を使用して Pod セキュリティ標準の適用を有効にすることもできます。
  • ImagePolicyWebhook: GKE にはイメージ管理とセキュリティのための独自のメカニズムがあるため、デフォルトでは ImagePolicyWebhook が無効になっています。これにより、GKE は環境をより厳密に制御し、セキュリティ プラクティスが一貫して適用されるようにします。 ただし、ポリシー管理には Binary Authorization または Policy Controller を使用できます。
監査ロギング GKE は、GKE 監査ポリシーを使用して監査ログをキャプチャします。そのため、Kubernetes API サーバー監査ロギング フラグを設定する必要はありません。
デバッグ GKE はデバッグにプロファイリングを使用します。
暗号化
kubelet
  • GKE では、未認証の kubelet 読み取り専用ポートが有効になります。ポートを無効にするには、--no-autoprovisioning-enable-insecure-kubelet-readonly-port を設定します。読み取り専用ポートは、移行期間を経て、今後のリリースでデフォルトで無効になります。
  • GKE Standard モードでは、必要に応じてワークロードがカーネルのデフォルトを変更できます。
  • GKE は、サービス拒否攻撃のリスクを軽減するために、kubelet 内の Kubernetes イベントの数を制限します。
  • GKE は mTLS を使用して、kubelet と API サーバー間のトラフィックを保護します。
  • GKE はデフォルトでサーバー証明書をローテーションし、シールドされた GKE ノードが有効になっている場合はクライアント証明書をローテーションします。
  • GKE は golang のデフォルトの許可暗号セットを使用します。これは Kubernetes のデフォルトでもあります。

CIS ベンチマークに基づいて GKE を評価する

ベンチマークに対するクラスタの評価は、次のいずれかの方法で自動化できます。

  • CIS GKE Benchmark:

    • すべての GKE エディション:
      • kube-bench を実行して、ワーカーノードをベンチマークと比較します。詳細については、kube-bench GitHub リポジトリをご覧ください。
      • Twistlock Defender などのサードパーティ ツールを使用して、ベンチマークと比較してノードを評価します。
    • GKE Enterprise エディション: Compliance ダッシュボードを使用して、すべてのクラスタが CIS GKE ベンチマークに準拠しているかどうかを評価します。詳細については、GKE Compliance ダッシュボードについてをご覧ください。
  • CIS Kubernetes Benchmark: kube-bench を実行して、Benchmark に対してワーカーノードを評価します。ベンチマークの推奨事項と比較して、マネージド コントロール プレーンを評価することはできません。

次のステップ