Les versions 1.25 et ultérieures de Tanzu Kubernetes prennent en charge le contrôleur d'admission de sécurité de l'espace (PSA, Pod Security Admission). Avec PSA, vous pouvez appliquer uniformément la sécurité de l'espace à l'aide d'étiquettes d'espace de noms.
PSA activé dans TKR 1.25 et versions ultérieures
Le contrôleur d'admission de sécurité de l'espace est un contrôleur Kubernetes qui vous permet d'appliquer des normes de sécurité aux espaces s'exécutant sur vos clusters TKG. Par défaut, les versions v1.25 et ultérieures de Tanzu Kubernetes activent le contrôleur d'admission de sécurité de l'espace (PSA). Le contrôleur PSA remplace le contrôleur PSP (Pod Security Policy), qui est obsolète et supprimé. Voir aussi Configurer PSP pour TKR 1.24 et versions ultérieures.
Tanzu Kubernetes version v1.25 est une version de transition avec PSA configuré pour avertir. À partir de Tanzu Kubernetes version v1.26, PSA est appliqué. Vous devez planifier la migration des charges de travail d'espace de PSP vers PSA en prévision de la mise à niveau des clusters TKG. Pour obtenir des instructions, reportez-vous à la section Migrer de la stratégie de sécurité de l'espace au contrôleur d'admission de sécurité de l'espace intégré.
Configuration de PSA à l'échelle du cluster
À partir de vSphere 8 Update 3, vous pouvez configurer PSA à l'échelle du cluster à l'aide de la variable ClusterClass podSecurityStandard
disponible avec l'API v1beta1. Reportez-vous à la section API de cluster v1beta1.
Modes PSA
enforce
,
audit
et
warn
. Le tableau répertorie et décrit chacun des modes PSA.
MODE | Description |
---|---|
enforce |
Les violations de sécurité entraînent le rejet de l'espace. |
audit |
Les violations de sécurité déclenchent l'ajout d'une annotation d'audit à l'événement, enregistrée dans le journal d'audit, mais sont autorisées par ailleurs. |
warn |
Les violations de sécurité déclenchent un avertissement pour l'utilisateur, mais sont autorisées par ailleurs. |
Normes PSA
NIVEAU | Description |
---|---|
privileged |
Contrôle sans restriction, fournissant le niveau d'autorisations le plus large possible. Cette norme de sécurité permet des escalades de privilèges connus. |
baseline |
Contrôle très peu restrictif, qui empêche les escalades de privilèges connus. Cette norme de sécurité permet la configuration de l'espace par défaut (minimale). |
restricted |
Contrôle fortement restrictif, conformément aux meilleures pratiques de sécurisation renforcée des espaces. |
Étiquettes d'espace de noms PSA
Le contrôleur PSA applique la sécurité de l'espace au niveau de l'espace de noms Kubernetes. Vous utilisez des étiquettes d'espace de noms pour définir les modes et les niveaux PSA que vous souhaitez utiliser pour les espaces dans un espace de noms donné.
Kubernetes fournit un ensemble d'étiquettes que vous pouvez utiliser pour définir les normes à utiliser pour un espace de noms. L'étiquette que vous appliquez définit l'action effectuée par le plan de contrôle Kubernetes en cas de détection d'une violation PSA. Pour un espace de noms Kubernetes donné, vous pouvez configurer n'importe quel mode ou tous les modes, ou définir un niveau différent pour différents modes.
# MODE must be one of `enforce`, `audit`, or `warn`. # LEVEL must be one of `privileged`, `baseline`, or `restricted`. pod-security.kubernetes.io/<MODE>=<LEVEL>
Vous pouvez également appliquer une étiquette de version par mode qui peut être utilisée pour épingler la norme de sécurité à la version de Kubernetes. Pour plus d'informations, reportez-vous à la section Appliquer les normes de sécurité d'espace aux étiquettes d'espace de noms.
PSA par défaut pour les clusters TKG
Par défaut, les clusters TKG provisionnés avec Tanzu Kubernetes version v1.25 ont des modes PSA warn
et audit
définis sur restricted
pour les espaces de noms non-système. Il s'agit d'un paramètre non forcé : le contrôleur PSA génère un avertissement et une notification d'audit si un espace enfreint la sécurité, mais l'espace n'est pas rejeté.
enforce
défini sur
restricted
pour les espaces de noms non-système. Si un espace enfreint la sécurité, il est rejeté. Vous devez configurer PSA sur l'espace de noms pour exécuter des espaces avec un contrôle moins restrictif.
Version de TKR | PSA par défaut |
---|---|
TKR v1.25 | mode : avertissement | niveau : limité mode : audit | niveau : limité mode : application | niveau : non défini |
TKR v1.26 et ultérieures | mode : application | niveau : limité |
Configuration de PSA à l'aide d'étiquettes d'espace de noms
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/audit=privileged kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/warn=privileged
restricted
à
baseline
.
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=baseline
baseline
sur l'espace de noms par défaut :
kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=baseline
restricted
à
privileged
.
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=privileged
privileged
sur l'espace de noms par défaut :
kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=privileged
Pour Tanzu Kubernetes versions v1.26 et ultérieures, utilisez les exemples de commandes suivants pour assouplir PSA sur tous les espaces de noms non-système.
kubectl label --overwrite ns --all pod-security.kubernetes.io/enforce=privileged
kubectl label --overwrite ns --all pod-security.kubernetes.io/warn=restricted
Configuration du contexte de sécurité pour des espaces individuels
{"opType":"CREATE_POD","succeeded":false,"err":"creating pod example-pod: pods \"example-pod\" is forbidden: violates PodSecurity \"restricted:latest\": allowPrivilegeEscalation != false (container \"example-container\" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container \"example-container\" must set securityContext.capabilities.drop=[\"ALL\"]), runAsNonRoot != true (pod or container \"example-container\" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container \"example-container\" must set securityContext.seccompProfile.type to \"RuntimeDefault\" or \"Localhost\")","events":[]}
apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - image: gcr.io/google_containers/busybox:1.24 name: example-container command: ["/bin/sh", "-c", "echo 'hello' > /mnt/volume1/index.html && chmod o+rX /mnt /mnt/volume1/index.html && while true ; do sleep 2 ; done"] securityContext: allowPrivilegeEscalation: false runAsNonRoot: true seccompProfile: type: "RuntimeDefault" capabilities: drop: [all] volumeMounts: - name: example-volume-mount mountPath: /mnt/volume1 restartPolicy: Never volumes: - name: example-volume persistentVolumeClaim: claimName: example-pvc