Entenda as políticas de segurança de pod (PSP) criadas pelo Amazon EKS - Amazon EKS

Entenda as políticas de segurança de pod (PSP) criadas pelo Amazon EKS

A controlador de admissão de política de segurança de Pod do Kubernetes valida a criação de Pod e atualiza as solicitações de acordo com um conjunto de regras. Por padrão, os clusters do Amazon EKS são fornecidos com uma política de segurança totalmente permissiva e sem restrições. Para obter mais informações, consulte Pod Security Policies (Políticas de segurança de pods) na documentação do Kubernetes.

nota

O PodSecurityPolicy (PSP) foi descontinuado no Kubernetes versão 1.21 e está programado para remoção no Kubernetes 1.25. As PSPs estão sendo substituídas pelo Pod Security Admission (PSA), um controlador de admissão integrado que implementa os controles de segurança descritos nos padrões Pod Security Standards (PSS) Tanto o PSA quanto os PSS atingiram os estados de recursos beta e estão habilitados no Amazon EKS por padrão. Para resolver a remoção da PSP na versão 1.25, recomendamos que você implemente PSS no Amazon EKS. Para obter mais informações, consulte Implementing Pod Security Standards in Amazon EKS (Implementando Pod Security Standards no Amazon EKS) no blog da AWS.

Política de segurança de Pod padrão do Amazon EKS

Os clusters do Amazon EKS com o Kubernetes versão 1.13 e posteriores têm uma política de segurança de Pod padrão denominada eks.privileged. Essa política não tem restrição em relação a qual tipo de Pod pode ser aceito no sistema, o que é equivalente a executar o Kubernetes com o controlador de PodSecurityPolicy desativado.

nota

Essa política foi criada para manter a compatibilidade com versões anteriores de clusters que não tinham o controlador PodSecurityPolicy habilitado. Você pode criar políticas mais restritivas para o seu cluster e para namespaces individuais e contas de serviço, e depois excluir a política padrão para habilitar as políticas mais restritivas.

Você pode visualizar a política padrão com o seguinte comando.

kubectl get psp eks.privileged

Veja um exemplo de saída abaixo.

NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES eks.privileged true * RunAsAny RunAsAny RunAsAny RunAsAny false *

Para obter mais detalhes, você pode descrever a política com o comando a seguir.

kubectl describe psp eks.privileged

Veja um exemplo de saída abaixo.

Name: eks.privileged Settings: Allow Privileged: true Allow Privilege Escalation: 0xc0004ce5f8 Default Add Capabilities: <none> Required Drop Capabilities: <none> Allowed Capabilities: * Allowed Volume Types: * Allow Host Network: true Allow Host Ports: 0-65535 Allow Host PID: true Allow Host IPC: true Read Only Root Filesystem: false SELinux Context Strategy: RunAsAny User: <none> Role: <none> Type: <none> Level: <none> Run As User Strategy: RunAsAny Ranges: <none> FSGroup Strategy: RunAsAny Ranges: <none> Supplemental Groups Strategy: RunAsAny Ranges: <none>

É possível visualizar o arquivo YAML completo da política de segurança de Pod eks.privileged, seu perfil de cluster e a associação de perfil de cluster em Instalar ou restaurar a política de segurança de Pod padrãoInstale ou restaure a política de segurança padrão do pod.

Excluir política de segurança de Pod padrão do Amazon EKS

Se você criar políticas mais restritivas para os Pods, poderá, depois, excluir a política de segurança de Pod eks.privileged padrão do Amazon EKS para habilitar as políticas personalizadas.

Importante

Se você estiver usando a versão 1.7.0 ou posterior do plug-in CNI e atribuir uma política de segurança personalizada do Pod à conta de serviço aws-node Kubernetes usada para os Pods aws-node implantados pelo Daemonset, essa política deverá ter NET_ADMIN em sua seção allowedCapabilities junto com hostNetwork: true e privileged: true na spec da política.

  1. Crie um arquivo chamado privileged-podsecuritypolicy.yaml com o conteúdo do arquivo de exemplo em Instalar ou restaurar a política de segurança de Pod padrão. Instale ou restaure a política de segurança padrão do pod.

  2. Exclua o YAML com o comando a seguir. Isso exclui a política de segurança de Pod padrão, a ClusterRole e a ClusterRoleBinding associadas a ela.

    kubectl delete -f privileged-podsecuritypolicy.yaml

Instalar ou restaurar a política de segurança de Pod padrão

Se você estiver fazendo a atualização de uma versão anterior do Kubernetes ou se tiver modificado ou excluído a política de segurança de Pod eks.privileged padrão do Amazon EKS, poderá restaurá-la com as etapas a seguir.

  1. Crie um arquivo chamado privileged-podsecuritypolicy.yaml com o conteúdo a seguir.

    apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: eks.privileged annotations: kubernetes.io/description: 'privileged allows full unrestricted access to Pod features, as if the PodSecurityPolicy controller was not enabled.' seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*' labels: kubernetes.io/cluster-service: "true" eks.amazonaws.com/component: pod-security-policy spec: privileged: true allowPrivilegeEscalation: true allowedCapabilities: - '*' volumes: - '*' hostNetwork: true hostPorts: - min: 0 max: 65535 hostIPC: true hostPID: true runAsUser: rule: 'RunAsAny' seLinux: rule: 'RunAsAny' supplementalGroups: rule: 'RunAsAny' fsGroup: rule: 'RunAsAny' readOnlyRootFilesystem: false --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:podsecuritypolicy:privileged labels: kubernetes.io/cluster-service: "true" eks.amazonaws.com/component: pod-security-policy rules: - apiGroups: - policy resourceNames: - eks.privileged resources: - podsecuritypolicies verbs: - use --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:podsecuritypolicy:authenticated annotations: kubernetes.io/description: 'Allow all authenticated users to create privileged Pods.' labels: kubernetes.io/cluster-service: "true" eks.amazonaws.com/component: pod-security-policy roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:podsecuritypolicy:privileged subjects: - kind: Group apiGroup: rbac.authorization.k8s.io name: system:authenticated
  2. Aplique o YAML com o comando a seguir.

    kubectl apply -f privileged-podsecuritypolicy.yaml