Policy Controller est fourni avec une bibliothèque par défaut de modèles de contrainte qui peuvent être utilisés avec le bundle de référence des normes de sécurité des pods. Ce bundle vous permet d'obtenir la plupart des protections offertes par la règle de référence des normes de sécurité des pods de Kubernetes. Il permet en outre de tester vos règles avant leur application et d'exclure certaines ressources de la couverture.
Contraintes du bundle de règles de référence des normes de sécurité des pods
Nom de la contrainte | Description de la contrainte | Nom des contrôles |
---|---|---|
pss-baseline-v2022-hostprocess | Utilisation de Windows HostProcess | HostProcess |
pss-baseline-v2022-host-namespaces-hostnetwork | Utilisation du réseau d'hôtes | Espaces de noms d'hôte |
pss-baseline-v2022-host-namespaces-host-pid-ipc | Utilisation des espaces de noms d'hôte | |
pss-baseline-v2022-privileged-containers | Exécution de conteneurs privilégiés | Conteneurs privilégiés |
pss-baseline-v2022-capabilities | Fonctionnalités Linux | Fonctionnalités |
pss-baseline-v2022-hostpath-volumes | Utilisation du système de fichiers hôte | Volumes hostPath |
pss-baseline-v2022-host-ports | Utiliser les ports hôtes | Ports hôtes (configurables) |
pss-baseline-v2022-apparmor | Profil AppArmor utilisé par les conteneurs | AppArmor |
pss-baseline-v2022-selinux | Contexte SELinux du conteneur | SELinux |
pss-baseline-v2022-proc-mount-type | Types Allowed Proc Mount pour le conteneur | Type d'installation /proc |
pss-baseline-v2022-seccomp | Profil seccomp utilisé par les conteneurs | Seccomp |
pss-baseline-v2022-sysctls | Profil sysctl utilisé par les conteneurs | sysctls |
Avant de commencer
- Installez et initialisez Google Cloud CLI, qui fournit les commandes
gcloud
etkubectl
utilisées dans ces instructions. Si vous utilisez Cloud Shell, Google Cloud CLI est préinstallé. - Installez Policy Controller v1.14.1 ou version ultérieure sur votre cluster avec la bibliothèque par défaut de modèles de contraintes.
Auditer le bundle de règles de référence des normes de sécurité des pods
Policy Controller vous permet d'appliquer des règles à votre cluster Kubernetes. Pour tester vos charges de travail et leur conformité avec les bonnes pratiques recommandées par Google décrites dans le tableau précédent, vous pouvez déployer ces contraintes en mode "audit" pour révéler les cas de non-respect et, plus important, vous donner la possibilité de les corriger avant de les appliquer à votre cluster Kubernetes.
Vous pouvez appliquer ces règles en définissant le paramètre spec.enforcementAction
sur dryrun
à l'aide de kpt ou de Config Sync.
kubectl
(Facultatif) Prévisualisez les contraintes de règle avec kubectl :
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
Appliquez les contraintes de règle avec kubectl :
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
Le résultat est le suivant :
k8spspapparmor.constraints.gatekeeper.sh/pss-baseline-v2022-apparmor created k8spspcapabilities.constraints.gatekeeper.sh/pss-baseline-v2022-capabilities created k8spsphostfilesystem.constraints.gatekeeper.sh/pss-baseline-v2022-hostpath-volumes created k8spsphostnamespace.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-host-pid-ipc created k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-hostnetwork created k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-ports created k8spspprivilegedcontainer.constraints.gatekeeper.sh/pss-baseline-v2022-privileged-containers created k8spspprocmount.constraints.gatekeeper.sh/pss-baseline-v2022-proc-mount-type created k8spspselinuxv2.constraints.gatekeeper.sh/pss-baseline-v2022-selinux created k8spspseccomp.constraints.gatekeeper.sh/pss-baseline-v2022-seccomp created k8spspforbiddensysctls.constraints.gatekeeper.sh/pss-baseline-v2022-sysctls created
Vérifiez que les contraintes de règles ont été installées et si des cas de non-respect existent dans le cluster :
kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
Le résultat ressemble à ce qui suit :
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspapparmor.constraints.gatekeeper.sh/pss-baseline-v2022-apparmor 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspcapabilities.constraints.gatekeeper.sh/pss-baseline-v2022-capabilities dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostfilesystem.constraints.gatekeeper.sh/pss-baseline-v2022-hostpath-volumes 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnamespace.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-host-pid-ipc dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-hostnetwork dryrun 0 k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-ports dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprivilegedcontainer.constraints.gatekeeper.sh/pss-baseline-v2022-privileged-containers dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprocmount.constraints.gatekeeper.sh/pss-baseline-v2022-proc-mount-type 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspselinuxv2.constraints.gatekeeper.sh/pss-baseline-v2022-selinux 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspseccomp.constraints.gatekeeper.sh/pss-baseline-v2022-seccomp dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspforbiddensysctls.constraints.gatekeeper.sh/pss-baseline-v2022-sysctls dryrun 0
(Facultatif) Ajustez la contrainte
pss-baseline-v2022-host-ports
pour inclure une liste minimale de ports connus restreinte pour votre environnement de cluster :parameters: # A minimum restricted known list can be implemented here. min: 0 max: 0
kpt
Installez et configurez kpt. kpt est utilisé dans ces instructions pour personnaliser et déployer les ressources Kubernetes.
Téléchargez le bundle de règles de référence v2022 des normes de sécurité des pods (PSS) depuis GitHub à l'aide de Kpt :
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
Exécutez la fonction kpt
set-enforcement-action
pour définir l'action d'application des règles surdryrun
:kpt fn eval pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
Initialisez le répertoire de travail avec kpt, qui crée une ressource pour suivre les modifications :
cd pss-baseline-v2022 kpt live init
(Facultatif) Ajustez le fichier de contrainte
pss-baseline-v2022-host-ports
pour inclure une liste minimale de ports connus restreinte pour votre environnement de cluster :parameters: # A minimum restricted known list can be implemented here. min: 0 max: 0
Appliquez les contraintes de règles avec kpt :
kpt live apply
Vérifiez que les contraintes de règles ont été installées et si des cas de non-respect existent dans le cluster :
kpt live status --output table --poll-until current
L'état
CURRENT
confirme l'installation correcte des contraintes.
Config Sync
- Installez et configurez kpt. kpt est utilisé dans ces instructions pour personnaliser et déployer les ressources Kubernetes.
Les opérateurs qui utilisent Config Sync pour déployer des règles sur leurs clusters peuvent suivre ces instructions :
Accédez au répertoire de synchronisation pour Config Sync :
cd SYNC_ROOT_DIR
Pour créer ou ajouter
.gitignore
avecresourcegroup.yaml
:echo resourcegroup.yaml >> .gitignore
Créez un répertoire
policies
dédié :mkdir -p policies
Téléchargez le bundle de règles de référence v2022 des normes de sécurité des pods (PSS) depuis GitHub à l'aide de Kpt :
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022 policies/pss-baseline-v2022
Exécutez la fonction kpt
set-enforcement-action
pour définir l'action d'application des règles surdryrun
:kpt fn eval policies/pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(Facultatif) Ajustez le fichier de contrainte
pss-baseline-v2022-host-ports
pour inclure une liste minimale de ports connus restreinte pour votre environnement de cluster :parameters: # A minimum restricted known list can be implemented here. min: 0 max: 0
(Facultatif) Prévisualisez les contraintes de règles à créer :
kpt live init policies/pss-baseline-v2022 kpt live apply --dry-run policies/pss-baseline-v2022
Le résultat est le suivant :
Dry-run strategy: client inventory update started inventory update finished apply phase started k8spspapparmor.constraints.gatekeeper.sh/pss-baseline-v2022-apparmor apply successful k8spspcapabilities.constraints.gatekeeper.sh/pss-baseline-v2022-capabilities apply successful k8spsphostfilesystem.constraints.gatekeeper.sh/pss-baseline-v2022-hostpath-volumes apply successful k8spsphostnamespace.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-host-pid-ipc apply successful k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-hostnetwork apply successful k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-ports apply successful k8spspprivilegedcontainer.constraints.gatekeeper.sh/pss-baseline-v2022-privileged-containers apply successful k8spspprocmount.constraints.gatekeeper.sh/pss-baseline-v2022-proc-mount-type apply successful k8spspselinuxv2.constraints.gatekeeper.sh/pss-baseline-v2022-selinux apply successful k8spspseccomp.constraints.gatekeeper.sh/pss-baseline-v2022-seccomp apply successful apply phase finished inventory update started inventory update finished apply result: 10 attempted, 10 successful, 0 skipped, 0 failed
Si votre répertoire de synchronisation pour Config Sync utilise Kustomize, ajoutez
policies/pss-baseline-v2022
à votre fichierkustomization.yaml
racine. Sinon, supprimez le fichierpolicies/pss-baseline-v2022/kustomization.yaml
:rm SYNC_ROOT_DIR/policies/pss-baseline-v2022/kustomization.yaml
Transférez les modifications au dépôt Config Sync :
git add SYNC_ROOT_DIR/pss-baseline-v2022 git commit -m 'Adding Pod Security Standards Baseline audit enforcement' git push
Vérifiez l'état de l'installation :
watch gcloud beta container fleet config-management status --project PROJECT_ID
L'état
SYNCED
confirme l'installation des règles .
Consulter les notifications de non-respect des règles
Une fois les contraintes de règle installées en mode audit, les cas de non-respect du cluster peuvent être visualisés dans l'interface utilisateur à l'aide du tableau de bord Policy Controller.
Vous pouvez également utiliser kubectl
pour afficher les cas de non-respect sur le cluster à l'aide de la commande suivante :
kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
En cas de non-respect des règles, vous pouvez consulter la liste des messages de non-respect par contrainte avec :
kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Modifier l'action d'application du bundle de règles de référence des normes de sécurité des pods
Une fois que vous avez examiné les cas de non-respect des règles sur votre cluster, vous pouvez envisager de modifier le mode d'application afin que le contrôleur d'admission génère un avertissement (warn
) ou bloque (deny
) l'application des ressources non conformes sur le cluster.
kubectl
Utilisez kubectl pour définir la mesure coercitive des règles sur
warn
:kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
Vérifiez que la mesure coercitive des contraintes de règle a été mise à jour :
kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022
kpt
Exécutez la fonction kpt
set-enforcement-action
pour définir la mesure coercitive des règles surwarn
:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Appliquez les contraintes de règles :
kpt live apply
Config Sync
Les opérateurs qui utilisent Config Sync pour déployer des règles sur leurs clusters peuvent suivre ces instructions :
Accédez au répertoire de synchronisation pour Config Sync :
cd SYNC_ROOT_DIR
Exécutez la fonction kpt
set-enforcement-action
pour définir la mesure coercitive des règles surwarn
:kpt fn eval policies/pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Transférez les modifications au dépôt Config Sync :
git add SYNC_ROOT_DIR/policies/pss-baseline-v2022 git commit -m 'Adding Pod Security Standards Baseline policy bundle warn enforcement' git push
Vérifiez l'état de l'installation :
gcloud alpha anthos config sync repo list --project PROJECT_ID
Le dépôt qui s'affiche dans la colonne
SYNCED
confirme l'installation des règles.
Tester l'application des règles
Créez une ressource non conforme sur le cluster à l'aide de la commande suivante :
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: wp-non-compliant
labels:
app: wordpress
spec:
containers:
- image: wordpress
name: wordpress
ports:
- containerPort: 80
hostPort: 80
name: wordpress
EOF
Le contrôleur d'admission doit générer une erreur répertoriant les cas de violation des règles que cette ressource ne respecte pas, comme indiqué dans l'exemple suivant :
Warning: [pss-baseline-v2022-host-ports] The specified hostNetwork and hostPort are not allowed, pod: wp-non-compliant. Allowed values: {"max": 0, "min": 0} pod/wp-non-compliant created
Supprimer le bundle de règles des normes de sécurité des pods
Si nécessaire, le bundle de règles de référence des normes de sécurité des pods peut être supprimé du cluster.
kubectl
Utilisez kubectl pour supprimer les règles :
kubectl delete constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022
kpt
Supprimez les règles :
kpt live destroy
Config Sync
Les opérateurs qui utilisent Config Sync pour déployer des règles sur leurs clusters peuvent suivre ces instructions :
Transférez les modifications au dépôt Config Sync :
git rm -r SYNC_ROOT_DIR/policies/pss-baseline-v2022 git commit -m 'Removing Pod Security Standards Baseline policies' git push
Vérifiez l'état :
gcloud alpha anthos config sync repo list --project PROJECT_ID
Le dépôt qui s'affiche dans la colonne
SYNCED
confirme la suppression des règles.