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 argument 引数が 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 不合格

    監査ベンチマーク

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

    CIS Kubernetes Benchmark の自動監査

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

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

    kube-bench --benchmark BENCHMARK_VERSION
    

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

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

    kube-bench run --targets master,node
    

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