Pod-Sicherheitsrichtlinie - Amazon EKS

Pod-Sicherheitsrichtlinie

Der Zulassungscontroller für Kubernetes-Pod-Sicherheitsrichtlinien überprüft Pod-Erstellung und Update-Anfragen anhand einer Reihe von Regeln. Standardmäßig werden Amazon-EKS-Cluster mit einer vollständig permissiven Sicherheitsrichtlinie ohne Einschränkungen bereitgestellt. Weitere Informationen finden Sie unter Pod Security Policies in der Kubernetes-Dokumentation.

Anmerkung

Ab Kubernetes v1.21 ist diese Funktion veraltet. PodSecurityPolicy wird für mehrere weitere Releases funktionsfähig sein, wobei die Richtlinien zur Einstellung von Kubernetes befolgt werden. Weitere Informationen finden Sie unter PodSecurityPolicy veraltet: Vergangenheit, Gegenwart und Zukunft und im AWS-Blog.

Amazon-EKS-Pod-Standardsicherheitsrichtlinie

Amazon-EKS-Cluster mit Kubernetes, Version 1.13 und höher, besitzen eine Standard-Pod-Sicherheitsrichtlinie mit dem Namen eks.privileged. Diese Richtlinie weist keine Einschränkungen hinsichtlich der Art der vom System akzeptierten Pods auf. Dies entspricht der Ausführung von Kubernetes mit deaktiviertem PodSecurityPolicy-Controller.

Anmerkung

Diese Richtlinie wurde erstellt, um die Rückwärtskompatibilität mit Clustern aufrechtzuerhalten, für die der PodSecurityPolicy-Controller nicht aktiviert war. Sie können restriktivere Richtlinien für Ihren Cluster und für einzelne Namespaces und Service-Konten erstellen und dann die Standardrichtlinie löschen, um die restriktiveren Richtlinien zu aktivieren.

Sie können die Standardrichtlinie mit dem folgenden Befehl anzeigen.

kubectl get psp eks.privileged

Ausgabe:

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

Um weitere Details anzugeben, können Sie die Richtlinie mit dem folgenden Befehl beschreiben.

kubectl describe psp eks.privileged

Ausgabe:

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>

Das folgende Beispiel zeigt die vollständige YAML-Datei für die eks.privileged-Pod-Sicherheitsrichtlinie, die Cluster-Rolle und Cluster-Rollenverbindung.

--- 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

So löschen Sie die Pod-Standardsicherheitsrichtlinie

Nach dem Erstellen benutzerdefinierter Pod-Sicherheitsrichtlinien für Ihre Cluster löschen können Sie die Amazon-EKS-eks.privileged-Pod-Standardsicherheitsrichtlinie löschen, um Ihre benutzerdefinierten Richtlinien zu aktivieren.

  1. Erstellen Sie eine Datei mit dem Namen privileged-podsecuritypolicy.yaml und fügen Sie in sie den vollständigen Inhalt der YAML-Datei eks.privileged aus dem vorherigen Beispiel ein (dies ermöglicht es Ihnen, die ihr zugeordnete Pod-Sicherheitsrichtlinie, ClusterRole und ClusterRoleBinding zu löschen).

  2. Löschen Sie die YAML-Datei mit dem folgenden Befehl.

    kubectl delete -f privileged-podsecuritypolicy.yaml

So installieren Sie die Standard-Pod-Sicherheitsrichtlinie oder stellen sie wieder her

Wenn Sie ein Upgrade von einer früheren Version von Kubernetes durchführen oder die standardmäßige Amazon-EKS-eks.privileged-Pod-Sicherheitsrichtlinie geändert oder gelöscht haben, können Sie sie mit den folgenden Schritten wiederherstellen.

  1. Erstellen Sie eine Datei mit dem Namen privileged-podsecuritypolicy.yaml und fügen Sie den Inhalt der YAML-Datei unten ein.

    --- 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. Wenden Sie die YAML-Datei mit dem folgenden Befehl an.

    kubectl apply -f privileged-podsecuritypolicy.yaml