kubeadmクラスターでKubernetes監査ログ収集を有効にするには、監査ポリシーとWebhook構成ファイルを作成し、kube-apiserverの静的ポッドマニフェストを編集し、kubeletがポッドを再起動するのを待ちます。
重要kubeadmクラスターは、kubeletによって管理される静的ポッドとして
kube-apiserverを実行します。kube-apiserverはCoreDNSが利用可能になる前に開始されるため、KubernetesサービスのDNS名を解決できません。監査コレクターはhostNetwork: trueを使用し、127.0.0.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 - 各コントロールプレーンノードでkube-apiserverのスタティックポッドマニフェストを編集します。
/etc/kubernetes/manifests/kube-apiserver.yamlを編集します。- 次のフラグを
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 spec.containers[0].volumeMountsにボリュームマウントを追加します:- mountPath: /etc/kubernetes/audit name: audit-config readOnly: truespec.volumesにボリュームを追加:- hostPath: path: /etc/kubernetes/audit type: DirectoryOrCreate name: audit-config
- 次のフラグを
- 自動再起動を待機します。kubeletは
/etc/kubernetes/manifests/を監視し、マニフェストを保存すると自動的にkube-apiserverポッドを再起動します。手動での再起動は不要です。
注意
kubeletが変更を検出してポッドを再起動するまで最大1分かかることがあります。再起動中、APIサーバは一時的に利用できなくなります。 - 構成を確認してください。
# 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
