APIサーバーは監査ログを生成し、Kubernetes APIのリクエストとレスポンスを記録します。 Container Service for Kubernetes (ACK) を使用すると、クラスター管理者はAPIサーバーの監査ログを分析して、さまざまなユーザーがリソースに対して実行した操作を監査できます。 これにより、クラスター管理者はクラスター操作の履歴を追跡し、クラスター例外のトラブルシューティングを行うことができ、クラスターセキュリティのO&Mが大幅に簡素化されます。
前提条件
登録済みクラスターが作成され、外部Kubernetesクラスターが登録済みクラスターに接続されます。 詳細については、「ACKコンソールでの登録済みクラスターの作成」をご参照ください。
手順1: マスターノードの監査ポリシーの変更
マスターノードにログインし、次のテンプレートに基づいて /etc/kubernetes/audit-policy.yamlファイルを変更します。 この手順は、他のマスターノードでも実行する必要があります。
クラスターのKubernetesバージョンが1.24より前の場合、apiVersionをaudit.k8s.io/v1beta1に設定します。 それ以外の場合は、apiVersionをaudit.k8s.io/v1に設定します。 詳細については、「 (中止) Kubernetes 1.24リリースノート」をご参照ください。
apiVersion: audit.k8s.io/v1beta1
kind: ポリシー
# RequestReceivedステージのすべてのリクエストに対して監査イベントを生成しないでください。
omitStages:
-"RequestReceived"
ルール:
# 次のリクエストは、大量かつ低リスクとして手動で識別されました。
# そうそれらを落としなさい。
- level: None
users: ["system:kube-proxy"]
verbs: ["watch"]
resources:
- group: "" # コア
resources: ["endpoints", "services"]
- level: None
users: ["system:unsecured"]
namespaces: ["kube-system"]
verbs: ["get"]
resources:
- group: "" # コア
resources: ["configmaps"]
- level: None
users: ["kubelet"] # legacy kubelet identity
verbs: ["get"]
resources:
- group: "" # コア
resources: ["nodes"]
- level: None
userGroups: ["system:nodes"]
verbs: ["get"]
resources:
- group: "" # コア
resources: ["nodes"]
- level: None
ユーザー:
- system:kube-controller-manager
- system:kube-scheduler
- system:serviceaccount:kube-system:endpoint-controller
verbs: ["get", "update"]
namespaces: ["kube-system"]
resources:
- group: "" # コア
resources: ["endpoints"]
- level: None
users: ["system:apiserver"]
verbs: ["get"]
resources:
- group: "" # コア
resources: ["namespaces"]
# これらの読み取り専用URLを記録しないでください。
- level: None
nonResourceURLs:
- /healthz*
- /version
- /swagger*
# イベントリクエストを記録しないでください。
- level: None
resources:
- group: "" # コア
resources: ["events"]
# Secrets、ConfigMaps、およびTokenReviewsには、機密データとバイナリデータを含めることができます。
# メタデータレベルでのみログを記録します。
- level: Metadata
resources:
- group: "" # コア
resources: ["secrets", "configmaps"]
- group: authentication.k8s.io
resources: ["tokenreviews"]
# Get repsonses can be large; skip them.
- level: Request
verbs: ["get", "list", "watch"]
resources:
- group: "" # コア
- group: "admissionregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
# 既知のAPIのデフォルトレベル
- level: RequestResponse
resources:
- group: "" # コア
- group: "admissionregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
# Default level for all other requests.
-level: メタデータ 手順2: マスターノードのkube-apiserver設定の変更
マスターノードにログインし、次の説明に基づいて /etc/kubernetes/manifests/kube-apiserver.yamlファイルを変更します。 この手順は、他のマスターノードでも実行する必要があります。
-- audit-log-*パラメーターをcommandセクションに追加します。... spec: コンテナ: - command: -kube-apiserver --- audit-log-maxbackup=10 --- audit-log-maxsize=100 --- audit-log-path=/var/log/kubernetes/kubernetes.audit --- audit-log-maxage=30 --- audit-policy-file=/etc/kubernetes/audit-policy.yaml ...aliyun_logs_audit-*パラメーターをenvセクションに追加します。... spec: コンテナ: - command: -kube-apiserver --- audit-log-maxbackup=10 --- audit-log-maxsize=100 --- audit-log-path=/var/log/kubernetes/kubernetes.audit --- audit-log-maxage=30 --- audit-policy-file=/etc/kubernetes/audit-policy.yaml ... ... env: -name: aliyun_logs_audit-${cluster_id} 値: /var/log/kubernetes/kubernetes.audit -name: aliyun_logs_audit-${cluster_id}_タグ 値: audit=apiserver -name: aliyun_logs_audit-${cluster_id}_product 値: k8s-audit -name: aliyun_logs_audit-${cluster_id}_jsonfile value: "true" 画像: registry-vpc.cn-shenzhen.aliyuncs.com/acs/kube-apiserver:v1.20.4-aliyun.1重要{cluster_id} をクラスターのIDに置き換える必要があります。 クラスターのIDを取得する方法の詳細については、「クラスター情報の表示」をご参照ください。
次のテンプレートを使用して、/etc/kubernetes/audit-policy.yamlをkube-apiserverのポッドにマウントします。
... spec: コンテナ: - command: -kube-apiserver --- audit-log-maxbackup=10 --- audit-log-maxsize=100 --- audit-log-path=/var/log/kubernetes/kubernetes.audit --- audit-log-maxage=30 --- audit-policy-file=/etc/kubernetes/audit-policy.yaml ... ... env: -name: aliyun_logs_audit-${cluster_id} 値: /var/log/kubernetes/kubernetes.audit -name: aliyun_logs_audit-${cluster_id}_タグ 値: audit=apiserver -name: aliyun_logs_audit-${cluster_id}_product 値: k8s-audit -name: aliyun_logs_audit-${cluster_id}_jsonfile value: "true" 画像: registry-vpc.cn-shenzhen.aliyuncs.com/acs/kube-apiserver:v1.20.4-aliyun.1 ... ... volumeMounts: -mountPath: /var/log/kubernetes 名前: k8s-audit -mountPath: /etc/kubernetes/audit-policy.yaml name: audit-policy readOnly: true ... ... volumes: - hostPath: パス: /var/log/kubernetes タイプ: DirectoryOrCreate 名前: k8s-audit - hostPath: パス: /etc/kubernetes/audit-policy.yaml タイプ: FileOrCreate name: audit-policy ...
ステップ3: logtail-dsコンポーネントのインストール
logtail-dsコンポーネントのインストール方法の詳細については、「手順2: logtail-dsのインストール」をご参照ください。
次のステップ
クラスター監査の使用方法と監査ログの表示方法の詳細については、「クラスター監査の操作」をご参照ください。