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
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)1.25
, recomendamos que você implemente PSS no Amazon EKS. Para obter mais informações, consulte Implementing Pod Security Standards in Amazon EKS
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.
-
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. -
Exclua o YAML com o comando a seguir. Isso exclui a política de segurança de Pod padrão, a
ClusterRole
e aClusterRoleBinding
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.
-
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
-
Aplique o YAML com o comando a seguir.
kubectl apply -f privileged-podsecuritypolicy.yaml