

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Auditoria e registro
<a name="auditing-and-logging"></a>

**dica**  
 [Explore as ](https://aws-experience.com/emea/smb/events/series/get-hands-on-with-amazon-eks?trk=4a9b4147-2490-4c63-bc9f-f8a84b122c8c&sc_channel=el) melhores práticas por meio de workshops do Amazon EKS.

Coletar e analisar registros [de auditoria] é útil por vários motivos diferentes. Os registros podem ajudar na análise e atribuição da causa raiz, ou seja, atribuir uma alteração a um usuário específico. Quando registros suficientes são coletados, eles também podem ser usados para detectar comportamentos anômalos. No EKS, os registros de auditoria são enviados para o Amazon Cloudwatch Logs. A política de auditoria do EKS é a seguinte:

```
apiVersion: audit.k8s.io/v1beta1
kind: Policy
rules:
  # Log full request and response for changes to aws-auth ConfigMap in kube-system namespace
  - level: RequestResponse
    namespaces: ["kube-system"]
    verbs: ["update", "patch", "delete"]
    resources:
      - group: "" # core
        resources: ["configmaps"]
        resourceNames: ["aws-auth"]
    omitStages:
      - "RequestReceived"
  # Do not log watch operations performed by kube-proxy on endpoints and services
  - level: None
    users: ["system:kube-proxy"]
    verbs: ["watch"]
    resources:
      - group: "" # core
        resources: ["endpoints", "services", "services/status"]
  # Do not log get operations performed by kubelet on nodes and their statuses
  - level: None
    users: ["kubelet"] # legacy kubelet identity
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["nodes", "nodes/status"]
  # Do not log get operations performed by the system:nodes group on nodes and their statuses
  - level: None
    userGroups: ["system:nodes"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["nodes", "nodes/status"]
  # Do not log get and update operations performed by controller manager, scheduler, and endpoint-controller on endpoints in kube-system namespace
  - level: None
    users:
      - system:kube-controller-manager
      - system:kube-scheduler
      - system:serviceaccount:kube-system:endpoint-controller
    verbs: ["get", "update"]
    namespaces: ["kube-system"]
    resources:
      - group: "" # core
        resources: ["endpoints"]
  # Do not log get operations performed by apiserver on namespaces and their statuses/finalizations
  - level: None
    users: ["system:apiserver"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["namespaces", "namespaces/status", "namespaces/finalize"]
  # Do not log get and list operations performed by controller manager on metrics.k8s.io resources
  - level: None
    users:
      - system:kube-controller-manager
    verbs: ["get", "list"]
    resources:
      - group: "metrics.k8s.io"
  # Do not log access to health, version, and swagger non-resource URLs
  - level: None
    nonResourceURLs:
      - /healthz*
      - /version
      - /swagger*
  # Do not log events resources
  - level: None
    resources:
      - group: "" # core
        resources: ["events"]
  # Log request for updates/patches to nodes and pods statuses by kubelet and node problem detector
  - level: Request
    users: ["kubelet", "system:node-problem-detector", "system:serviceaccount:kube-system:node-problem-detector"]
    verbs: ["update", "patch"]
    resources:
      - group: "" # core
        resources: ["nodes/status", "pods/status"]
    omitStages:
      - "RequestReceived"
  # Log request for updates/patches to nodes and pods statuses by system:nodes group
  - level: Request
    userGroups: ["system:nodes"]
    verbs: ["update", "patch"]
    resources:
      - group: "" # core
        resources: ["nodes/status", "pods/status"]
    omitStages:
      - "RequestReceived"
  # Log delete collection requests by namespace-controller in kube-system namespace
  - level: Request
    users: ["system:serviceaccount:kube-system:namespace-controller"]
    verbs: ["deletecollection"]
    omitStages:
      - "RequestReceived"
  # Log metadata for secrets, configmaps, and tokenreviews to protect sensitive data
  - level: Metadata
    resources:
      - group: "" # core
        resources: ["secrets", "configmaps"]
      - group: authentication.k8s.io
        resources: ["tokenreviews"]
    omitStages:
      - "RequestReceived"
  # Log requests for serviceaccounts/token resources
  - level: Request
    resources:
      - group: "" # core
        resources: ["serviceaccounts/token"]
  # Log get, list, and watch requests for various resource groups
  - level: Request
    verbs: ["get", "list", "watch"]
    resources:
      - group: "" # core
      - group: "admissionregistration.k8s.io"
      - group: "apiextensions.k8s.io"
      - group: "apiregistration.k8s.io"
      - group: "apps"
      - group: "authentication.k8s.io"
      - group: "authorization.k8s.io"
      - group: "autoscaling"
      - group: "batch"
      - group: "certificates.k8s.io"
      - group: "extensions"
      - group: "metrics.k8s.io"
      - group: "networking.k8s.io"
      - group: "policy"
      - group: "rbac.authorization.k8s.io"
      - group: "scheduling.k8s.io"
      - group: "settings.k8s.io"
      - group: "storage.k8s.io"
    omitStages:
      - "RequestReceived"
  # Default logging level for known APIs to log request and response
  - level: RequestResponse
    resources:
      - group: "" # core
      - group: "admissionregistration.k8s.io"
      - group: "apiextensions.k8s.io"
      - group: "apiregistration.k8s.io"
      - group: "apps"
      - group: "authentication.k8s.io"
      - group: "authorization.k8s.io"
      - group: "autoscaling"
      - group: "batch"
      - group: "certificates.k8s.io"
      - group: "extensions"
      - group: "metrics.k8s.io"
      - group: "networking.k8s.io"
      - group: "policy"
      - group: "rbac.authorization.k8s.io"
      - group: "scheduling.k8s.io"
      - group: "settings.k8s.io"
      - group: "storage.k8s.io"
    omitStages:
      - "RequestReceived"
  # Default logging level for all other requests to log metadata only
  - level: Metadata
    omitStages:
      - "RequestReceived"
```

## Recomendações
<a name="_recommendations"></a>

### Habilitar registros de auditoria
<a name="_enable_audit_logs"></a>

Os registros de auditoria fazem parte dos registros do plano de controle do Kubernetes gerenciados pelo EKS, que são gerenciados pelo EKS. As instruções para enabling/disabling os registros do plano de controle, que incluem os registros do servidor da API Kubernetes, do gerenciador do controlador e do agendador, junto com o registro de auditoria, podem ser encontradas aqui, \#enabling -control-plane-log-export. https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html

**nota**  
Ao ativar o registro do plano de controle, você incorrerá em [ CloudWatch custos ](https://aws.amazon.com/cloudwatch/pricing/) para armazenar os registros. Isso levanta uma questão mais ampla sobre o custo contínuo da segurança. Em última análise, você terá que comparar esses custos com o custo de uma violação de segurança, por exemplo, perda financeira, danos à sua reputação etc. Você pode descobrir que pode proteger adequadamente seu ambiente implementando apenas algumas das recomendações deste guia.

**Atenção**  
O tamanho máximo de uma entrada do CloudWatch Logs é de [ 1 MB, ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html) enquanto o tamanho máximo de solicitação da API Kubernetes é de 1,5 MiB. As entradas de registro maiores que 1 MB serão truncadas ou incluirão somente os metadados da solicitação.

### Utilize metadados de auditoria
<a name="_utilize_audit_metadata"></a>

Os registros de auditoria do Kubernetes incluem duas anotações que indicam se uma solicitação foi autorizada ou não `authorization.k8s.io/decision` e o motivo da decisão. `authorization.k8s.io/reason` Use esses atributos para verificar por que uma chamada de API específica foi permitida.

### Crie alarmes para eventos suspeitos
<a name="_create_alarms_for_suspicious_events"></a>

Crie um alarme para alertá-lo automaticamente quando houver um aumento nas 403 respostas proibidas e 401 não autorizadas e, em seguida, use atributos como `host``sourceIPs`, e `k8s_user.username` para descobrir de onde vêm essas solicitações.

### Analise registros com o Log Insights
<a name="_analyze_logs_with_log_insights"></a>

Use o CloudWatch Log Insights para monitorar as alterações nos objetos RBAC, por exemplo, funções RoleBindings ClusterRoles, e. ClusterRoleBindings Alguns exemplos de consultas aparecem abaixo:

Lista as atualizações do `aws-auth` ConfigMap:

```
fields @timestamp, @message
| filter @logStream like "kube-apiserver-audit"
| filter verb in ["update", "patch"]
| filter objectRef.resource = "configmaps" and objectRef.name = "aws-auth" and objectRef.namespace = "kube-system"
| sort @timestamp desc
```

Lista a criação de webhooks novos ou as alterações nos webhooks de validação:

```
fields @timestamp, @message
| filter @logStream like "kube-apiserver-audit"
| filter verb in ["create", "update", "patch"] and responseStatus.code = 201
| filter objectRef.resource = "validatingwebhookconfigurations"
| sort @timestamp desc
```

Listas criam, atualizam e excluem operações para funções:

```
fields @timestamp, @message
| sort @timestamp desc
| limit 100
| filter objectRef.resource="roles" and verb in ["create", "update", "patch", "delete"]
```

Listas criam, atualizam e excluem operações para RoleBindings:

```
fields @timestamp, @message
| sort @timestamp desc
| limit 100
| filter objectRef.resource="rolebindings" and verb in ["create", "update", "patch", "delete"]
```

Listas criam, atualizam e excluem operações para ClusterRoles:

```
fields @timestamp, @message
| sort @timestamp desc
| limit 100
| filter objectRef.resource="clusterroles" and verb in ["create", "update", "patch", "delete"]
```

Listas criam, atualizam e excluem operações para ClusterRoleBindings:

```
fields @timestamp, @message
| sort @timestamp desc
| limit 100
| filter objectRef.resource="clusterrolebindings" and verb in ["create", "update", "patch", "delete"]
```

Traça operações de leitura não autorizadas contra Secrets:

```
fields @timestamp, @message
| sort @timestamp desc
| limit 100
| filter objectRef.resource="secrets" and verb in ["get", "watch", "list"] and responseStatus.code="401"
| stats count() by bin(1m)
```

Lista de solicitações anônimas com falha:

```
fields @timestamp, @message, sourceIPs.0
| sort @timestamp desc
| limit 100
| filter user.username="system:anonymous" and responseStatus.code in ["401", "403"]
```

### Audite seus CloudTrail registros
<a name="_audit_your_cloudtrail_logs"></a>

As APIs da AWS chamadas por pods que estão utilizando funções do IAM para contas de serviço (IRSA) são automaticamente registradas CloudTrail junto com o nome da conta de serviço. Se o nome de uma conta de serviço que não foi explicitamente autorizada a chamar uma API aparecer no registro, isso pode ser uma indicação de que a política de confiança da função do IAM foi configurada incorretamente. De um modo geral, o Cloudtrail é uma ótima maneira de atribuir chamadas de API da AWS a diretores específicos do IAM.

### Use o CloudTrail Insights para descobrir atividades suspeitas
<a name="_use_cloudtrail_insights_to_unearth_suspicious_activity"></a>

CloudTrail o insights analisa automaticamente os eventos de gerenciamento de gravação das CloudTrail trilhas e alerta você sobre atividades incomuns. Isso pode ajudar você a identificar quando há um aumento no volume de chamadas em APIs de gravação em sua conta da AWS, inclusive de pods que usam o IRSA para assumir uma função do IAM. Consulte [ Announcing CloudTrail Insights: Identify and Response to Unusual API Activity ](https://aws.amazon.com/blogs/aws/announcing-cloudtrail-insights-identify-and-respond-to-unusual-api-activity/) para obter mais informações.

### Recursos adicionais do
<a name="_additional_resources"></a>

À medida que o volume de registros aumenta, analisá-los e filtrá-los com o Log Insights ou outra ferramenta de análise de registros pode se tornar ineficaz. Como alternativa, você pode considerar executar o [ Sysdig Falco ](https://github.com/falcosecurity/falco) e o ekscloudwatch. [https://github.com/sysdiglabs/ekscloudwatch](https://github.com/sysdiglabs/ekscloudwatch) A Falco analisa os registros de auditoria e sinaliza anomalias ou abusos por um longo período de tempo. O projeto ekscloudwatch encaminha eventos de log de auditoria para a Falco para análise. CloudWatch A Falco fornece um conjunto de regras de auditoria [ padrão, ](https://github.com/falcosecurity/plugins/blob/master/plugins/k8saudit/rules/k8s_audit_rules.yaml) além da capacidade de adicionar as suas próprias.

Outra opção pode ser armazenar os registros de auditoria no S3 e usar o [ algoritmo SageMaker ](https://docs.aws.amazon.com/sagemaker/latest/dg/randomcutforest.html) Random Cut Forest para comportamentos anômalos que justifiquem uma investigação mais aprofundada.

## Ferramentas e recursos
<a name="_tools_and_resources"></a>

Os seguintes projetos comerciais e de código aberto podem ser usados para avaliar o alinhamento do seu cluster com as melhores práticas estabelecidas:
+  [Workshop de imersão em segurança do Amazon EKS — Detective Controls ](https://catalog.workshops.aws/eks-security-immersionday/en-US/5-detective-controls) 
+  [auditoria kube ](https://github.com/Shopify/kubeaudit) 
+  [kube-scan ](https://github.com/octarinesec/kube-scan) Atribui uma pontuação de risco às cargas de trabalho em execução em seu cluster de acordo com a estrutura do Kubernetes Common Configuration Scoring System
+  [kubesec.io ](https://kubesec.io/) 
+  [polaris ](https://github.com/FairwindsOps/polaris) 
+  [Estibordo ](https://github.com/aquasecurity/starboard) 
+  [Snyk ](https://docs.snyk.io/scan-with-snyk/snyk-container/kubernetes-integration) 
+  [Kubescape O ](https://github.com/kubescape/kubescape) Kubescape é uma ferramenta de segurança kubernetes de código aberto que verifica clusters, arquivos YAML e gráficos do Helm. Ele detecta configurações incorretas de acordo com várias estruturas (incluindo o [ MITRE ATT&CK [ NSA-CISA ](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo/?utm_source=github&utm_medium=repository)®.) ](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)