Política de segurança de pods - Amazon EKS

Ajudar a melhorar esta página

Quer contribuir para este guia do usuário? Role até o final desta página e selecione Editar esta página no GitHub. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.

Política de segurança de pods

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>

Visualize o arquivo YAML completo para a política de segurança de Pod eks.privileged, a função de cluster e a vinculação de função do cluster em Instalar ou restaurar a política de segurança de Pod padrão.

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.

Para excluir a política de segurança de Pod padrão
  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.

  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.

Como instalar ou restaurar a política de segurança de Pod padrão
  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