Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Host Security Service/ Perguntas frequentes/ Container Guard Service/ Como ativar a auditoria do servidor de API para um container do Kubernetes local?
Atualizado em 2024-01-04 GMT+08:00

Como ativar a auditoria do servidor de API para um container do Kubernetes local?

Cenário

Os containers de Kubernetes locais são usados.

Pré-requisitos

  • A proteção de container foi ativada. Para obter detalhes, consulte Ativação da proteção de nós de containers.
  • A auditoria do servidor da API está desativada. Execute as seguintes etapas para verificar seu status:
    1. Efetue logon no nó onde o kube-apiserver está localizado.
    2. Verifique o arquivo kube-apiserver.yaml ou o processo de kube-apiserver iniciado.
      • Vá para o diretório /etc/kubernetes/manifest e verifique se --audit-log-path e --audit-policy-file existem em kube-apiserver.yaml. Se eles não existirem, a auditoria do servidor da API será desativada.
      • Execute o comando ps para verificar se --audit-log-path e --audit-policy-file existem nas linhas de comando do processo de kube-apiserver. Se eles não existirem, a função de auditoria do processo de kube-apiserver é desativada.

Ativação da auditoria do servidor da API

  1. Copie o seguinte conteúdo YAML e salve-o em um arquivo TXT:

    Esse arquivo YAML é o arquivo de configuração da função de auditoria do Kubernetes. Você pode usar diretamente o arquivo ou compilá-lo conforme necessário.
    apiVersion: audit.k8s.io/v1 # This is required.
    kind: Policy
    # Don't generate audit events for all requests in RequestReceived stage.
    omitStages:
      - "RequestReceived"
    rules:
      # The following requests were manually identified as high-volume and low-risk,
      # so drop them.
      # Kube-Proxy running on each node will watch services and endpoint objects in real time
      - level: None
        users: ["system:kube-proxy"]
        verbs: ["watch"]
        resources:
          - group: "" # core
            resources: ["endpoints", "services"]
      # Some health checks
      - level: None
        users: ["kubelet"] # legacy kubelet identity
        verbs: ["get"]
        resources:
          - group: "" # core
            resources: ["nodes"]
      - level: None
        userGroups: ["system:nodes"]
        verbs: ["get"]
        resources:
          - group: "" # core
            resources: ["nodes"]
      - level: None
        users: ["system:apiserver"]
        verbs: ["get"]
        resources:
          - group: "" # core
            resources: ["namespaces"]
      # Some system component certificates reuse the master user, which cannot be accurately distinguished from user behavior,
      # considering that subsequent new functions may continue to add system operations under kube-system, the cost of targeted configuration is relatively high,
      # in terms of the overall strategy, it is not recommended (allowed) for users to operate under the kube-system,
      # so overall drop has no direct impact on user experience
      - level: None
        verbs: ["get", "update"]
        namespaces: ["kube-system"]
      # Don't log these read-only URLs.
      - level: None
        nonResourceURLs:
          - /healthz*
          - /version
          - /swagger*
      # Don't log events requests.
      - level: None
        resources:
          - group: "" # core
            resources: ["events"]
      # Don't log leases requests
      - level: None
        verbs: [ "get", "update" ]
        resources:
          - group: "coordination.k8s.io"
            resources: ["leases"]
      # Secrets, ConfigMaps, and TokenReviews can contain sensitive & binary data,
      # so only log at the Metadata level.
      - level: Metadata
        resources:
          - group: "" # core
            resources: ["secrets", "configmaps"]
          - group: authentication.k8s.io
            resources: ["tokenreviews"]
      # Get repsonses can be large; skip them.
      - level: Request
        verbs: ["get", "list", "watch"]
        resources:
          - group: "" # core
          - 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 known APIs
      - level: RequestResponse
        resources:
          - group: "" # core
          - 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: Metadata

  1. Faça o upload do arquivo TXT para o nó onde o kube-apiserver está implementado.
  2. Vá para o diretório /etc/kubernetes/manifest e adicione o seguinte conteúdo ao arquivo kube-apiserver.yaml para ativar a auditoria do servidor da API:

    --audit-policy-file=/etc/kubernetes/audit-policy.yaml \
    --audit-log-path=/var/log/kubernetes/audit/audit.log \
    --audit-log-maxsize=100 \
    --audit-log-maxage=1  \
    --audit-log-maxbackup=10

    --audit-policy-file: arquivo de configuração usado pela função de auditoria.

    --audit-log-path: caminho do arquivo de log onde os eventos de auditoria são gravados. Se esse sinalizador não for especificado, o back-end de registro será desativado.

    --audit-log-maxsize: tamanho máximo (em MB) de um arquivo de log de auditoria antes de rotação.

    --audit-log-maxage: número máximo de dias para armazenar arquivos de log de auditoria anteriores.

    --audit-log-maxbackup: número máximo de arquivos de log de auditoria retidos.

  1. (Opcional) Se o seu kube-apiserver for executado como um pod, execute as seguintes etapas para persistir os logs no servidor:

    1. Localize o campo volumeMounts em kube-apiserver.yaml e configure a montagem do volume da seguinte maneira:
      volumeMounts:
        - mountPath: /etc/kubernetes/audit-policy.yaml
          name: audit
          readOnly: true
        - mountPath: /var/log/kubernetes/audit/
          name: audit-log
          readOnly: false
    2. Localize o campo volumes em kube-apiserver.yaml e configure-o da seguinte forma:
      volumes:
      - name: audit
        hostPath:
          path: /etc/kubernetes/audit-policy.yaml
          type: File
      - name: audit-log
        hostPath:
          path: /var/log/kubernetes/audit/
          type: DirectoryOrCreate