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:
- Efetue logon no nó onde o kube-apiserver está localizado.
- 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
- 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
- Faça o upload do arquivo TXT para o nó onde o kube-apiserver está implementado.
- 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.
- (Opcional) Se o seu kube-apiserver for executado como um pod, execute as seguintes etapas para persistir os logs no servidor:
- 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
- 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
- Localize o campo volumeMounts em kube-apiserver.yaml e configure a montagem do volume da seguinte maneira: