mcpField
P
performing-kubernetes-cis-benchmark-with-kube-bench

performing-kubernetes-cis-benchmark-with-kube-bench

github.com/mukul975セキュリティ35.2k65 回インストール8 週間前に更新
リポジトリ

performing-kubernetes-cis-benchmark-with-kube-bench について

kube-benchでKubernetesの設定をCIS Benchmarkに照らして検査するためのスキルガイドです。クラスターを監査するセキュリティチーム向けで、コンポーネント別の検査や構造化レポート、マネージドKubernetes向け設定例を扱います。

主な機能

  1. 01コントロールプレーン、etcd、ノード、ポリシーを検査
  2. 02コンポーネント、グループ、ID別に実行
  3. 03EKS、GKE、AKSのベンチマーク設定に対応
  4. 04JSONおよびJUnitレポートを出力

活用シーン

  1. 01CISガイダンスに沿ったKubernetesクラスター監査
  2. 02セキュリティテストで特定の検査を実行
  3. 03CIやコンプライアンス報告向けに結果を出力

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill performing-kubernetes-cis-benchmark-with-kube-bench

インストール後、Claude Code で/performing-kubernetes-cis-benchmark-with-kube-benchを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

詳細

kube-bench による Kubernetes CIS ベンチマークの実施

概要

kube-bench は、CIS Kubernetes ベンチマークのチェックを実行する、Aqua Security が開発したオープンソースの Go ツールです。コントロールプレーン、etcd、ワーカーノード、ポリシーの設定がセキュリティのベストプラクティスに準拠しているかを検証し、具体的な対応に役立つ合格/不合格/警告のレポートを生成します。

使用する場面

  • Kubernetes CIS ベンチマークを kube-bench で実施するセキュリティ評価を行う場合
  • 関連するセキュリティイベントへのインシデント対応手順に従う場合
  • 定期的なセキュリティテストや監査を実施する場合
  • 実地テストを通じてセキュリティコントロールを検証する場合

前提条件

  • Kubernetes クラスター(v1.24 以降)
  • クラスター管理者アクセス権を持つ kubectl
  • 直接実行するためのノードアクセス、または特権付き Pod へのアクセス

インストール

# Binary installation
curl -L https://github.com/aquasecurity/kube-bench/releases/download/v0.7.3/kube-bench_0.7.3_linux_amd64.tar.gz | tar xz
sudo mv kube-bench /usr/local/bin/

# Run as Kubernetes Job
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml
kubectl logs job/kube-bench

# Run as a pod with host access
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job-master.yaml
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job-node.yaml

ベンチマークの実行

全項目のベンチマーク
# Run all checks (auto-detects node type)
kube-bench run

# Run with JSON output
kube-bench run --json > kube-bench-results.json

# Run with JUnit output for CI
kube-bench run --junit > kube-bench-results.xml
コンポーネント別のチェック
# Control plane (master) checks
kube-bench run --targets master

# Worker node checks
kube-bench run --targets node

# etcd checks
kube-bench run --targets etcd

# Policies checks
kube-bench run --targets policies

# Control plane + etcd
kube-bench run --targets master,etcd
マネージド Kubernetes
# Amazon EKS
kube-bench run --benchmark eks-1.2.0

# Google GKE
kube-bench run --benchmark gke-1.4.0

# Azure AKS
kube-bench run --benchmark aks-1.0

# Red Hat OpenShift
kube-bench run --benchmark rh-1.0
結果のフィルタリング
# Show only failures
kube-bench run --targets master | grep "\[FAIL\]"

# Run specific check
kube-bench run --check 1.2.1

# Run check group
kube-bench run --group 1.2

CIS ベンチマークのセクション

セクションコンポーネント主なチェック項目
1.1コントロールプレーン - API サーバー匿名認証、RBAC、監査ログ
1.2コントロールプレーン - API サーバーアドミッションコントローラー、暗号化
1.3コントロールプレーン - コントローラーマネージャーサービスアカウントトークン、バインドアドレス
1.4コントロールプレーン - スケジューラープロファイリング、バインドアドレス
2.1etcdクライアント証明書認証、ピア間の暗号化
3.1コントロールプレーン - 認証OIDC、クライアント証明書
4.1ワーカー - kubelet匿名認証、認可
4.2ワーカー - kubeletTLS、読み取り専用ポート
5.1ポリシー - RBACクラスター管理者の使用、サービスアカウント
5.2ポリシー - Pod セキュリティ特権、ホスト名前空間
5.3ポリシー - ネットワーク名前空間ごとのネットワークポリシー
5.7ポリシー - 一般シークレット、セキュリティコンテキスト

出力例

[INFO] 1 Control Plane Security Configuration
[INFO] 1.1 Control Plane Node Configuration Files
[PASS] 1.1.1 Ensure that the API server pod specification file permissions are set to 600
[PASS] 1.1.2 Ensure that the API server pod specification file ownership is set to root:root
[FAIL] 1.1.3 Ensure that the controller manager pod specification file permissions are set to 600
[WARN] 1.1.4 Ensure that the scheduler pod specification file permissions are set to 600

== Summary ==
45 checks PASS
12 checks FAIL
8 checks WARN
0 checks INFO

CI/CD との統合

GitHub Actions
name: CIS Benchmark
on:
  schedule:
    - cron: '0 6 * * 1'

jobs:
  kube-bench:
    runs-on: ubuntu-latest
    steps:
      - name: Configure kubectl
        uses: azure/setup-kubectl@v3

      - name: Run kube-bench
        run: |
          kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml
          kubectl wait --for=condition=complete job/kube-bench --timeout=120s
          kubectl logs job/kube-bench > kube-bench-report.txt

      - name: Check for failures
        run: |
          FAILS=$(grep -c "\[FAIL\]" kube-bench-report.txt || true)
          echo "Failed checks: $FAILS"
          if [ "$FAILS" -gt 0 ]; then
            echo "::warning::$FAILS CIS benchmark checks failed"
          fi

      - name: Upload report
        uses: actions/upload-artifact@v4
        with:
          name: kube-bench-report
          path: kube-bench-report.txt

修正例

1.2.1 - --anonymous-auth が false に設定されていることを確認する
# /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
  containers:
  - command:
    - kube-apiserver
    - --anonymous-auth=false
4.2.1 - kubelet の --anonymous-auth が false に設定されていることを確認する
# /var/lib/kubelet/config.yaml
authentication:
  anonymous:
    enabled: false
  webhook:
    enabled: true
5.2.1 - ワイルドカード RBAC を最小限にする
# Find roles with wildcard permissions
kubectl get clusterroles -o json | jq '.items[] | select(.rules[].resources[] == "*") | .metadata.name'

ベストプラクティス

  1. クラスターのプロビジョニング前と後に kube-bench を実行する
  2. ドリフト検出のため、CronJob で 週次スキャンをスケジュールする
  3. SIEM/コンプライアンスレポート用に JSON をエクスポートする
  4. まず FAIL 項目を修正し、その後 WARN 項目に対処する
  5. Kubernetes ディストリビューションに合った ベンチマークプロファイルを使用する
  6. セキュリティ態勢の改善を測定するため、スコアを経時的に追跡する
  7. ドリフトを防ぐため、アドミッションコントローラーと組み合わせる

コメント