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
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 futuro
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.
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.
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
-
Creare un file denominato
con il contenuto nel file di esempio in Installa o ripristina la policy di sicurezza pod predefinita.privileged-podsecuritypolicy.yaml
-
Eliminare il file YAML con il comando seguente. In questo modo viene eliminata la policy di sicurezza pod predefinita, il
ClusterRole
e ilClusterRoleBinding
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
-
Crea un file denominato
, con i seguenti contenuti.privileged-podsecuritypolicy.yaml
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
-
Applicare il file YAML con il comando seguente.
kubectl apply -f
privileged-podsecuritypolicy.yaml