

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 tiverem sido 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>

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

Os registros de auditoria fazem parte dos registros do plano de controle do Kubernetes gerenciado pelo EKS, 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, -plane-logs.html\$1 -export. https://docs.aws.amazon.com/eks/ latest/userguide/control enabling-control-plane-log

**nota**  
Ao ativar o registro no plano de controle, você incorrerá em [ CloudWatchcustos](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 pesar esses custos com o custo de uma violação de segurança, por exemplo, perda financeira, danos à sua reputação, etc. Talvez você descubra que pode proteger adequadamente seu ambiente implementando somente algumas das recomendações deste guia.

**Atenção**  
O tamanho máximo de uma entrada de CloudWatch registros é de [1 MB](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html), enquanto o tamanho máximo da solicitação da API Kubernetes é de 1,5 MiB. As entradas de registro maiores que 1 MB serão truncadas ou incluirão apenas 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 alterações nos objetos RBAC, por exemplo, Roles, 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 novos webhooks ou 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
```

Lista as operações de criação, atualização e exclusão de funções:

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

Listas de operações de criação, atualização e exclusão para RoleBindings:

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

Listas de operações de criação, atualização e exclusão para ClusterRoles:

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

Listas de operações de criação, atualização e exclusão 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 autorizada contra Segredos:

```
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 que falharam:

```
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>

A AWS APIs chamada por pods que utilizam funções do IAM para contas de serviço (IRSA) é automaticamente registrada 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 eventos de gerenciamento de gravação a partir de CloudTrail trilhas e alerta você sobre atividades incomuns. Isso pode ajudar você a identificar quando há um aumento no volume de chamadas gravadas APIs em sua conta da AWS, inclusive de pods que usam o IRSA para assumir uma função do IAM. Consulte [Anunciando CloudTrail insights: identificação e resposta a atividades incomuns de API](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 a execução do [Sysdig Falco e do ekscloudwatch](https://github.com/falcosecurity/falco).](https://github.com/sysdiglabs/ekscloudwatch) A Falco analisa registros de auditoria e sinaliza anomalias ou abusos por um longo período de tempo. O projeto ekscloudwatch encaminha os eventos do 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 suas próprias.

Outra opção pode ser armazenar os registros de auditoria no S3 e usar o algoritmo SageMaker [Random Cut Forest](https://docs.aws.amazon.com/sagemaker/latest/dg/randomcutforest.html) 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 do 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://support.snyk.io/hc/en-us/articles/360003916138-Kubernetes-integration-overview) 
+  [Kubescape O Kubescape](https://github.com/kubescape/kubescape) é uma ferramenta de segurança de 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 [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo/?utm_source=github&utm_medium=repository) e MITRE ATT&CK®).](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)