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
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
Ativar registros de auditoria
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# -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
Atenção
O tamanho máximo de uma entrada de CloudWatch registros é 256 KB, enquanto o tamanho máximo da solicitação da API Kubernetes é 1,5 MiB. As entradas de registro maiores que 256 KB serão truncadas ou incluirão somente os metadados da solicitação.
Utilize metadados de auditoria
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
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
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"]
Lista 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"]
Lista 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"]
Lista 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 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
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
Recursos adicionais
À 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
Outra opção pode ser armazenar os registros de auditoria no S3 e usar o algoritmo SageMaker Random Cut Forest para comportamentos anômalos que justifiquem uma investigação mais aprofundada.
Ferramentas e recursos
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
-
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 -
Kubescape O 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 e MITRE ATT&CK®).