すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:登録済みクラスターでのクラスター監査の使用

最終更新日:Jan 05, 2025

APIサーバーは監査ログを生成し、Kubernetes APIのリクエストとレスポンスを記録します。 Container Service for Kubernetes (ACK) を使用すると、クラスター管理者はAPIサーバーの監査ログを分析して、さまざまなユーザーがリソースに対して実行した操作を監査できます。 これにより、クラスター管理者はクラスター操作の履歴を追跡し、クラスター例外のトラブルシューティングを行うことができ、クラスターセキュリティのO&Mが大幅に簡素化されます。

前提条件

登録済みクラスターが作成され、外部Kubernetesクラスターが登録済みクラスターに接続されます。 詳細については、「ACKコンソールでの登録済みクラスターの作成」をご参照ください。

手順1: マスターノードの監査ポリシーの変更

マスターノードにログインし、次のテンプレートに基づいて /etc/kubernetes/audit-policy.yamlファイルを変更します。 この手順は、他のマスターノードでも実行する必要があります。

説明

クラスターのKubernetesバージョンが1.24より前の場合、apiVersionaudit.k8s.io/v1beta1に設定します。 それ以外の場合は、apiVersionaudit.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のインストール」をご参照ください。

次のステップ

クラスター監査の使用方法と監査ログの表示方法の詳細については、「クラスター監査の操作」をご参照ください。