Standard Pod-Sicherheitsrichtlinien
Dieses Dokument beschreibt, wie RKE2 PodSecurityPolicies und NetworkPolicies konfiguriert, um standardmäßig sicher zu sein und gleichzeitig den Betreibern maximale Konfigurationsflexibilität zu bieten.
|
Versionssperre
Dieses Dokument gilt für RKE2 v1.24 und ältere Versionen. Bitte entnehmen Sie die Informationen zur Standardrichtlinie für RKE2 v1.25 und höher der Dokumentation der Pod-Sicherheitsstandards. |
Pod-Sicherheitsrichtlinien
RKE2 kann mit oder ohne den profile: cis-1.6 Konfigurationsparameter betrieben werden. Dies führt dazu, dass beim Start unterschiedliche PodSecurityPolicies (PSPs) angewendet werden.
-
Wenn mit dem
cis-1.6Profil betrieben, wendet RKE2 eine restriktive Richtlinie namensglobal-restricted-pspauf alle Namespaces außerkube-systeman. Derkube-systemNamespace benötigt eine weniger restriktive Richtlinie namenssystem-unrestricted-psp, um kritische Komponenten zu starten. -
Wenn ohne das
cis-1.6Profil betrieben, wendet RKE2 eine völlig uneingeschränkte Richtlinie namensglobal-unrestricted-pspan, was dem Betrieb ohne den PSP-Zulassungscontroller entspricht.
RKE2 wird diese Richtlinien beim ersten Start implementieren, aber danach nicht mehr ändern, es sei denn, dies wird ausdrücklich vom Clusterbetreiber wie unten beschrieben ausgelöst. Dies ermöglicht es dem Betreiber, die PSPs vollständig zu kontrollieren, ohne dass die Standardeinstellungen von RKE2 stören.
Die Erstellung und Anwendung der PSPs werden durch das Vorhandensein oder Fehlen bestimmter Annotationen im kube-system Namespace gesteuert. Diese ordnen sich direkt den PSPs zu, die erstellt werden können:
-
psp.rke2.io/global-restricted -
psp.rke2.io/system-unrestricted -
psp.rke2.io/global-unrestricted
Die folgende Logik wird beim Start für die Richtlinien und deren Annotationen ausgeführt:
-
Wenn die Annotation vorhanden ist, fährt RKE2 ohne weitere Maßnahmen fort.
-
Wenn die Annotation nicht vorhanden ist, überprüft RKE2, ob die zugehörige Richtlinie existiert, und falls ja, löscht sie und erstellt sie neu sowie fügt die Annotation dem Namespace hinzu.
-
Im Fall des
global-unrestricted-pspwird die Richtlinie nicht neu erstellt. Dies dient dazu, den Wechsel zwischen CIS- und Nicht-CIS-Modi zu berücksichtigen, ohne den Cluster weniger sicher zu machen. -
Bei der Erstellung einer Richtlinie werden auch Clusterrollen und Clusterrollenbindungen erstellt, um sicherzustellen, dass die entsprechenden Richtlinien standardmäßig in Kraft treten.
Nach dem ersten Start können Betreiber die Richtlinien von RKE2 ändern oder löschen, und RKE2 wird diese Änderungen respektieren. Um eine Richtlinie "zurückzusetzen", muss ein Betreiber lediglich die zugehörige Annotation aus dem kube-system Namespace löschen und RKE2 neu starten.
Die Richtlinien sind unten aufgeführt, beginnend mit der restriktivsten global-restricted PSP.
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: global-restricted-psp
spec:
privileged: false # CIS - 5.2.1
allowPrivilegeEscalation: false # CIS - 5.2.5
requiredDropCapabilities: # CIS - 5.2.7/8/9
- ALL
volumes:
- 'configMap'
- 'emptyDir'
- 'projected'
- 'secret'
- 'downwardAPI'
- 'persistentVolumeClaim'
hostNetwork: false # CIS - 5.2.4
hostIPC: false # CIS - 5.2.3
hostPID: false # CIS - 5.2.2
runAsUser:
rule: 'MustRunAsNonRoot' # CIS - 5.2.6
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
fsGroup:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
readOnlyRootFilesystem: false
Wenn RKE2 im Nicht-CIS-Modus gestartet wird, werden die Annotationen wie oben überprüft, wobei in der Folge eine permissive Anwendung der Pod-Sicherheitsrichtlinien erfolgt. Siehe unten.
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: global-unrestricted-psp
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'
In beiden Fällen wird die "System unrestricted policy" angewendet. Siehe unten.
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: system-unrestricted-psp
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'
Um die derzeit auf Ihrem System bereitgestellten Pod-Sicherheitsrichtlinien anzuzeigen, führen Sie den folgenden Befehl aus:
kubectl get psp -A
Netzwerkrichtlinien
Wenn RKE2 mit dem profile: cis-1.6 Parameter ausgeführt wird, werden 2 Netzwerkrichtlinien auf die kube-system, kube-public und default Namespaces angewendet, wobei auch die zugehörigen Annotationen gesetzt werden. Die gleiche Logik gilt für diese Richtlinien und Annotationen wie für die PSPs. Beim Start werden die Annotationen für jeden Namespace auf ihre Existenz überprüft und wenn sie existieren, unternimmt RKE2 keine Maßnahmen. Wenn die Annotation nicht existiert, überprüft RKE2, ob die Richtlinie existiert, und wenn ja, erstellt RKE2 sie neu.
Die erste angewendete Richtlinie beschränkt den Netzwerkverkehr nur auf den Namespace selbst. Siehe unten.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
managedFields:
- apiVersion: networking.k8s.io/v1
fieldsType: FieldsV1
fieldsV1:
f:spec:
f:ingress: {}
f:policyTypes: {}
name: default-network-policy
namespace: default
spec:
ingress:
- from:
- podSelector: {}
podSelector: {}
policyTypes:
- Ingress
Die zweite angewendete Richtlinie gilt für den kube-system Namespace und erlaubt DNS-Verkehr. Siehe unten.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
managedFields:
- apiVersion: networking.k8s.io/v1
fieldsV1:
f:spec:
f:ingress: {}
f:podSelector:
f:matchLabels:
f:policyTypes: {}
name: default-network-dns-policy
namespace: kube-system
spec:
ingress:
- ports:
- port: 53
protocol: TCP
- port: 53
protocol: UDP
podSelector:
matchLabels:
policyTypes:
- Ingress
RKE2 wendet die default-network-policy Richtlinie und die np.rke2.io Annotation auf alle integrierten Namespaces an. Der kube-system Namespace erhält zusätzlich die default-network-dns-policy Richtlinie und die np.rke2.io/dns Annotation.
Um die derzeit auf Ihrem System bereitgestellten Netzwerkrichtlinien anzuzeigen, führen Sie den folgenden Befehl aus:
kubectl get networkpolicies -A