CIS ベンチマーク

このページでは、CIS Kubernetes Benchmark の概要、評価、推奨事項に対応するために Google Distributed Cloud が行うことについて説明します。

CIS ベンチマーク

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

バージョン

次の表に、このドキュメントで説明する評価の実行に使用した Distributed Cloud のバージョン、Kubernetes と CIS Kubernetes Benchmark のバージョンを示します。

Distributed Cloud のバージョン Kubernetes のバージョン CIS Kubernetes Benchmark のバージョン
1.4.0 - ローカル コントロール プレーン 1.25 1.70

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

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

推奨レベル

CIS Kubernetes Benchmark では、

レベル 説明
レベル 1

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

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

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

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

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

    評価ステータスはすべての推奨事項に含まれます。評価ステータスは、該当する推奨事項が自動化できるか、それとも実装するために手動での手順が必要かを示します。どちらのステータスも等しく重要であり、次の定義に示すとおりに決定されてサポートされます。

    スコア付け 説明
    自動 技術制御の評価を完全に自動化でき、合否の状態を判定できる場合の推奨事項を表します。推奨事項には、自動化を実装するために必要な情報が含まれます。
    手動 その推奨事項の技術的統制の評価を完全自動化することはできず、構成済みの状態が期待どおりに設定されていることを検証する手順の全体または一部を手動で行う必要があることを表します。期待される状態は環境によって異なります。

    Distributed Cloud ローカル コントロール プレーン クラスタのステータス

    # 推奨 レベル ステータス
    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 ファイルの権限が、600 またはそれより制限された値に設定されていることを確認する(自動) 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 --token-auth-file パラメータが設定されていないことを確認する(自動) L1 合格
    1.2.3 --DenyServiceExternalIPs が設定されていないことを確認する(自動) L1 不合格
    1.2.4 --kubelet-client-certificate 引数と --kubelet-client-key 引数が適切に設定されていることを確認する(自動) L1 合格
    1.2.5 --kubelet-certificate-authority 引数が適切に設定されていることを確認する(自動) L1 合格
    1.2.6 --authorization-mode 引数が AlwaysAllow に設定されていないことを確認する(自動) L1 合格
    1.2.7 --authorization-mode 引数にノードが含まれていることを確認する(自動) L1 合格
    1.2.8 --authorization-mode 引数に RBAC が含まれていることを確認する(自動) L1 不合格
    1.2.9 アドミッション コントロール プラグインの EventRateLimit が設定されていることを確認する(手動) L1 合格
    1.2.10 アドミッション コントロール プラグインの AlwaysAdmit が設定されていないことを確認する(自動) L1 Pass
    1.2.11 アドミッション コントロール プラグインの AlwaysPullImages が設定されていることを確認する(手動) L1 失敗
    1.2.12 PodSecurityPolicy が使用されていない場合は、アドミッション コントロール プラグインの SecurityContextDeny が設定されていることを確認する(手動) L1 警告
    1.2.13 アドミッション コントロール プラグインの ServiceAccount が設定されていることを確認する(自動) L1 Pass
    1.2.14 アドミッション コントロール プラグインの NamespaceLifecycle が設定されていることを確認する(自動) L1 合格
    1.2.15 アドミッション コントロール プラグインの NodeRestriction が設定されていることを確認する(自動) L1 合格
    1.2.16 --secure-port 引数が 0 に設定されていないことを確認する(自動) L1 合格
    1.2.17 --profiling 引数が false に設定されていることを確認する(自動) L1 合格
    1.2.18 --audit-log-path 引数が設定されていることを確認する(自動) L1 不合格
    1.2.19 --audit-log-maxage 引数が 30 または適切な値に設定されていることを確認する(自動) L1 不合格
    1.2.20 --audit-log-maxbackup 引数が 10 または適切な値に設定されていることを確認する(自動) L1 不合格
    1.2.21 --audit-log-maxsize 引数が 100 または適切な値に設定されていることを確認する(自動) L1 不合格
    1.2.22 --request-timeout 引数が適切に設定されていることを確認する(手動) L1 不合格
    1.2.23 --service-account-lookup 引数が true に設定されていることを確認する(自動) L1 合格
    1.2.24 --service-account-key-file 引数が適切に設定されていることを確認する(自動) L1 合格
    1.2.25 --etcd-certfile 引数と --etcd-keyfile 引数が適切に設定されていることを確認する(自動) L1 合格
    1.2.26 --tls-cert-file 引数と --tls-private-key-file 引数が適切に設定されていることを確認する(自動) L1 合格
    1.2.27 --client-ca-file 引数が適切に設定されていることを確認する(自動) L1 合格
    1.2.28 --etcd-cafile 引数が適切に設定されていることを確認する(自動) L1 合格
    1.2.29 --encryption-provider-config 引数が適切に設定されていることを確認する(手動) L1 合格
    1.2.30 暗号化プロバイダが適切に構成されていることを確認する(手動) L1 合格
    1.2.31 API サーバーが強力な暗号のみを使用していることを確認する(手動) L1 合格
    1.3 コントローラ マネージャー
    1.3.1 --terminated-pod-gc-threshold 引数が適切に設定されていることを確認する(手動) 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 --kubeconfig kubelet.conf ファイルの権限が、644 またはそれより制限された値に設定されていることを確認する(自動) L1 合格
    4.1.6 --kubeconfig kubelet.conf ファイルのオーナー権限が root:root に設定されていることを確認する(自動) L1 合格
    4.1.7 認証局ファイルへのアクセス許可が 644 またはそれより制限が厳しい値に設定されていることを確認する(手動) L1 不合格
    4.1.8 クライアント認証局ファイルのオーナー権限が root:root に設定されていることを確認する(手動) L1 合格
    4.1.9 kubelet の --config 構成ファイルの権限が、644 またはそれより制限された値に設定されていることを確認する(自動) L1 不合格
    4.1.10 kubelet の --config 構成ファイルのオーナー権限が 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 引数が設定されていないことを確認する(手動) L2 合格
    4.2.9 --event-qps 引数が 0 か、適切なイベント キャプチャを維持するレベルに設定されていることを確認する(手動) L1 同等の統制
    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 不合格

    Distributed Cloud ローカル コントロール プレーン クラスタの障害と同等の統制

    # 推奨 レベル ステータス 理由
    1 コントロール プレーンのセキュリティ構成
    1.1.9 Container Network Interface のファイルへのアクセス許可が、644 またはそれより制限された値に設定されていることを確認する(手動) L1 同等の統制 755 なし
    1.1.11 etcd データ ディレクトリの権限が、700 またはそれより制限された値に設定されていることを確認する(自動) L1 同等の統制 755 etcd データ ディレクトリにはデフォルトの 755 権限が設定されていますが、サブディレクトリは 700 を使用します。
    1.1.12 etcd データ ディレクトリのオーナー権限が etcd:etcd に設定されていることを確認する(自動) L1 同等の統制 2003:2003 etcd データ ディレクトリ /var/lib/etcd は、セキュリティ強化のためのルートレス コントロール プレーンにより、2003:2003 によって所有されます。
    1.1.16 scheduler.conf ファイルのオーナー権限が root:root に設定されていることを確認する(自動) L1 同等の統制 2002:2002 scheduler.conf は、強化されたセキュリティのためのルートレス コントロール プレーンにより、2002:2002 によって所有されます。
    1.1.18 controller-manager.conf ファイルのオーナー権限が root:root に設定されていることを確認する(自動) L1 同等の統制 2001:2001 controller-manager.conf は、強化されたセキュリティのためのルートレス コントロール プレーンにより、2001:2001 によって所有されます。
    1.1.19 Kubernetes PKI ディレクトリとファイルのオーナー権限が root:root に設定されていることを確認する(自動) L1 同等の統制 場合によって異なる PKI ディレクトリ /etc/kubernetes/pkiroot:root が所有しています。ディレクトリ内のファイルの所有者はさまざまです。これは、セキュリティ強化のためのルートレス コントロール プレーンによるものです。
    1.1.20 Kubernetes PKI 証明書ファイルへのアクセス許可が 644 またはそれより制限が厳しい値に設定されていることを確認する(手動) L1 同等の統制 644 これは、セキュリティ強化のためのルートレス コントロール プレーンによるものです。
    1.2 API サーバー
    1.2.3 --DenyServiceExternalIPs が設定されていないことを確認する(自動) L1 不合格
    1.2.9 --authorization-mode 引数に RBAC が含まれていることを確認する(自動) L1 不合格 Event Rate Limit アドミッション コントローラは Kubernetes のアルファ版機能です。Google Distributed Cloud は、一般提供(GA)以外の機能をサポートしていません。
    1.2.11 アドミッション コントロール プラグイン AlwaysAdmit が設定されていないことを確認する(自動) L1 失敗
    1.2.12 アドミッション コントロール プラグイン AlwaysPullImages が設定されていることを確認する(手動) L1 不合格 AlwaysPullImages アドミッション コントローラは、非協調型のマルチテナント クラスタの非公開レジストリ イメージを保護しますが、クラスタ全体で新しい Pod を作成する際にコンテナ レジストリが単一障害点となります。Distributed Cloud クラスタでは AlwaysPullImages アドミッション コントローラは有効になりません。クラスタ管理者がこのトレードオフを判断し、アドミッション ポリシーを実装するかどうか決める必要があります。
    1.2.18 --audit-log-path 引数が設定されていることを確認する(自動) L1 不合格 Distributed Cloud は監査ログをキャプチャしますが、監査にはこのフラグを使用しません。詳細については、監査ロギングをご覧ください。
    1.2.19 --audit-log-maxage 引数が 30 または適切な値に設定されていることを確認する(自動) L1 不合格 Distributed Cloud は監査ログをキャプチャしますが、監査にはこのフラグを使用しません。詳細については、監査ロギングをご覧ください。
    1.2.20 --audit-log-maxbackup 引数が 10 または適切な値に設定されていることを確認する(自動) L1 不合格 Distributed Cloud は監査ログをキャプチャしますが、監査にはこのフラグを使用しません。詳細については、監査ロギングをご覧ください。
    1.2.21 --audit-log-maxsize 引数が 100 または適切な値に設定されていることを確認する(自動) L1 不合格 Distributed Cloud は監査ログをキャプチャしますが、監査にはこのフラグを使用しません。詳細については、監査ロギングをご覧ください。
    1.2.22 --request-timeout 引数が適切に設定されていることを確認する(手動) L1 不合格 Distributed Cloud は監査ログをキャプチャしますが、監査にはこのフラグを使用しません。詳細については、監査ロギングをご覧ください。
    3 コントロール プレーンの構成
    3.2.2 監査ポリシーの対象に重要なセキュリティ問題が含まれていることを確認する(手動) L2 不合格
    4 ワーカーノードのセキュリティ構成
    4.1.1 kubelet サービス ファイルへのアクセス許可が 644 またはそれより制限が厳しい値に設定されていることを確認する(自動) L1 不合格 755
    4.1.7 認証局ファイルへのアクセス許可が 644 またはそれより制限が厳しい値に設定されていることを確認する(手動) L1 不合格
    4.1.9 kubelet の --config 構成ファイルの権限が、644 またはそれより制限された値に設定されていることを確認する(自動) L1 不合格 644
    4.2.4 --read-only-port 引数が 0 に設定されていることを確認する(手動) L1 不合格 Distributed Cloud クラスタは、kubelet 指標を収集するために --read-only-port 引数を 10255 に設定します。
    4.2.9 --event-qps 引数が 0 か、適切なイベント キャプチャを維持するレベルに設定されていることを確認する(手動) L1 同等の統制 Distributed Cloud クラスタは、–rotate-server-certificates フラグを使用して kubelet サーバー TLS を管理します。
    4.2.13 Kubelet が強力な暗号のみを使用していることを確認する(手動) L1 不合格