Center for Internet Security (CIS) Kubernetes ベンチマーク

Azure Kubernetes Service (AKS) は安全なサービスとして、SOC、ISO、PCI DSS、HIPAA の各標準に準拠しています。 この記事では、CIS Kubernetes ベンチマークに基づいて AKS に適用されるセキュリティ ハードニングについて説明します。 AKS のセキュリティについて詳しくは、「Azure Kubernetes Service (AKS) でのアプリケーションとクラスターに対するセキュリティの概念」をご覧ください。 詳細については、Center for Internet Security (CIS) ベンチマークに関するページを参照してください。

Kubernetes CIS ベンチマーク

AKS での CIS Kubernetes V1.27 Benchmark v1.8.0 推奨事項の結果を次に示します。 結果は AKS 1.21.x から AKS 1.27.x に適用されます。

スコア付き推奨事項は、これが適用されていない場合にベンチマーク スコアに影響しますが、スコアなし推奨事項は影響しません。

CIS ベンチマークには 2 つのレベルのセキュリティ設定があります。

  • L1 (レベル 1) は、あらゆるシステムで構成でき、サービスの中断や機能の低下をほとんど、またはまったく引き起こさない、不可欠となる基本セキュリティ要件を推奨しています。
  • L2 (レベル 2) は、機能の低下を引き起こす可能性のある、より高度なセキュリティを必要とする環境向けのセキュリティ設定を推奨しています。

推奨事項のステータスは次のいずれかになります。

  • 合格 - 推奨事項が適用されています。
  • "不合格" - 推奨事項が適用されていません。
  • 該当なし - 推奨事項は、AKS に関連しないマニフェスト ファイルのアクセス許可の要件に関するものです。 既定では、Kubernetes クラスターはマニフェストモデルを使用してコントロール プレーン ポッドをデプロイします。これは、ノード VM のファイルに依存しています。 CIS Kubernetes ベンチマークでは、これらのファイルに特定のアクセス許可の要件を指定する必要があることが推奨されています。 ASK クラスターは Helm チャートを使用してコントロール プレーン ポッドをデプロイし、ノード VM のファイルには依存しません。
  • "環境に依存" - 推奨事項はユーザー固有の環境内で適用され、AKS によって制御されることはありません。 スコア付き推奨事項は、推奨事項がユーザー固有の環境に適用されるかどうかに関係なく、ベンチマーク スコアに影響します。
  • 同等の制御 - 推奨事項は、同等の異なる方法で実装されています。
