CIS ベンチマーク

このドキュメントでは、CIS Kubernetes と Google Kubernetes Engine(GKE)Benchmarks の概要、Benchmarks でコンプライアンスを監査する方法、セキュリティの推奨事項をお客様が直接監査または実装できない場合の GKE の構成について説明します。

CIS ベンチマークの使用

Center for Internet Security(CIS)ではベスト プラクティスのセキュリティに関する推奨事項のベンチマークを公開しています。CIS Kubernetes Benchmark は、強固なセキュリティ体制がサポートされるよう Kubernetes を構成するための一連の推奨事項です。ベンチマークは特定の Kubernetes リリースに関連付けられています。CIS Kubernetes Benchmark は、オープンソースの Kubernetes ディストリビューション用に記述されており、できる限り多くのディストリビューションに広く適用できるように構成されています。

GKE のようなマネージド サービスでは、ベンチマーク上のすべての項目がお客様の責任であるとは限らず、お客様ご自身で直接監査または修正できない推奨事項があります。GKE で実行している場合は CIS GKE Benchmark を使用してください。これは GKE ディストリビューションに適用するために特化された CIS Kubernetes Benchmark の子ベンチマークです。これは既存の CIS ベンチマークを基に作成されていますが、お客様が設定または管理できない項目は削除され、Google Cloud 固有のコントロールが追加されています。

複数のベンチマーク

GKE では、GKE、Kubernetes、Docker、Linux に CIS ベンチマークを使用できます。なお、GKE のデフォルト ノード OS である Container-Optimized OS(COS)には CIS ベンチマークがない点に注意してください。コンテナ ランタイム containerd にも CIS ベンチマークはありません。

一部のツールは、複数の CIS ベンチマーク(Linux、Docker、Kubernetes など)に照らし合わせて Kubernetes ノードを分析し、その結果を結合します。多くの場合、これらのベンチマークは Kubernetes 環境で組み合わせて適用するように設計されていないため、混乱を招き、推奨事項の矛盾をもたらす可能性があります。

共有責任モデル

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

  • コントロール プレーン VM、API サーバー、VM 上のその他のコンポーネント、etcd などのコントロール プレーン(マスター)。
  • Kubernetes ディストリビューション
  • ノードのオペレーティング システム

通常、これらの項目に関連する構成は GKE で監査や変更を行うことはできません。

ワークロードを実行するノードやワークロード自体のアップグレードは、お客様の責任であることに変わりはありません。通常、これらのコンポーネントへの推奨事項は監査して修正できます。

監査と修復の機能

CIS GKE Benchmark は既存の CIS Kubernetes Benchmark を基に作成されていますが、お客様が構成または管理できない項目は削除され、Google Cloud 固有のコントロールが追加されています。

CIS GKE Benchmark のセクションは次のとおりです。

  • コントロール プレーンのコンポーネント、etcd、コントロール プレーンの構成(セクション 1、2、3)は CIS Kubernetes Benchmark からの引用です。これらは通常、GKE で監査または修正することはできません。
  • ワーカーノード(セクション 4)は CIS Kubernetes Benchmark からの引用です。これらの項目の一部は、GKE で監査または修復できますが、手順が異なる場合があります。
  • ポリシー(セクション 5)も CIS Kubernetes Benchmark からの引用です。これらは通常、手順を変更することなく GKE に直接適用できます。
  • CIS GKE Benchmark のマネージド サービス(セクション 6)は、GKE 固有の新規コンテンツです。このセクションには、Google Cloud コントロール固有のすべての推奨事項が含まれています。これらは GKE で監査および修正できます。

GKE で監査または修正できない項目については、GKE で作成されたデフォルトのクラスタが CIS Kubernetes Benchmark にどのようなステータスを示すのかを理解するために、デフォルト値のセクションをご覧ください。

バージョン

使用する 2 つのベンチマークのバージョン番号が同じとは限りませんので注意してください。

このドキュメントでは、次のバージョンを参照しています。

Kubernetes のバージョン CIS Kubernetes Benchmark のバージョン CIS GKE Benchmark のバージョン
1.15 1.5.0 1.0.0

CIS Kubernetes Benchmark

ベンチマークへのアクセス

CIS Kubernetes Benchmark は CIS ウェブサイトで入手できます。

推奨レベル

CIS Kubernetes Benchmark:

レベル 説明
レベル 1

