CIS Kubernetes Benchmark

このドキュメントでは、CIS Kubernetes Benchmark の概要、ベンチマークで遵守状況を監査する方法、推奨事項を実装できない場合の Google Distributed Cloud(GDC)エアギャップの構成について説明します。

CIS ベンチマークについて

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

ベンチマークにアクセスする

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

推奨レベル

次の表に、CIS Kubernetes Benchmark の推奨レベルを示します。

レベル 説明
レベル 1

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

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

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

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

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

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

    バージョン

    この評価では、次のバージョンを参照しています。

    ベアメタル版 GDC Kubernetes のバージョン CIS Kubernetes Benchmark のバージョン
    1.30 1.30.9 v0.10.4

    GDC エアギャップ Kubernetes クラスタのステータス

    # 推奨 レベル ステータス
    1 コントロール プレーンのセキュリティ構成
    1.1 コントロール プレーンノード構成ファイル
    1.1.1 API サーバーの Pod 仕様ファイルへのアクセス許可が、600 またはそれより制限された値に設定されている確認する(自動) L1 合格
    1.1.2 API サーバーの Pod 仕様ファイルのオーナー権限が root:root に設定されていることを確認する(自動) L1 合格
    1.1.3 コントローラ マネージャーの Pod 仕様ファイルへのアクセス許可が、600 またはそれより制限された値に設定されていることを確認する(自動) L1 合格
    1.1.4 コントローラ マネージャーの Pod 仕様ファイルのオーナー権限が root:root に設定されていることを確認する(自動) L1 合格
    1.1.5 スケジューラの Pod 仕様ファイルへのアクセス許可が、600 またはそれより制限された値に設定されていることを確認する(自動) L1 合格
    1.1.6 スケジューラの Pod 仕様ファイルのオーナー権限が root:root に設定されていることを確認する(自動) L1 合格
    1.1.7 etcd の Pod 仕様ファイルへのアクセス許可が、600 またはそれより制限された値に設定されていることを確認する(自動) L1 合格
    1.1.8 etcd の Pod 仕様ファイルのオーナー権限が root:root に設定されていることを確認する(自動) L1 合格
    1.1.9 Container Network Interface のファイルへのアクセス許可が、600 またはそれより制限された値に設定されていることを確認する(手動) 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 デフォルトの管理者認証情報ファイルの権限が 600 に設定されていることを確認する(自動) L1 合格
    1.1.14 デフォルトの管理認証情報ファイルのオーナー権限が root:root に設定されていることを確認する(自動) L1 合格
    1.1.15 scheduler.conf ファイルの権限が、600 またはそれより制限された値に設定されていることを確認する(自動) L1 合格
    1.1.16 scheduler.conf ファイルのオーナー権限が root:root に設定されていることを確認する(自動) L1 不合格
    1.1.17 controller-manager.conf ファイルの権限が、600 またはそれより制限された値に設定されていることを確認する(自動) L1 合格
    1.1.18 controller-manager.conf ファイルのオーナー権限が root:root に設定されていることを確認する(自動) L1 不合格
    1.1.19 Kubernetes PKI ディレクトリとファイルのオーナー権限が root:root に設定されていることを確認する(自動) L1 不合格
    1.1.20 Kubernetes PKI 証明書ファイルへのアクセス許可が 600 またはそれより制限が厳しい値に設定されていることを確認する(手動) 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 アドミッション コントロール プラグイン ServiceAccount が設定されていることを確認する(自動) L1 合格
    1.2.13 アドミッション コントロール プラグイン NamespaceLifecycle が設定されていることを確認する(自動) L1 Pass
    1.2.14 アドミッション コントロール プラグイン NodeRestriction が設定されていることを確認する(自動) L1 合格
    1.2.15 --profiling 引数が false に設定されていることを確認する(自動) L1 合格
    1.2.16 --audit-log-path 引数が設定されていることを確認する(自動) L1 合格
    1.2.17 --audit-log-maxage 引数が 30 または適切な値に設定されていることを確認する(自動) L1 合格
    1.2.18 --audit-log-maxbackup 引数が 10 または適切な値に設定されていることを確認する(自動) L1 合格
    1.2.19 --audit-log-maxsize 引数が 100 または適切な値に設定されていることを確認する(自動) L1 合格
    1.2.20 --request-timeout 引数が適切に設定されていることを確認する(手動) L1 警告
    1.2.21 --service-account-lookup 引数が true に設定されていることを確認する(自動) L1 合格
    1.2.22 --service-account-key-file 引数が適切に設定されていることを確認する(自動) L1 Pass
    1.2.23 --etcd-certfile 引数と --etcd-keyfile 引数が適切に設定されていることを確認する(自動) L1 合格
    1.2.24 --tls-cert-file 引数と --tls-private-key-file 引数が適切に設定されていることを確認する(自動) L1 合格
    1.2.25 --client-ca-file 引数が適切に設定されていることを確認する(自動) L1 合格
    1.2.26 --etcd-cafile 引数が適切に設定されていることを確認する(自動) L1 合格
    1.2.27 --encryption-provider-config 引数が適切に設定されていることを確認する(手動) L1 合格
    1.2.28 暗号化プロバイダが適切に構成されていることを確認する(手動) L1 合格
    1.2.29 API サーバーが強力な暗号のみを使用していることを確認する(手動) L1 合格
    1.3 コントローラ マネージャー
    1.3.1 --terminated-pod-gc-threshold 引数が適切に設定されていることを確認する(手動) L1 合格
    1.3.2 --profiling argumentfalse に設定されていることを確認する(自動) 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 不合格

    監査ベンチマーク

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

    CIS Kubernetes Benchmark の自動監査

    オープンソース ツール kube-bench を使用して、CIS Kubernetes Benchmark に対してクラスタ構成をテストできます。

    適切なバージョンを指定してください。たとえば、

    kube-bench --benchmark BENCHMARK_VERSION
    

    BENCHMARK_VERSION は、クラスタの評価に使用している CIS Kubernetes Benchmark のバージョンに置き換えます。

    マスター、ノード、etcd などの特定の CIS Benchmark セクションを実行するには、run --targets コマンドを使用します。次に例を示します。

    kube-bench run --targets master,node
    

    詳細については、kube-bench の実行コマンドとフラグに関する kube-bench のドキュメントをご覧ください。