CIS ID 推奨事項の説明 スコア付けタイプ Level 状態
1 コントロール プレーンのコンポーネント
1.1 コントロール プレーン ノードの構成ファイル
1.1.1 API サーバーのポッド仕様ファイルのアクセス許可が、600 またはより制限された値に設定されていることを確認する スコア付き L1 該当なし
1.1.2 API サーバー ポッド仕様ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 該当なし
1.1.3 コントローラー マネージャーのポッド仕様ファイルのアクセス許可が、600 またはより制限された値に設定されていることを確認する スコア付き L1 該当なし
1.1.4 コントローラー マネージャー ポッド仕様ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 該当なし
1.1.5 スケジューラのポッド仕様ファイルのアクセス許可が、600 またはより制限された値に設定されていることを確認する スコア付き L1 該当なし
1.1.6 スケジューラ ポッド仕様ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 該当なし
1.1.7 etcd のポッド仕様ファイルのアクセス許可が、600 またはより制限された値に設定されていることを確認する スコア付き L1 該当なし
1.1.8 etcd ポッド仕様ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 該当なし
1.1.9 Container Network Interface ファイルのアクセス許可が、600 またはより制限された値に設定されていることを確認する スコアなし L1 該当なし
1.1.10 コンテナー ネットワーク インターフェイス ファイルの所有権が 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 ファイルのアクセス許可が、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 引数に Node が含まれていることを確認する スコア付き L1 合格
1.2.8 --authorization-mode 引数に RBAC が含まれていることを確認する スコア付き L1 合格
1.2.9 アドミッション コントロール プラグイン EventRateLimit が設定されていることを確認する スコアなし L1 失敗
1.2.10 アドミッション コントロール プラグイン AlwaysAdmit が常に設定されていないことを確認する スコア付き L1 合格
1.2.11 アドミッション コントロール プラグイン AlwaysPullImages が設定されていることを確認する スコアなし L1 失敗
1.2.12 PodSecurityPolicy が使用されていない場合は、アドミッション コントロール プラグイン SecurityContextDeny が設定されていることを確認する スコアなし L1 失敗
1.2.13 アドミッション コントロール プラグイン ServiceAccount が設定されていることを確認する スコア付き L1 合格
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 Scheduler
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.1.2 サービス アカウント トークン認証をユーザーに使用しない スコアなし L2 パス
3.1.3 ブートストラップ トークン認証をユーザーに使用しない スコアなし L2 合格
3.2 ログの記録
3.2.1 最小限の監査ポリシーが作成されていることを確認する スコア付き L1 合格
3.2.2 監査ポリシーが重要なセキュリティ問題に対応していることを確認する スコアなし L2 合格
4 ワーカー ノード
4.1 ワーカー ノード構成ファイル
4.1.1 kubelet サービス ファイルのアクセス許可が、600 またはより制限された値に設定されていることを確認する スコア付き L1 合格
4.1.2 kubelet サービス ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
4.1.3 プロキシ kubeconfig ファイルが存在する場合は、アクセス許可が 600 またはより制限された値に設定されていることを確認する スコア付き L1 該当なし
4.1.4 プロキシ kubeconfig ファイルが存在する場合は、所有権が root:root に設定されていることを確認する スコア付き L1 該当なし
4.1.5 --kubeconfig kubelet.conf ファイルのアクセス許可が 600 またはより制限された値に設定されていることを確認する スコア付き L1 合格
4.1.6 --kubeconfig kubelet.conf ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
4.1.7 証明機関ファイルのアクセス許可が 600 またはより制限された値に設定されていることを確認する スコア付き L1 合格
4.1.8 クライアント証明機関ファイルの所有権が root:root に設定されていることを確認する スコア付き L1 合格
4.1.9 kubelet config.yaml 構成ファイルを使っている場合は、アクセス許可が 600 またはより制限された値に設定されていることを確認する スコア付き L1 合格
4.1.10 kubelet config.yaml 構成ファイルを使っている場合は、ファイルの所有権が 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 eventRecordQPS 引数が適切なイベント取り込みを保証するレベルに設定されていることを確認する スコアなし 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 ポッド作成のためのアクセスを最小限に抑える スコアなし L1 環境に依存
5.1.5 既定のサービス アカウントがアクティブに使用されていないことを確認する スコア付き L1 環境に依存
5.1.6 サービス アカウント トークンが必要な場合にのみマウントされていることを確認する スコアなし L1 環境に依存
5.1.7 system:masters グループを使用しない スコアなし L1 環境に依存
5.1.8 Kubernetes クラスターでの Bind、Impersonate、Escalate アクセス許可の使用を制限する スコアなし L1 環境に依存
5.1.9 永続ボリュームを作成するためのアクセスを最小限に抑える スコアなし L1 環境に依存
5.1.10 ノードのプロキシ サブリソースへのアクセスを最小限に抑える スコアなし L1 環境に依存
5.1.11 certificatesigningrequests オブジェクトの承認サブリソースへのアクセスを最小限に抑える スコアなし L1 環境に依存
5.1.12 Webhook 構成オブジェクトへのアクセスを最小限に抑える スコアなし L1 環境に依存
5.1.13 サービス アカウント トークン作成へのアクセスを最小限に抑える スコアなし L1 環境に依存
5.2 ポッドのセキュリティ ポリシー
5.2.1 クラスターに少なくとも 1 つのアクティブなポリシー制御メカニズムが配置されていることを確認する スコアなし L1 環境に依存
5.2.2 特権付きコンテナーの許可を最小限に抑える スコアなし L1 環境に依存
5.2.3 ホスト プロセス ID の名前空間の共有を希望するコンテナーの許可を最小限に抑える スコア付き L1 環境に依存
5.2.4 ホスト IPC の名前空間の共有を希望するコンテナーの許可を最小限に抑える スコア付き L1 環境に依存
5.2.5 ホスト ネットワークの名前空間の共有を希望するコンテナーの許可を最小限に抑える スコア付き L1 環境に依存
5.2.6 allowPrivilegeEscalation を使用してコンテナーの許可を最小限に抑える スコア付き L1 環境に依存
5.2.6 ルート コンテナーの許可を最小限に抑える スコアなし L2 環境に依存
5.2.7 NET_RAW 機能を使用してコンテナーの許可を最小限に抑える スコアなし L1 環境に依存
5.2.8 追加された機能を使用してコンテナーの許可を最小限に抑える スコアなし L1 環境に依存
5.2.9 割り当てられた機能を使用してコンテナーの許可を最小限に抑える スコアなし L1 環境に依存
5.2.10 割り当てられた機能を使用してコンテナーの許可を最小限に抑える スコアなし L2
5.2.11 Windows HostProcess コンテナーの許可を最小限に抑える スコアなし L1 環境に依存
5.2.12 HostPath ボリュームの許可を最小限に抑える スコアなし L1 環境に依存
5.2.13 HostPorts を使用するコンテナーの許可を最小限に抑える スコアなし L1 環境に依存
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.7 一般ポリシー
5.7.1 名前空間を使用してリソース間の管理境界を作成する スコアなし L1 環境に依存
5.7.2 ポッド定義で seccomp プロファイルが docker/default に設定されていることを確認する スコアなし L2 環境に依存
5.7.3 ポッドとコンテナーにセキュリティ コンテキストを適用する スコアなし L2 環境に依存
5.7.4 既定の名前空間が使用されていない スコア付き L2 環境に依存

注意

Kubernetes CIS ベンチマークの他に AKS CIS ベンチマークも利用できます。

その他のメモ

  • セキュリティが強化された OS は、AKS 専用に構築および保守されており、AKS プラットフォーム以外ではサポートされていません
  • 攻撃対象領域をさらに減らすため、OS では一部の不要なカーネル モジュール ドライバーが無効になっています。

次のステップ

AKS のセキュリティに関する詳細については、次の記事をご覧ください。