Utiliser des contraintes pour appliquer les règles de sécurité des pods

Cette rubrique explique comment utiliser les contraintes de Policy Controller afin d'obtenir en grande partie les mêmes protections que PodSecurityPolicies, avec en plus la possibilité de tester vos stratégies avant de les appliquer. Les exemples de cette rubrique ne couvrent pas toutes les contraintes associées, mais montrent comment débuter.

Avant de commencer

Installez Policy Controller sur l'un de vos clusters enregistrés dans Anthos Config Management. Veillez à laisser la bibliothèque de modèles de contraintes activée.

Le code source des contraintes et des modèles de contraintes abordés dans cette rubrique est disponible dans le répertoire pod-security-policy du dépôt du projet Gatekeeper. Chacun des modèles de contraintes comprend également des tests unitaires.

Empêcher les pods d'exécuter des conteneurs privilégiés

Un exemple fourni dans la rubrique sur PodSecurityPolicies empêche les pods d'exécuter des conteneurs privilégiés. Cela est recommandé, car les conteneurs privilégiés peuvent potentiellement affecter le système d'exploitation hôte sur le nœud ou d'autres charges de travail s'exécutant sur le nœud.

Cette contrainte réimplémente la même restriction, en utilisant le modèle de contrainte K8sPSPPrivilegedContainer :

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPPrivilegedContainer
metadata:
  name: psp-privileged-container
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]

Exiger un système de fichiers racine en lecture seule sur le conteneur

Par défaut, un conteneur peut écrire dans son système de fichiers racine. Outre les problèmes de sécurité, cela peut entraîner des goulots d'étranglement qui affectent les performances en raison de la latence en écriture dans la couche accessible en écriture du conteneur. Vous pouvez exiger un système de fichiers racine en lecture seule sur les conteneurs à l'aide d'une règle PodSecurityPolicy ou à l'aide d'une contrainte. Cette contrainte utilise le modèle de contrainte K8sPSPReadOnlyRootFilesystem.

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPReadOnlyRootFilesystem
metadata:
  name: psp-readonlyrootfilesystem
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]

Restreindre les types de volumes qu'un conteneur peut installer

Par défaut, un conteneur peut installer tout type de volume enregistré auprès de l'API Kubernetes sur le cluster. Cette contrainte restreint les conteneurs à un ensemble limité de types de volume, à l'aide du modèle de contrainte K8sPSPVolumeTypes.

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPVolumeTypes
metadata:
  name: psp-volume-types
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
  parameters:
    volumes:
    # - "*" # * may be used to allow all volume types
    - configMap
    - emptyDir
    - projected
    - secret
    - downwardAPI
    - persistentVolumeClaim
    #- hostPath #required for allowedHostPaths
    - flexVolume #required for allowedFlexVolumes

Résultats de l'audit

Vous pouvez tester l'efficacité des contraintes sans perturber les charges de travail actives à l'aide de l'action d'application dryrun. Cette opération produit des résultats d'audit pour vos règles sans bloquer activement. Pour en savoir plus, consultez la page Effectuer un audit à l'aide de contraintes.

Étape suivante