推奨事項は以下を目的としています:

  • 実用的かつ慎重
  • セキュリティ上の明確なメリットの提供
  • 許容可能な範囲を超えて技術の有用性を阻害しないこと
  • レベル 2

    レベル 1 のプロファイルを拡張します。

    推奨事項には、次の 1 つ以上の特徴があります。

  • セキュリティが最も重要な環境やユースケースを対象としている。
  • 多層防御として機能する。または、
  • テクノロジーの実用性やパフォーマンスを阻害する可能性がある。
  • 推奨スコア

    CIS Kubernetes Benchmark:

    スコア付け 説明
    スコア付き これらの推奨事項を遵守しない場合、最終的なベンチマーク スコアは低くなります。
    スコアなし これらの推奨事項を遵守していなくても、最終的なベンチマーク スコアは低下しません。

    GKE での評価

    次の値を使用して、GKE での Kubernetes 推奨事項のステータスを指定します。

    ステータス 説明
    合格 ベンチマークの推奨事項を遵守している。
    不合格 ベンチマークの推奨事項を遵守していない。
    同等の統制 ベンチマークの推奨事項の条件を完全には遵守していないが、GKE に同等のセキュリティ統制を提供するメカニズムが存在する。
    環境に依存 GKE では、この推奨事項に関連する項目を構成していません。お客様の構成により、環境がベンチマークの推奨事項を遵守しているかどうかが決まります。

    GKE のステータス

    指定されたバージョンで新しい GKE クラスタを作成すると、CIS Kubernetes Benchmark に対して以下のステータスを示します。

    デフォルト GKE クラスタのステータス:

    # 推奨事項 スコア付き / スコアなし レベル デフォルトのステータス
    1 コントロール プレーン コンポーネント
    1.1 コントロール プレーンノード構成ファイル
    1.1.1 API サーバーの Pod 仕様ファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    1.1.2 API サーバーの Pod 仕様ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
    1.1.3 コントローラ マネージャーの Pod 仕様ファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    1.1.4 コントローラ マネージャーの Pod 仕様ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
    1.1.5 スケジューラの Pod 仕様ファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    1.1.6 スケジューラの Pod 仕様ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
    1.1.7 etcd の Pod 仕様ファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    1.1.8 etcd の Pod 仕様ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
    1.1.9 Container Network Interface のファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコアなし L1 合格
    1.1.10 Container Network Interface ファイルの所有権が root:root に設定されていることを確認する スコアなし L1 合格
    1.1.11 etcd データ ディレクトリの権限が、700 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    1.1.12 etcd データ ディレクトリの所有権が etcd:etcd に設定されていることを確認する スコア付き L1 合格
    1.1.13 admin.conf ファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    1.1.14 admin.conf ファイルの所有者が root:root に設定されていることを確認する スコア付き L1 合格
    1.1.15 scheduler.conf ファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    1.1.16 Scheduler.conf ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
    1.1.17 controller-manager.conf ファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    1.1.18 controller-manager.conf ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
    1.1.19 Kubernetes PKI ディレクトリとファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
    1.1.20 Kubernetes PkI 証明書ファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    1.1.21 Kubernetes PKI 鍵ファイルの権限が 600 に設定されていることを確認する スコア付き L1 合格
    1.2 API サーバー
    1.2.1 --anonymous-auth 引数が false に設定されていることを確認する スコアなし L1 不合格
    1.2.2 --basic-auth-file 引数が設定されていないことを確認する スコア付き L1 合格
    1.2.3 --token-auth-file のパラメータが設定されていないことを確認する スコア付き L1 不合格
    1.2.4 --kubelet-https 引数が true に設定されていることを確認する スコア付き L1 合格
    1.2.5 --kubelet-client-certificate 引数と--kubelet-client-key 引数が適切に設定されていることを確認する スコア付き L1 合格
    1.2.6 --kubelet-certificate-authority 引数が適切に設定されていることを確認する スコア付き L1 合格
    1.2.7 --authorization-mode 引数が AlwaysAllow に設定されていないことを確認する スコア付き L1 合格
    1.2.8 --authorization-mode 引数に Node が含まれていることを確認する スコア付き L1 合格
    1.2.9 --authorization-mode 引数に RBAC が含まれていることを確認する スコア付き L1 合格
    1.2.10 アドミッション コントロール プラグインの EventRateLimit が設定されていることを確認する スコアなし L1 不合格
    1.2.11 アドミッション コントロール プラグインの AlwaysAdmit が設定されていないことを確認する スコア付き L1 合格
    1.2.12 アドミッション コントロール プラグインの AlwaysPullImages が設定されていることを確認する スコアなし L1 不合格
    1.2.13 PodSecurityPolicy が使用されていない場合は、アドミッション コントロール プラグインの SecurityContextDeny が設定されていることを確認する スコアなし L1 不合格
    1.2.14 アドミッション コントロール プラグインの ServiceAccount が設定されていることを確認する スコア付き L1 合格
    1.2.15 アドミッション コントロール プラグインの NamespaceLifecycle が設定されていることを確認する スコア付き L1 合格
    1.2.16 アドミッション コントロール プラグインの PodSecurityPolicy が設定されていることを確認する スコア付き L1 不合格
    1.2.17 アドミッション コントロール プラグインの NodeRestriction が設定されていることを確認する スコア付き L1 合格
    1.2.18 --insecure-bind-address 引数が設定されていないことを確認する スコア付き L1 合格
    1.2.19 --insecure-port 引数が 0 に設定されていることを確認する スコア付き L1 合格
    1.2.20 --secure-port 引数が 0 に設定されていないことを確認する スコア付き L1 合格
    1.2.21 --profiling 引数が false に設定されていることを確認する スコア付き L1 不合格
    1.2.22 --audit-log-path 引数が設定されていることを確認する スコア付き L1 同等の統制
    1.2.23 --audit-log-maxage 引数が 30、または適切に設定されていることを確認する スコア付き L1 同等の統制
    1.2.24 --audit-log-maxbackup 引数が 10、または適切に設定されていることを確認する スコア付き L1 同等の統制
    1.2.25 --audit-log-maxsize 引数が 100、または適切に設定されていることを確認する スコア付き L1 同等の統制
    1.2.26 --request-timeout 引数が適切に設定されていることを確認する スコア付き L1 合格
    1.2.27 --service-account-lookup 引数が true に設定されていることを確認する スコア付き L1 合格
    1.2.28 --service-account-key-file 引数が適切に設定されていることを確認する スコア付き L1 合格
    1.2.29 --etcd-certfile 引数と--etcd-keyfile 引数が適切に設定されていることを確認する スコア付き L1 不合格
    1.2.30 --tls-cert-file 引数と--tls-private-key-file 引数が適切に設定されていることを確認する スコア付き L1 合格
    1.2.31 --client-ca-file 引数が適切に設定されていることを確認する スコア付き L1 合格
    1.2.32 --etcd-cafile 引数が適切に設定されていることを確認する スコア付き L1 不合格
    1.2.33 --encryption-provider-config 引数が適切に設定されていることを確認する スコア付き L1 合格
    1.2.34 暗号化プロバイダが適切に構成されていることを確認する スコア付き L1 不合格
    1.2.35 API サーバーが強力な暗号のみを使用していることを確認する スコアなし L1 合格
    1.3 コントローラ マネージャー
    1.3.1 --terminated-pod-gc-thresold 引数が適切に設定されていることを確認する スコア付き L1 合格
    1.3.2 --profiling 引数が false に設定されていることを確認する スコア付き L1 不合格
    1.3.3 --use-service-account-credentials 引数が true に設定されていることを確認する スコア付き L1 不合格
    1.3.4 --service-account-private-key-file 引数が適切に設定されていることを確認する スコア付き L1 合格
    1.3.5 --root-ca-file 引数が適切に設定されていることを確認する スコア付き L1 合格
    1.3.6 RotateKubeletServerCertificate 引数が true に設定されていることを確認する スコア付き L2 同等の統制
    1.3.7 --bind-address 引数が 127.0.0.1 に設定されていることを確認する スコア付き L1 合格
    1.4 スケジューラ
    1.4.1 --profiling 引数が false に設定されていることを確認する スコア付き L1 不合格
    1.4.2 --bind-address 引数が 127.0.0.1 に設定されていることを確認する スコア付き L1 合格
    2 etcd
    2.1 --cert-file 引数と--key-file 引数が適切に設定されていることを確認する スコア付き L1 不合格
    2.2 --client-cert-auth 引数が true に設定されていることを確認する スコア付き L1 不合格
    2.3 --auto-tls 引数が true に設定されていないことを確認する スコア付き L1 合格
    2.4 --peer-cert-file 引数と--peer-key-file 引数が適切に設定されていることを確認する スコア付き L1 同等の統制
    2.5 --peer-client-cert-auth 引数が true に設定されていることを確認する スコア付き L1 同等の統制
    2.6 --peer-auto-tls 引数が true に設定されていないことを確認する スコア付き L1 同等の統制
    2.7 固有の認証局が etcd に使用されていることを確認する スコアなし L2 合格
    3 コントロール プレーンの設定
    3.1 認証と認可
    3.1.1 クライアント証明書の認証をユーザーに使用していないことを確認する スコアなし L2 合格
    3.2 ロギング
    3.2.1 最小限の監査ポリシーが作成されていることを確認する スコア付き L1 合格
    3.2.2 監査ポリシーの対象に重要なセキュリティ問題が含まれていることを確認する スコアなし L2 合格
    4 ワーカーノード
    4.1 ワーカーノード構成ファイル
    4.1.1 kubelet サービス ファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    4.1.2 kubelet サービス ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
    4.1.3 プロキシ kubeconfig ファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    4.1.4 プロキシ kubeconfig ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
    4.1.5 kubelet.conf ファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    4.1.6 kubelet.conf ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
    4.1.7 認証局ファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    4.1.8 クライアント証明認証局ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
    4.1.9 kubelet 設定ファイルの権限が、644 またはより制限されたマスク値に設定されていることを確認する スコア付き L1 合格
    4.1.10 kubelet 設定ファイルの所有者が root:root に設定されていることを確認する スコア付き L1 合格
    4.2 Kubelet
    4.2.1 --anonymous-auth 引数が false に設定されていることを確認する スコア付き L1 合格
    4.2.2 --authorization-mode 引数が AlwaysAllow に設定されていないことを確認する スコア付き L1 合格
    4.2.3 --client-ca-file 引数が適切に設定されていることを確認する スコア付き L1 合格
    4.2.4 --read-only-port 引数が 0 に設定されていることを確認する スコア付き L1 不合格
    4.2.5 --streaming-connection-idle-timeout 引数が 0 に設定されていないことを確認する スコア付き L1 合格
    4.2.6 --protect-kernel-defaults 引数が true に設定されていることを確認する スコア付き L1 不合格
    4.2.7 --make-iptables-util-chains 引数が true に設定されていることを確認する スコア付き L1 合格
    4.2.8 --hostname-override 引数が設定されていないことを確認する スコアなし L1 合格
    4.2.9 --event-qps 引数が 0 または適切なイベント キャプチャを保証するレベルに設定されていることを確認する スコアなし L2 不合格
    4.2.10 --tls-cert-file 引数と--tls-private-key-file 引数が適切に設定されていることを確認する スコア付き L1 同等の統制
    4.2.11 --rotate-certificates 引数が false に設定されていないことを確認する スコア付き L1 同等の統制
    4.2.12 RotateKubeletServerCertificate 引数が true に設定されていることを確認する スコア付き L1 同等の統制
    4.2.13 Kubelet が強力な暗号のみを使用していることを確認する スコアなし L1 合格
    5 ポリシー
    5.1 RBAC とサービス アカウント
    5.1.1 cluster-admin ロールが必要な場合にのみ使用されていることを確認する スコアなし L1 環境に依存
    5.1.2 シークレットへのアクセスを最小限に抑える スコアなし L1 環境に依存
    5.1.3 Roles と ClusterRoles でのワイルドカードの使用を最小限に抑える スコアなし L1 環境に依存
    5.1.4 Pod の作成アクセスを最小限に抑える スコアなし L1 環境に依存
    5.1.5 デフォルトのサービス アカウントが実際に使用されていないことを確認する スコア付き L1 環境に依存
    5.1.6 サービス アカウント トークンが必要な場合のみマウントされていることを確認する スコアなし L1 環境に依存
    5.2 ポッド セキュリティ ポリシー
    5.2.1 特権付きコンテナの使用を最小限に抑える スコアなし L1 環境に依存
    5.2.2 ホストプロセス ID の名前空間を共有するコンテナの許可を最小限に抑える スコア付き L1 環境に依存
    5.2.3 ホスト IPC の名前空間を共有するコンテナの許可を最小限に抑える スコア付き L1 環境に依存
    5.2.4 ホスト ネットワークの名前空間を共有するコンテナの許可を最小限に抑える スコア付き L1 環境に依存
    5.2.5 allowPrivilegeEscalation を使用してコンテナの許可を最小限に抑える スコア付き L1 環境に依存
    5.2.6 ルートコンテナの許可を最小限に抑える スコアなし L2 環境に依存
    5.2.7 NET_RAW 機能を使用してコンテナの許可を最小限に抑える スコアなし L1 環境に依存
    5.2.8 追加された機能を使用してコンテナの許可を最小限に抑える スコアなし L1 環境に依存
    5.2.9 割り当てられた機能を使用してコンテナの許可を最小限に抑える スコアなし L2 環境に依存
    5.3 ネットワーク ポリシーと CNI
    5.3.1 使用中の CNI がネットワーク ポリシーに対応していることを確認する スコアなし L1 合格
    5.3.2 すべての名前空間にネットワーク ポリシーが定義されていることを確認する スコア付き L2 環境に依存
    5.4 シークレット管理
    5.4.1 環境変数としてのシークレットではなく、シークレットをファイルとして使用する スコアなし L1 環境に依存
    5.4.2 外部シークレット ストレージを検討する スコアなし L2 環境に依存
    5.5 拡張可能なアドミッション コントロール
    5.5.1 ImagePolicyWebhook アドミッション コントローラを使用してイメージの出所を構成する スコアなし L2 環境に依存
    5.6 一般ポリシー
    5.6.1 名前空間を使用してリソース間の管理境界を作成する スコアなし L1 環境に依存
    5.6.2 ポッドの定義で seccomp プロファイルが docker/default に設定されていることを確認する スコアなし L2 環境に依存
    5.6.3 セキュリティ コンテキストを Pod と Container に適用する スコアなし L2 環境に依存
    5.6.4 デフォルトの名前空間が使用されていない スコア付き L2 環境に依存

    GKE のデフォルト値

    新しい GKE クラスタのデフォルトが CIS Kubernetes Benchmark の推奨事項を満たさない場合、GKE で使用されるデフォルト値とその説明を次に示します。これらの推奨事項の一部は、CIS GKE Benchmark に記載されている手順で修正できます。自動的に監査できる項目は、CIS GKE Benchmark で「スコア付き」としてマークされています。

    デフォルトの GKE クラスタの環境で、ステータスが「不合格」または「環境に依存」の推奨事項のデフォルト値:

    # 推奨事項 スコア付き / スコアなし
    CIS Kubernetes Benchmark
    レベル デフォルトのステータス デフォルト値 理由 スコア付き / スコアなし
    CIS GKE Benchmark
    1 コントロール プレーン コンポーネント
    1.2 API サーバー
    1.2.1 --anonymous-auth 引数が false に設定されていることを確認する スコアなし L1 不合格 true 一部の GKE モニタリング コンポーネントは、匿名認証を使用して指標を取得します。GKE は kubelet の匿名認証を許可しますが、GKE は追加のデバッグ ハンドラを無効にするため、公開は読み取り専用ポートと同じです。 スコアなし
    1.2.3 --token-auth-file のパラメータが設定されていないことを確認する スコア付き L1 不合格 設定 一部のコントロール プレーン コンポーネントは静的トークンを使用してブート ストラップされ、API サーバーの認証に使用されます。 スコアなし
    1.2.10 アドミッション コントロール プラグインの EventRateLimit が設定されていることを確認する スコアなし L1 不合格 未設定 GKE は、Kubernetes のアルファ版機能である Event Rate Limit アドミッション コントローラをサポートしません。 スコアなし
    1.2.12 アドミッション コントロール プラグインの AlwaysPullImages が設定されていることを確認する スコアなし L1 不合格 未設定 AlwaysPullImages アドミッション コントローラは、非協調型のマルチテナント クラスタの非公開レジストリ イメージを保護しますが、クラスタ全体で新しい Pod を作成する際にコンテナ レジストリが単一障害点となります。GKE では AlwaysPullImages アドミッション コントローラが有効になっていません。クラスタ管理者がこのトレードオフを判断し、アドミッション ポリシーを実装するかどうか決める必要があります。 スコアなし
    1.2.13 PodSecurityPolicy が使用されていない場合は、アドミッション コントロール プラグインの SecurityContextDeny が設定されていることを確認する スコアなし L1 不合格 未設定 GKE のデフォルトの場合、Security Context アドミッション コントローラは有効になりません。Pod セキュリティ ポリシーを使用すると制御がより簡単になるため、ポリシーの使用が望ましいとされます。 スコアなし
    1.2.16 アドミッション コントロール プラグインの PodSecurityPolicy が設定されていることを確認する スコア付き L1 不合格 未設定 GKE のデフォルトでは、ポリシーの設定が必要なため、Pod セキュリティ ポリシー アドミッション コントローラは有効になりません。GKE ユーザーは PodSecurityPolicy を有効にできます。 スコアなし。6.10.3 も参照してください。
    1.2.21 --profiling 引数が false に設定されていることを確認する スコア付き L1 不合格 未設定 GKE はデバッグにプロファイリングを使用します。 スコアなし
    1.2.22 --audit-log-path 引数が設定されていることを確認する スコア付き L1 同等の統制 未設定 GKE は監査ログをキャプチャしますが、監査にはこれらのフラグを使用しません。詳しくは、GKE 監査ポリシーをご覧ください。 スコアなし
    1.2.23 --audit-log-maxage 引数が 30、または適切に設定されていることを確認する スコア付き L1 同等の統制 未設定 GKE は監査ログをキャプチャしますが、監査にはこれらのフラグを使用しません。詳しくは、GKE 監査ポリシーをご覧ください。 スコアなし
    1.2.24 --audit-log-maxbackup 引数が 10、または適切に設定されていることを確認する スコア付き L1 同等の統制 未設定 GKE は監査ログをキャプチャしますが、監査にはこれらのフラグを使用しません。詳しくは、GKE 監査ポリシーをご覧ください。 スコアなし
    1.2.25 --audit-log-maxsize 引数が 100、または適切に設定されていることを確認する スコア付き L1 同等の統制 未設定 GKE は監査ログをキャプチャしますが、監査にはこれらのフラグを使用しません。詳しくは、GKE 監査ポリシーをご覧ください。 スコアなし
    1.2.29 --etcd-certfile 引数と--etcd-keyfile 引数が適切に設定されていることを確認する スコア付き L1 不合格 未設定 GKE では現在、API サーバーと etcd の間の接続を保護するために mTLS を使用していません。etcd は localhost をリッスンします。詳しくは、クラスタの信頼性をご覧ください。 スコアなし
    1.2.32 --etcd-cafile 引数が適切に設定されていることを確認する スコア付き L1 不合格 未設定 GKE では現在、API サーバーと etcd の間の接続を保護するために mTLS を使用していません。etcd は localhost をリッスンします。詳しくは、クラスタの信頼性をご覧ください。 スコアなし
    1.2.34 暗号化プロバイダが適切に構成されていることを確認する スコア付き L1 不合格 identity GKE は、保存したお客様のコンテンツをデフォルトで暗号化します。シークレットをさらに暗号化するには、アプリケーション レイヤでのシークレットの暗号化を使用します。 スコアなし。6.3.1 も参照してください。
    1.3 コントローラ マネージャー
    1.3.2 --profiling 引数が false に設定されていることを確認する スコア付き L1 不合格 true GKE はデバッグにプロファイリングを使用します。 スコアなし
    1.3.6 RotateKubeletServerCertificate 引数が true に設定されていることを確認する スコア付き L2 同等の統制 false GBC は kubelet の証明書をローテーションしますが、このフラグは使用しません。 スコアなし
    1.4 スケジューラ
    1.4.1 --profiling 引数が false に設定されていることを確認する スコア付き L1 不合格 true GKE はデバッグにプロファイリングを使用します。 スコアなし
    2 etcd
    2.1 --cert-file 引数と--key-file 引数が適切に設定されていることを確認する スコア付き L1 不合格 未設定 GKE では現在、API サーバーと etcd の間の接続を保護するために mTLS を使用していません。etcd は localhost をリッスンします。詳しくは、クラスタの信頼性をご覧ください。 スコアなし
    2.2 --client-cert-auth 引数が true に設定されていることを確認する スコア付き L1 不合格 未設定 GKE では現在、API サーバーと etcd の間の接続を保護するために mTLS を使用していません。etcd は localhost をリッスンします。詳しくは、クラスタの信頼性をご覧ください。 スコアなし
    2.4 --peer-cert-file 引数と--peer-key-file 引数が適切に設定されていることを確認する スコア付き L1 同等の統制 未設定 GKE は etcd のインスタンス間のピア トラフィックに mTLS を使用します。これらのフラグはリージョン クラスタでは使用されますが、ゾーンクラスタには etcd のインスタンスが 1 つしかないため、ゾーンクラスタでは使用されません。詳しくは、クラスタの信頼性をご覧ください。 スコアなし
    2.5 --peer-client-cert-auth 引数が true に設定されていることを確認する スコア付き L1 同等の統制 未設定 GKE は etcd のインスタンス間のピア トラフィックに mTLS を使用します。これらのフラグはリージョン クラスタでは使用されますが、ゾーンクラスタには etcd のインスタンスが 1 つしかないため、ゾーンクラスタでは使用されません。詳しくは、クラスタの信頼性をご覧ください。 スコアなし
    2.6 --peer-auto-tls 引数が true に設定されていないことを確認する スコア付き L1 同等の統制 未設定 GKE は etcd のインスタンス間のピア トラフィックに mTLS を使用します。これらのフラグはリージョン クラスタでは使用されますが、ゾーンクラスタには etcd のインスタンスが 1 つしかないため、ゾーンクラスタでは使用されません。詳しくは、クラスタの信頼性をご覧ください。 スコアなし
    4 ワーカーノード
    4.2 Kubelet
    4.2.4 --read-only-port 引数が 0 に設定されていることを確認する スコア付き L1 不合格 10255 一部の GKE モニタリング コンポーネントは、kubelet 読み取り専用ポートを使用して指標を取得します。 スコア付き
    4.2.6 --protect-kernel-defaults 引数が true に設定されていることを確認する スコア付き L1 不合格 false GKE は、Kubernetes からカーネルのデフォルトを保護しません。これは、お客様のワークロードで変更される可能性があるためです。 スコア付き
    4.2.9 --event-qps 引数が 0 または適切なイベント キャプチャを保証するレベルに設定されていることを確認する スコアなし L2 不合格 5 イベントは、etcd に格納されている Kubernetes オブジェクトです。過大な etcd を避けるために、これらは 1 時間だけ保持されますが、これは適切なセキュリティ監査メカニズムではありません。このコントロールで提案されている無制限のイベントを許可すると、クラスタは不要な DoS のリスクにさらされることになり、アドミッション EventRateLimits の使用に関する推奨事項に矛盾します。永続ストレージを必要とするセキュリティ関連のイベントは、ログに送信する必要があります。 スコア付き
    4.2.10 --tls-cert-file 引数と--tls-private-key-file 引数が適切に設定されていることを確認する スコア付き L1 同等の統制 未設定 GKE は、kubelet から API サーバーへのトラフィックに mTLS を使用します。GKE は API サーバーに TLS を使用して kubelet トラフィックを処理します。これは GKE v1.12 以上のクラスタで認証されます。GKE はこれらのフラグを使用しませんが、kubelet 構成ファイルで指定されています。詳しくは、クラスタの信頼性をご覧ください。 スコア付き
    4.2.11 --rotate-certificates 引数が false に設定されていないことを確認する スコア付き L1 同等の統制 未設定 GKE は、GKE v1.12 以上のクラスタのサーバー証明書をローテーションします。GKE はこれらのフラグを使用しませんが、kubelet 構成ファイルで指定されています。GKE は、シールドされた GKE ノードが有効になっていない限り、クライアント証明書をローテーションしません。この場合、GKE はこれらのフラグを使用せず、証明書のローテーション用に別のプロセスを実行します。詳しくは、クラスタの信頼性をご覧ください。 スコア付き
    4.2.12 RotateKubeletServerCertificate 引数が true に設定されていることを確認する スコア付き L1 同等の統制 未設定 GKE は、GKE v1.12 以上のクラスタのサーバー証明書をローテーションします。GKE はこれらのフラグを使用しませんが、kubelet 構成ファイルで指定されています。詳しくは、クラスタの信頼性をご覧ください。 スコア付き
    5 ポリシー
    5.1 RBAC とサービス アカウント
    5.1.1 cluster-admin ロールが必要な場合にのみ使用されていることを確認する スコアなし L1 環境に依存 なし スコアなし
    5.1.2 シークレットへのアクセスを最小限に抑える スコアなし L1 環境に依存 なし スコアなし
    5.1.3 Roles と ClusterRoles でのワイルドカードの使用を最小限に抑える スコアなし L1 環境に依存 なし スコアなし
    5.1.4 Pod の作成アクセスを最小限に抑える スコアなし L1 環境に依存 なし スコアなし
    5.1.5 デフォルトのサービス アカウントが実際に使用されていないことを確認する スコア付き L1 環境に依存 なし スコア付き
    5.1.6 サービス アカウント トークンが必要な場合のみマウントされていることを確認する スコアなし L1 環境に依存 なし スコアなし
    5.2 ポッド セキュリティ ポリシー
    5.2.1 特権付きコンテナの使用を最小限に抑える スコアなし L1 環境に依存 なし デフォルトでは、ポッド セキュリティ ポリシーは設定されていません。 スコア付き
    5.2.2 ホストプロセス ID の名前空間を共有するコンテナの許可を最小限に抑える スコア付き L1 環境に依存 なし デフォルトでは、ポッド セキュリティ ポリシーは設定されていません。 スコア付き
    5.2.3 ホスト IPC の名前空間を共有するコンテナの許可を最小限に抑える スコア付き L1 環境に依存 なし デフォルトでは、ポッド セキュリティ ポリシーは設定されていません。 スコア付き
    5.2.4 ホスト ネットワークの名前空間を共有するコンテナの許可を最小限に抑える スコア付き L1 環境に依存 なし デフォルトでは、ポッド セキュリティ ポリシーは設定されていません。 スコア付き
    5.2.5 allowPrivilegeEscalation を使用してコンテナの許可を最小限に抑える スコア付き L1 環境に依存 なし デフォルトでは、ポッド セキュリティ ポリシーは設定されていません。 スコア付き
    5.2.6 ルートコンテナの許可を最小限に抑える スコアなし L2 環境に依存 なし デフォルトでは、ポッド セキュリティ ポリシーは設定されていません。 スコア付き
    5.2.7 NET_RAW 機能を使用してコンテナの許可を最小限に抑える スコアなし L1 環境に依存 なし デフォルトでは、ポッド セキュリティ ポリシーは設定されていません。 スコア付き
    5.2.8 追加された機能を使用してコンテナの許可を最小限に抑える スコアなし L1 環境に依存 なし デフォルトでは、ポッド セキュリティ ポリシーは設定されていません。 スコア付き
    5.2.9 割り当てられた機能を使用してコンテナの許可を最小限に抑える スコアなし L2 環境に依存 なし デフォルトでは、ポッド セキュリティ ポリシーは設定されていません。 スコア付き
    5.3 ネットワーク ポリシーと CNI
    5.3.2 すべての名前空間にネットワーク ポリシーが定義されていることを確認する スコア付き L2 環境に依存 なし スコア付き
    5.4 シークレット管理
    5.4.1 環境変数としてのシークレットではなく、シークレットをファイルとして使用する スコアなし L1 環境に依存 なし スコアなし
    5.4.2 外部シークレット ストレージを検討する スコアなし L2 環境に依存 なし スコアなし
    5.5 拡張可能なアドミッション コントロール
    5.5.1 ImagePolicyWebhook アドミッション コントローラを使用してイメージの出所を構成する スコアなし L2 環境に依存 無効 GKE のデフォルトでは、Image Policy Webhook アドミッション コントローラは有効になりません。デフォルトでは、Binary Authorization を使用した画像の出所は設定されていないため、ポリシーを設定する必要があります。 スコアはありません。6.10.5 も参照してください。
    5.6 一般ポリシー
    5.6.1 名前空間を使用してリソース間の管理境界を作成する スコアなし L1 環境に依存 なし スコアなし
    5.6.2 ポッドの定義で seccomp プロファイルが docker/default に設定されていることを確認する スコアなし L2 環境に依存 なし デフォルトでは、seccomp プロファイルは設定されていません。 スコアなし
    5.6.3 セキュリティ コンテキストを Pod と Container に適用する スコアなし L2 環境に依存 なし デフォルトでは、セキュリティ コンテキストは設定されていません。 スコアなし
    5.6.4 デフォルトの名前空間が使用されていない スコア付き L2 環境に依存 なし スコア付き

    CIS GKE Benchmark

    ベンチマークへのアクセス

    CIS GKE Benchmark は CIS ウェブサイトで入手できます。

    • CIS ベンチマークの一覧に移動します。
    • 見出し「Kubernetes」の下にある [Expand to see related content] をクリックします。
    • CIS GKE Benchmark がダウンロード用に一覧表示されます。

    推奨レベル

    CIS GKE Benchmark:

    レベル 説明
    レベル 1

    推奨事項は広く適用されることを目的としています。これらはほぼすべての環境に適用されます。

    レベル 2

    推奨事項はより厳密なセキュリティ環境をもたらしますが、すべてのケースに適用できるとは限りません。これらは、パフォーマンスに影響を与える場合や、他の推奨事項と連携して適用できない場合があります。この場合、お客様の環境に適用する前に評価する必要があります。

    マルチテナント ワークロードなど、場合によってはこれらの推奨事項のほうがより重要になります。

    推奨スコア

    CIS GKE Benchmark:

    スコア付け 説明
    スコア付き

    推奨事項は、自動化された方法を使用して簡単にテストでき、明確に評価できます。

    これらの推奨事項には、一般提供のプロダクトや機能のみが含まれます。

    スコアなし

    推奨事項は、自動化を使用して容易に評価することはできず、ワークロードに適した実装を正確に評価する必要があります。これらの推奨事項は、ベータ版のプロダクトや機能を使用できます。

    たとえば、Pod セキュリティ ポリシーでは、ワークロードに固有のポリシーを使用する必要があります。これはベータ版機能であるため「スコアなし」となります。

    GKE での評価

    GKE 固有の推奨事項(セクション 6)は、すべてお客様の環境で「合格」ステータスに構成できる構成可能な事項であるため、Google では次の値を使用してデフォルト値を指定しています。

    ステータス 説明
    デフォルト 新しいクラスタは、デフォルトでベンチマークの推奨事項に準拠しています。
    非デフォルト 新しいクラスタは、デフォルトではベンチマークの推奨事項に準拠していません。
    環境に依存 GKE では、この推奨事項に関連する項目を構成していません。お客様の構成により、環境がベンチマークの推奨事項を遵守しているかどうかが決まります。

    GKE のデフォルト値

    指定されたバージョンで新しい GKE クラスタを作成すると、CIS Kubernetes Benchmark に対して以下のステータスを示します。

    デフォルト GKE クラスタのステータス:

    # 推奨事項 スコア付き / スコアなし レベル デフォルトのステータス
    6 マネージド サービス
    6.1 イメージ レジストリとイメージ スキャン
    6.1.1 イメージの脆弱性スキャンが GCR Container Analysis またはサードパーティ プロバイダを使用していることを確認する スコア付き L1 非デフォルト
    6.1.2 GCR へのユーザー アクセスを最小限に抑える スコア付き L1 環境に依存
    6.1.3 GCR の読み取り専用クラスタへのアクセスを最小限に抑える スコア付き L1 非デフォルト
    6.1.4 Container ReCIStries を承認したユーザーのみに制限する スコアなし L2 非デフォルト
    6.2 Identity and Access Management(IAM)
    6.2.1 GKE クラスタの実行時に Compute Engine のデフォルト サービス アカウントを使用しないようにする スコア付き L2 非デフォルト
    6.2.2 専用の GCP サービス アカウントとワークロード ID を使用する スコアなし L1 非デフォルト
    6.3 Cloud Key Management Service (Cloud KMS)
    6.3.1 Cloud KMS で管理されている鍵を使用して Kubernetes Secrets を暗号化する スコア付き L1 非デフォルト
    6.4 ノードのメタデータ
    6.4.1 従来の Compute Engine インスタンスのメタデータ API が無効になっていることを確認する スコア付き L1 デフォルト
    6.4.2 GKE メタデータ サーバーが有効になっていることを確認する スコアなし L2 非デフォルト
    6.5 ノードの構成とメンテナンス
    6.5.1 GKE ノードイメージに Container-Optimized OS(COS)が使用されていることを確認する スコア付き L2 デフォルト
    6.5.2 ノードの自動修復が GKE ノードに対して有効になっていることを確認する スコア付き L1 デフォルト
    6.5.3 ノードの自動アップグレードが GKE ノードに対して有効になっていることを確認する スコア付き L1 デフォルト
    6.5.4 リリース チャンネルを使用した GKE バージョン管理の自動化を検討する スコアなし L1 非デフォルト
    6.5.5 シールドされた GKE ノードが有効になっていることを確認する スコアなし L1 非デフォルト
    6.5.6 シールドされた GKE ノードの整合性モニタリングが有効になっていることを確認する スコアなし L1 非デフォルト
    6.5.7 シールドされた GKE ノードのセキュアブートが有効になっていることを確認する スコアなし L2 非デフォルト
    6.6 クラスタ ネットワーク
    6.6.1 VPC フローログとノード内の可視性の有効化を検討する スコアなし L2 非デフォルト
    6.6.2 VPC ネイティブ クラスタを優先する スコア付き L1 非デフォルト
    6.6.3 Master Authorized Networks が有効になっていることを確認する スコア付き L1 非デフォルト
    6.6.4 プライベート エンドポイントを有効にし、パブリック アクセスを無効にしてクラスタが作成されていることを確認する スコア付き L2 非デフォルト
    6.6.5 クラスタがプライベート ノードで作成されていることを確認する スコア付き L1 非デフォルト
    6.6.6 GKE ワーカーノードのファイアウォールを検討する スコアなし L1 非デフォルト
    6.6.7 ネットワーク ポリシーが有効であり、適切に設定されていることを確認する スコアなし L1 非デフォルト
    6.6.8 Google マネージド SSL 証明書の使用を検討する スコアなし L2 環境に依存
    6.7 ロギング
    6.7.1 Stackdriver Kubernetes のロギングとモニタリングが有効になっていることを確認する スコア付き L1 デフォルト
    6.7.2 Linux auditd デーモンのロギングの有効化を検討する スコアなし L2 非デフォルト
    6.8 認証と認可
    6.8.1 静的パスワードを使用した基本認証を無効にする スコア付き L1 デフォルト
    6.8.2 クライアント証明書を使用する認証が無効になっていることを確認する スコア付き L1 デフォルト
    6.8.3 GKE 向け Google グループで Kubernetes RBAC ユーザーを管理することを検討する スコアなし L2 非デフォルト
    6.8.4 レガシー認可(ABAC)が無効になっていることを確認する スコア付き L1 デフォルト
    6.9 ストレージ
    6.9.1 GKE 永続ディスク(PD)で顧客管理の暗号鍵(CMEK)を有効にすることを検討する スコアなし L1 非デフォルト
    6.10 その他のクラスタ構成
    6.10.1 Kubernetes ウェブ UI が無効になっていることを確認する スコア付き L1 デフォルト
    6.10.2 本番環境のワークロードにアルファ クラスタを使用していないことを確認する スコア付き L1 デフォルト
    6.10.3 ポッド セキュリティ ポリシーが有効で、適切に設定されていることを確認する スコアなし L1 非デフォルト
    6.10.4 信頼できないワークロードを実行するために GKE Sandbox を検討する スコアなし L2 非デフォルト
    6.10.5 Binary Authorization を有効にし、必要に応じてポリシーを構成する スコアなし L2 非デフォルト
    6.10.6 Cloud Security Command Center(Cloud SCC)を有効にする スコアなし L1 非デフォルト

    ベンチマークを監査する方法

    各推奨事項を監査するための具体的な手順は、関連する CIS ベンチマークの一環として利用できます。ただし、これらのチェックの一部を自動化して、お客様の環境でのこれらのコントロールの検証を簡素化することもできます。以下のツールは、この問題を解決するのに有効です。

    なお、GKE で監査できない CIS Kubernetes Benchmark の推奨事項を監査することはできません。直接監査できないコンポーネントについては、デフォルト値を参照して、お客様の環境が GKE によってどのように構成されているかご確認ください。

    CIS Kubernetes Benchmark の自動監査

    オープンソース ツール kube-bench を使用して、CIS Kubernetes Benchmark に対してクラスタ構成をテストできます。なお、コントロール プレーン ノードに直接アクセスできないため、GKE ワークロードに対して kube-bench master テストは実行できず、kube-bench node テストのみを実行できます。

    適切なバージョンを指定してください。次に例を示します。

    kube-bench node --benchmark cis-1.5
    

    CIS GKE Benchmark の自動監査

    Security Health Analytics では、環境内の一般的な構成ミス(ポートが開いているファイアウォールや公開されているバケットなど)を特定します。これには、GKE のセキュリティに関する推奨事項が含まれます。Security Health Analytics を有効にすると、Cloud Security Command Center でクラスタの構成ミスが通知されます。

    レベル 1 の推奨スコアの多くは、Security Health Analytics に対応する検出の対象です。

    # 推奨事項 スコア付き / スコアなし レベル セキュリティ状況の分析の検出
    6.1 イメージ レジストリとイメージ スキャン
    6.1.1 イメージの脆弱性スキャンが GCR Container Analysis またはサードパーティ プロバイダを使用していることを確認する スコア付き L1 なし
    6.1.2 GCR へのユーザー アクセスを最小限に抑える スコア付き L1 なし
    6.1.3 GCR の読み取り専用クラスタへのアクセスを最小限に抑える スコア付き L1 なし
    6.1.4 Container ReCIStries を承認したユーザーのみに制限する スコアなし L2 なし
    6.2 Identity and Access Management(IAM)
    6.2.1 GKE クラスタの実行時に Compute Engine のデフォルト サービス アカウントを使用しないようにする スコア付き L2 OVER_PRIVILEGED_ACCOUNTOVER_PRIVILEGED_SCOPES
    6.2.2 専用の GCP サービス アカウントとワークロード ID を使用する スコアなし L1 WORKLOAD_IDENTITY_DISABLED
    6.3 Cloud Key Management Service (Cloud KMS)
    6.3.1 Cloud KMS で管理されている鍵を使用して Kubernetes Secrets を暗号化する スコア付き L1 なし
    6.4 ノードのメタデータ
    6.4.1 従来の Compute Engine インスタンスのメタデータ API が無効になっていることを確認する スコア付き L1 LEGACY_METADATA_ENABLED
    6.4.2 GKE メタデータ サーバーが有効になっていることを確認する スコアなし L2 なし
    6.5 ノードの構成とメンテナンス
    6.5.1 GKE ノードイメージに Container-Optimized OS(COS)が使用されていることを確認する スコア付き L2 COS_NOT_USED
    6.5.2 ノードの自動修復が GKE ノードに対して有効になっていることを確認する スコア付き L1 AUTO_REPAIR_DISABLED
    6.5.3 ノードの自動アップグレードが GKE ノードに対して有効になっていることを確認する スコア付き L1 AUTO_UPGRADE_DISABLED
    6.5.4 リリース チャンネルを使用した GKE バージョン管理の自動化を検討する スコアなし L1 なし
    6.5.5 シールドされた GKE ノードが有効になっていることを確認する スコアなし L1 なし
    6.5.6 シールドされた GKE ノードの整合性モニタリングが有効になっていることを確認する スコアなし L1 なし
    6.5.7 シールドされた GKE ノードのセキュアブートが有効になっていることを確認する スコアなし L2 なし
    6.6 クラスタ ネットワーク
    6.6.1 VPC フローログとノード内の可視性の有効化を検討する スコアなし L2 FLOW_LOGS_DISABLED
    6.6.2 VPC ネイティブ クラスタを優先する スコア付き L1 IP_ALIAS_DISABLED
    6.6.3 Master Authorized Networks が有効になっていることを確認する スコア付き L1 MASTER_AUTHORIZED_NETWORKS_DISABLED
    6.6.4 プライベート エンドポイントを有効にし、パブリック アクセスを無効にしてクラスタが作成されていることを確認する スコア付き L2 なし
    6.6.5 クラスタがプライベート ノードで作成されていることを確認する スコア付き L1 PRIVATE_CLUSTER_DISABLED は、限定公開クラスタ構成の存在を確認しますが、ノードが限定公開であることは確認しません。
    6.6.6 GKE ワーカーノードのファイアウォールを検討する スコアなし L1 なし
    6.6.7 ネットワーク ポリシーが有効であり、適切に設定されていることを確認する スコアなし L1 NETWORK_POLICY_DISABLED
    6.6.8 Google マネージド SSL 証明書の使用を検討する スコアなし L2 なし
    6.7 ロギング
    6.7.1 Stackdriver Kubernetes のロギングとモニタリングが有効になっていることを確認する スコア付き L1 CLUSTER_LOGGING_DISABLEDCLUSTER_MONITORING_DISABLED
    6.7.2 Linux auditd デーモンのロギングの有効化を検討する スコアなし L2 なし
    6.8 認証と認可
    6.8.1 静的パスワードを使用した基本認証を無効にする スコア付き L1 なし
    6.8.2 クライアント証明書を使用する認証が無効になっていることを確認する スコア付き L1 なし
    6.8.3 GKE 向け Google グループで Kubernetes RBAC ユーザーを管理することを検討する スコアなし L2 なし
    6.8.4 レガシー認可(ABAC)が無効になっていることを確認する スコア付き L1 LEGACY_AUTHORIZATION_ENABLED
    6.9 ストレージ
    6.9.1 GKE 永続ディスク(PD)で顧客管理の暗号鍵(CMEK)を有効にすることを検討する スコアなし L1 なし
    6.10 その他のクラスタ構成
    6.10.1 Kubernetes ウェブ UI が無効になっていることを確認する スコア付き L1 WEB_UI_ENABLED
    6.10.2 本番環境のワークロードにアルファ クラスタを使用していないことを確認する スコア付き L1 なし
    6.10.3 ポッド セキュリティ ポリシーが有効で、適切に設定されていることを確認する スコアなし L1 POD_SECURITY_POLICY_DISABLED
    6.10.4 信頼できないワークロードを実行するために GKE Sandbox を検討する スコアなし L2 なし
    6.10.5 Binary Authorization を有効にし、必要に応じてポリシーを構成する スコアなし L2 なし
    6.10.6 Cloud Security Command Center(Cloud SCC)を有効にする スコアなし L1 なし

    次のステップ