Policy di sicurezza pod - Amazon EKS

Policy di sicurezza pod

Il controller di ammissione della policy di sicurezza pod Kubernetes convalida le richieste di creazione e aggiornamento dei pod rispetto a una serie di regole. Per impostazione predefinita, i cluster Amazon EKS vengono forniti con una policy di sicurezza con autorizzazioni complete senza limitazioni. Per ulteriori informazioni, consulta l'argomento relativo alle policy di sicurezza pod nella documentazione Kubernetes.

Nota

A partire da Kubernetes v1.21, questa caratteristica è obsoleta. PolicySicurezzaPod sarà funzionale per molte altre versioni, seguendo le linee guida di deprecazione di Kubernetes. Per ulteriori informazioni, vedi Deprecazione di PodSecurityPolicy: passato, presente e futuroe la blog su AWS.

Policy di sicurezza pod predefinita Amazon EKS

Cluster Amazon EKS con Kubernetes versione 1.13 e successive hanno una policy di sicurezza pod predefinita denominata eks.privileged. Questa policy non prevede limitazioni sul tipo di pod che può essere accettato nel sistema, il che equivale all'esecuzione di Kubernetes con il controller PodSecurityPolicy disabilitato.

Nota

Questa policy è stata creata per mantenere la compatibilità con le versioni precedenti dei cluster che non hanno il controller PodSecurityPolicy abilitato. È possibile creare policy più restrittive per il cluster e per i singoli spazi dei nomi e gli account di servizio, quindi eliminare la policy predefinita per abilitare le policy più restrittive.

Puoi visualizzare la policy predefinita con il comando seguente.

kubectl get psp eks.privileged

Output:

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

Per ulteriori dettagli, è possibile descrivere la policy con il comando seguente.

kubectl describe psp eks.privileged

Output:

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>

È possibile visualizzare il file YAML completo per la policy di sicurezza pod eks.privileged, il ruolo del cluster e l'associazione del ruolo del cluster in Installa o ripristina la policy di sicurezza pod predefinita.

Eliminazione di una policy di sicurezza pod predefinita Amazon EKS

Se crei policy più restrittive per i pod, successivamente è possibile eliminare la policy di sicurezza pod Amazon EKS predefinita eks.privileged per abilitare le policy personalizzate.

Importante

Se si utilizza la versione 1.7.0 o successive del plug-in CNI e si assegna una policy di sicurezza del pod personalizzato all'account del servizio aws-node Kubernetes utilizzato per i pod aws-node implementati dal Daemonset, la policy deve avere NET_ADMIN nella sua sezione allowedCapabilities oltre a hostNetwork: true e privileged: true nella spec della policy.

Per eliminare la policy di sicurezza pod predefinita

  1. Creare un file denominato privileged-podsecuritypolicy.yaml con il contenuto nel file di esempio in Installa o ripristina la policy di sicurezza pod predefinita.

  2. Eliminare il file YAML con il comando seguente. In questo modo viene eliminata la policy di sicurezza pod predefinita, il ClusterRole e il ClusterRoleBinding ad esso associati.

    kubectl delete -f privileged-podsecuritypolicy.yaml

Installa o ripristina la policy di sicurezza pod predefinita

Se si esegue l'aggiornamento da una versione precedente di Kubernetes o si è modificato o eliminato la policy di sicurezza pod Amazon EKS predefinita eks.privileged, è possibile ripristinarla con la seguente procedura.

Per installare o ripristinare la policy di sicurezza pod predefinita

  1. Crea un file denominato privileged-podsecuritypolicy.yaml, con i seguenti contenuti.

    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. Applicare il file YAML con il comando seguente.

    kubectl apply -f privileged-podsecuritypolicy.yaml