このドキュメントでは、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 Benchmark セクションを実行するには、run --targets コマンドを使用します。次に例を示します。
kube-bench run --targets master,node
詳細については、kube-bench の実行とコマンドとフラグに関する kube-bench のドキュメントをご覧ください。