ビュー:

kubeadmクラスターでKubernetes監査ログ収集を有効にするには、監査ポリシーとWebhook構成ファイルを作成し、kube-apiserverの静的ポッドマニフェストを編集し、kubeletがポッドを再起動するのを待ちます。

重要
重要
kubeadmクラスターは、kubeletによって管理される静的ポッドとしてkube-apiserverを実行します。kube-apiserverはCoreDNSが利用可能になる前に開始されるため、KubernetesサービスのDNS名を解決できません。監査コレクターはhostNetwork: trueを使用し、127.0.0.1を介して接続する必要があります。

手順

  1. 監査設定ディレクトリとファイルを作成します。
    次のコマンドを実行して、監査ポリシーとWebhook構成を作成します。
    sudo mkdir -p /etc/kubernetes/audit
    
    sudo tee /etc/kubernetes/audit/audit-policy.yaml << 'EOF'
    apiVersion: audit.k8s.io/v1
    kind: Policy
    rules:
      - level: Metadata
        verbs: ["create"]
        resources:
          - group: "authorization.k8s.io"
            resources: ["subjectaccessreviews", "selfsubjectaccessreviews", "localsubjectaccessreviews"]
      - level: RequestResponse
        verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
        resources:
          - group: "rbac.authorization.k8s.io"
            resources: ["roles", "rolebindings", "clusterroles", "clusterrolebindings"]
      - level: Metadata
        verbs: ["create", "update", "delete"]
        resources:
          - group: ""
            resources: ["serviceaccounts"]
      - level: None
    EOF
    
    sudo tee /etc/kubernetes/audit/audit-webhook-config.yaml << 'EOF'
    apiVersion: v1
    kind: Config
    clusters:
    - name: audit-collector
      cluster:
        server: http://127.0.0.1:8030/k8s-audit
    contexts:
    - context:
        cluster: audit-collector
        user: ""
      name: default-context
    current-context: default-context
    preferences: {}
    users: []
    EOF
  2. 各コントロールプレーンノードでkube-apiserverのスタティックポッドマニフェストを編集します。
    /etc/kubernetes/manifests/kube-apiserver.yamlを編集します。
    1. 次のフラグをspec.containers[0].commandに追加してください:
          - --audit-policy-file=/etc/kubernetes/audit/audit-policy.yaml
          - --audit-webhook-config-file=/etc/kubernetes/audit/audit-webhook-config.yaml
          - --audit-webhook-batch-max-size=1
    2. spec.containers[0].volumeMountsにボリュームマウントを追加します:
          - mountPath: /etc/kubernetes/audit
            name: audit-config
            readOnly: true
    3. spec.volumesにボリュームを追加:
        - hostPath:
            path: /etc/kubernetes/audit
            type: DirectoryOrCreate
          name: audit-config
  3. 自動再起動を待機します。
    kubeletは/etc/kubernetes/manifests/を監視し、マニフェストを保存すると自動的にkube-apiserverポッドを再起動します。手動での再起動は不要です。
    注意
    注意
    kubeletが変更を検出してポッドを再起動するまで最大1分かかることがあります。再起動中、APIサーバは一時的に利用できなくなります。
  4. 構成を確認してください。
    # Check kube-apiserver is running
    kubectl get pods -n kube-system -l component=kube-apiserver
    
    # Confirm audit flags are applied
    kubectl get pod -n kube-system -l component=kube-apiserver -o yaml | grep -E "audit-policy|audit-webhook"
    
    # Check audit collector logs
    kubectl logs -n trendmicro-system -l app.kubernetes.io/component=trendmicro-audit-log-collector --tail=20