Política de seguridad del pod - Amazon EKS

Política de seguridad del pod

El controlador de admisión de la política de seguridad del Pod de Kubernetes valida la creación del Pod y actualiza las solicitudes utilizando un conjunto de reglas. Los clústeres de Amazon EKS se envían con un política de seguridad totalmente permisiva y sin restricciones de forma predeterminada. Para obtener más información, consulte Políticas de seguridad del pod en la documentación de Kubernetes.

nota

La PodSecurityPolicy (PSP) quedó obsoleta en la versión de Kubernetes 1.21 y se eliminó en Kubernetes 1.25. Los PSPs se sustituirán por Pod Security Admission (PSA), un controlador de admisión integrado que implementa los controles de seguridad descritos en los estándares de seguridad de pods (PSS). Tanto PSA como PSS han alcanzado el estado de características beta y están habilitadas en Amazon EKS de forma predeterminada. Para hacer frente a la eliminación de PSP en 1.25, le recomendamos que implemente PSS en Amazon EKS. Para obtener más información, consulte Implementing Pod Security Standards in Amazon EKS (Implementación de estándares de seguridad para módulos en Amazon EKS) en el blog de AWS.

Política de seguridad predeterminada del Pod de Amazon EKS

Los clústeres de Amazon EKS con la versión 1.13 y posterior de Kubernetes tienen una política de seguridad de Pod predeterminada denominada eks.privileged. Esta política no presenta restricciones en cuanto al tipo de Pod que se puede aceptar en el sistema, lo que equivale a ejecutar Kubernetes con el controlador PodSecurityPolicy deshabilitado.

nota

Esta política se creó mantener la compatibilidad con los clústeres que no tenía el controlador PodSecurityPolicy habilitado. Puede crear políticas más restrictivas para su clúster y para los espacios de nombres individuales y cuentas de servicio y, a continuación, eliminar la política predeterminada para habilitar políticas más restrictivas.

Puede consultar la política predeterminada con el siguiente comando.

kubectl get psp eks.privileged

Un ejemplo de salida sería el siguiente.

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

Para obtener más información, puede describir la política con el siguiente comando.

kubectl describe psp eks.privileged

Un ejemplo de salida sería el siguiente.

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>

Puede ver el archivo YAML completo de la política de seguridad del Pod eks.privileged, el rol de clúster y la vinculación del rol de clúster en Instale o restaure la política de seguridad del Pod predeterminada.

Eliminar la política de seguridad predeterminada del Pod de Amazon EKS

Si crea políticas más restrictivas para sus Pods, después de hacerlo, puede eliminar la política de seguridad del Pod eks.privileged de Amazon EKS predeterminada a fin de habilitar sus políticas personalizadas.

importante

Si utiliza la versión 1.7.0 o posterior del complemento CNI y asigna una política de seguridad de Pod personalizada a la cuenta de servicio de aws-node Kubernetes utilizada para los Pods de aws-node implementados por el Daemonset, la política debe contar con NET_ADMIN en su sección de allowedCapabilities junto con hostNetwork: true y privileged: true en el objeto spec de la política.

Para eliminar la política de seguridad de Pod predeterminada
  1. Cree un archivo denominado privileged-podsecuritypolicy.yaml con el contenido del archivo de ejemplo en Instale o restaure la política de seguridad del Pod predeterminada.

  2. Elimine el archivo YAML con el siguiente comando. Elimina la política de seguridad predeterminada del Pod, el ClusterRole y el ClusterRoleBinding asociado a él.

    kubectl delete -f privileged-podsecuritypolicy.yaml

Instale o restaure la política de seguridad del Pod predeterminada

Si actualiza desde una versión anterior de Kubernetes o ha modificado o eliminado la política de seguridad del Pod eks.privileged de Amazon EKS, puede restaurarla con los pasos que se describen a continuación.

Para instalar o restaurar la política de seguridad del Pod predeterminada
  1. Cree un archivo denominado privileged-podsecuritypolicy.yaml con el siguiente contenido.

    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 el archivo YAML con el siguiente comando.

    kubectl apply -f privileged-podsecuritypolicy.yaml