Utilisez les contraintes de stratégie CIS du benchmark Google Kubernetes Engine v1.4.0
Policy Controller est fourni avec une bibliothèque par défaut de modèles de contraintes qui peuvent être utilisés avec le groupe de règles GKE v1.4.0 Center for Internet Security (CIS) pour vous aider à auditer la conformité de votre cluster GKE sur Google Cloud par rapport aux benchmarks CIS Google Kubernetes Engine (GKE) v1.4.0. Ce benchmark est un ensemble de contrôles de sécurité recommandés pour la configuration de GKE.
Cet ensemble de contraintes inclut des commandes dans les domaines suivants:
- RBAC et comptes de service
- Règles de sécurité relatives aux pods
- Règles de réseau et CNI
- Gestion des secrets
- Contrôle d'admission extensible
- Règles générales
- Services gérés
Contraintes de groupe de règles CIS GKE v1.4.0
Nom de la contrainte | Description de la contrainte | ID de commande |
---|---|---|
cis-gke-v1.4.0-restrict-apparmor | Limite le profil AppArmor pour les pods.
|
4.6.3 |
cis-gke-v1.4.0-restrict-creation-with-default-serviceaccount | Limitez la création de ressources à l'aide d'un ServiceAccount par défaut.
|
4.1.5 |
cis-gke-v1.4.0-restrict-loadbalancer | Interdit tous les services de type LoadBalancer .
|
5.6.8 |
cis-gke-v1.4.0-restrict-secrets-of-type-basic-auth | Limite l'utilisation des secrets de type "basic-auth". | 4.4.2 |
cis-gke-v1.4.0-require-binauthz | Nécessite le Binary Authorization Validating Admission Webhook. | 4.5.1, 5.1.1, 5.1.4, 5.10.5 |
cis-gke-v1.4.0-require-cos-node-image | Nécessite Container-Optimized OS comme image d'OS du nœud. | 5.5.1 |
cis-gke-v1.4.0-require-gke-metadata-server-enabled | Nécessite que le service de métadonnées GKE soit activé sur chaque nœud du cluster. | 5.4.2 |
cis-gke-v1.4.0-require-ingress.class-gce | Tous les objets Ingress doivent comporter une annotation kubernetes.io/ingress.class: gce .
|
5.6.8 |
cis-gke-v1.4.0-require-managed-certificates | Tous les objets Ingress doivent comporter une annotation networking.gke.io/managed-certificates .
|
5.6.8 |
cis-gke-v1.4.0-require-namespace-networkpolicy | Chaque Namespace défini dans le cluster doit disposer d'un NetworkPolicy .
|
4.3.2 |
cis-gke-v1.4.0-require-seccomp-default | Tous les objets Ingress doivent comporter une annotation networking.gke.io/managed-certificates .
|
4.6.2 |
cis-gke-v1.4.0-require-securitycontext | Nécessite que les pods définissent securityContext .
|
4.6.3 |
cis-gke-v1.4.0-restrict-capabilities | Les conteneurs doivent supprimer toutes les fonctionnalités, et ne sont pas autorisés à en ajouter de nouveau. | 4.2.7, 4.2.8, 4.6.3, 5.10.3 |
cis-gke-v1.4.0-restrict-cluster-admin-role | Limite l'utilisation du rôle cluster-admin .
|
4.1.1 |
cis-gke-v1.4.0-restrict-default-namespace | Empêche les pods d'utiliser la valeur par défaut Namespace .
|
4.6.1, 4.6.4 |
cis-gke-v1.4.0-restrict-env-var-secrets | Limite l'utilisation des secrets en tant que variables d'environnement dans les définitions de conteneur. | 4.4.1 |
cis-gke-v1.4.0-restrict-host-namespace | Limite les conteneurs pour lesquels hostPID ou hostIPC est défini sur "true".
|
4.2.2, 4.2.3, 5.10.3 |
cis-gke-v1.4.0-restrict-hostnetwork | Empêche l'exécution des conteneurs lorsque l'option hostNetwork est définie sur true .
|
4.2.4 et 5.10.3 |
cis-gke-v1.4.0-restrict-pods-create | Limite la création de pods dans Roles et ClusterRoles .
|
4.1.4 |
cis-gke-v1.4.0-restrict-privilege-escalation | Limite les conteneurs avec allowPrivilegeEscalation défini sur "true".
|
4.2.5, 5.10.3 |
cis-gke-v1.4.0-restrict-privileged-containers | Limite les conteneurs avec securityContext.privileged défini sur "true".
|
4.2.1, 5.10.3 |
cis-gke-v1.4.0-restrict-rbac-subjects | Limite l'utilisation des noms dans les sujets RBAC aux valeurs autorisées. | 5.8.3 |
cis-gke-v1.4.0-restrict-role-wildcards | Limite l'utilisation des caractères génériques dans Roles et ClusterRoles .
|
4.1.3 |
cis-gke-v1.4.0-restrict-root-containers | Empêche l'exécution des conteneurs en tant qu'utilisateur racine. | 4.2.6, 5.10.3 |
cis-gke-v1.4.0-restrict-role-secrets | Limite l'utilisation des secrets dans Roles et ClusterRoles .
|
4.1.2 |
cis-gke-v1.4.0-restrict-automountserviceaccounttoken | Limite l'utilisation des jetons de compte de service pour les pods. | 4.1.5, 4.1.6 |
cis-gke-v1.4.0-restrict-selinux | Impossible de définir le type SELinux ou de définir une option d'utilisateur ou de rôle SELinux personnalisée. | 4.6.3 |
Avant de commencer
- Installez et initialisez la 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 sur votre cluster avec la bibliothèque par défaut de modèles de contraintes. Vous devez également activer la prise en charge des contraintes référentielles, car ce groupe contient des contraintes référentielles.
Configurer Policy Controller pour les contraintes référentielles
Enregistrez le fichier manifeste YAML suivant dans un fichier sous le nom
policycontroller-config.yaml
. Le fichier manifeste configure Policy Controller pour surveiller des types d'objets spécifiques.apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "admissionregistration.k8s.io" version: "v1" kind: "ValidatingWebhookConfiguration" - group: "networking.k8s.io" version: "v1" kind: "NetworkPolicy"
Appliquez le fichier manifeste
policycontroller-config.yaml
:kubectl apply -f policycontroller-config.yaml
Configurer votre cluster et votre charge de travail
- L'activation et la configuration de Google Groupes pour RBAC sont requises dans
cis-gke-v1.4.0-restrict-rbac-subjects
. - L'activation et la configuration de l'autorisation binaire sont requises dans
cis-gke-v1.4.0-require-binauthz
.
Auditer les règles CIS GKE v1.4.0 avec Policy Controller
Policy Controller vous permet d'appliquer des règles à votre cluster Kubernetes. Pour vous aider à tester vos charges de travail et leur conformité par rapport aux règles CIS de GKE v1.4.0 décrites dans le tableau précédent, vous pouvez déployer ces contraintes en mode "audit" afin d'identifier et de résoudre les cas de non-respect.
Vous pouvez appliquer ces règles avec spec.enforcementAction
défini sur dryrun
à l'aide de kubectl, kpt ou Config Sync.
kubectl
(Facultatif) Prévisualisez les contraintes de la règle avec kubectl:
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.4.0
Appliquez les contraintes de la règle avec kubectl:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.4.0
Le résultat est le suivant :
k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-creation-with-default-serviceaccount created k8sblockloadbalancer.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-loadbalancer created k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-secrets-of-type-basic-auth created k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-env-var-secrets created k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-privilege-escalation created k8spspallowedusers.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-root-containers created k8spspapparmor.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-apparmor created k8spspcapabilities.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-capabilities created k8spsphostnamespace.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-host-namespace created k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-hostnetwork created k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-privileged-containers created k8spspselinuxv2.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-selinux created k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-seccomp-default created k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-securitycontext created k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-role-wildcards created k8srequirebinauthz.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-binauthz created k8srequirecosnodeimage.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-cos-node-image created k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-namespace-networkpolicy created k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-ingress.class-gce created k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-managed-certificates created k8srequiredlabels.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-gke-metadata-server-enabled created k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-automountserviceaccounttoken created k8srestrictnamespaces.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-default-namespace created k8srestrictrbacsubjects.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-rbac-subjects created k8srestrictrolebindings.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-cluster-admin-role created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-pods-create created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-role-secrets 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 constraints -l policycontroller.gke.io/bundleName=cis-gke-v1.4.0
Le résultat ressemble à ce qui suit :
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-creation-with-default-serviceaccount dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockloadbalancer.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-loadbalancer dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-secrets-of-type-basic-auth dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-env-var-secrets dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-securitycontext dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-role-wildcards dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspallowedusers.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-root-containers dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-privilege-escalation dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspapparmor.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-apparmor dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspcapabilities.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-capabilities dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnamespace.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-host-namespace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-hostnetwork dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-privileged-containers dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-seccomp-default dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspselinuxv2.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-selinux dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirebinauthz.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-binauthz dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirecosnodeimage.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-cos-node-image dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-ingress.class-gce dryrun 0 k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-managed-certificates dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-gke-metadata-server-enabled dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-namespace-networkpolicy dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-automountserviceaccounttoken dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictnamespaces.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-default-namespace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrbacsubjects.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-rbac-subjects dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolebindings.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-cluster-admin-role dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-pods-create dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-role-secrets dryrun 0
kpt
Installez et configurez kpt. kpt est utilisé dans ces instructions pour personnaliser et déployer les ressources Kubernetes.
Téléchargez le groupe de règles CIS à partir de GitHub à l'aide de Kpt :
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.4.0
Exécutez la fonction kpt
set-enforcement-action
pour définir l'action d'application des règles surdryrun
:kpt fn eval cis-gke-v1.4.0 -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 cis-gke-v1.4.0 kpt live init
Appliquez les contraintes de règles avec kpt :
kpt live apply
Le résultat est le suivant :
k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-creation-with-default-serviceaccount created k8sblockloadbalancer.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-loadbalancer created k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-secrets-of-type-basic-auth created k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-env-var-secrets created k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-privilege-escalation created k8spspallowedusers.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-root-containers created k8spspapparmor.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-apparmor created k8spspcapabilities.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-capabilities created k8spsphostnamespace.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-host-namespace created k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-hostnetwork created k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-privileged-containers created k8spspselinuxv2.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-selinux created k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-seccomp-default created k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-securitycontext created k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-role-wildcards created k8srequirebinauthz.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-binauthz created k8srequirecosnodeimage.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-cos-node-image created k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-namespace-networkpolicy created k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-ingress.class-gce created k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-managed-certificates created k8srequiredlabels.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-gke-metadata-server-enabled created k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-automountserviceaccounttoken created k8srestrictnamespaces.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-default-namespace created k8srestrictrbacsubjects.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-rbac-subjects created k8srestrictrolebindings.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-cluster-admin-role created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-pods-create created k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-role-secrets created 27 resource(s) applied. 27 created, 0 unchanged, 0 configured, 0 failed
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 CIS GKE v1.4.0 depuis GitHub à l'aide de kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cis-gke-v1.4.0 policies/cis-gke-v1.4.0
Exécutez la fonction kpt
set-enforcement-action
pour définir l'action d'application des règles surdryrun
:kpt fn eval policies/cis-gke-v1.4.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(Facultatif) Prévisualisez les contraintes de règle à créer:
kpt live init policies/cis-gke-v1.4.0 kpt live apply --dry-run policies/cis-gke-v1.4.0
Le résultat est le suivant :
Dry-run strategy: client inventory update started inventory update finished apply phase started k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-creation-with-default-serviceaccount successful k8sblockloadbalancer.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-loadbalancer successful k8sblockobjectsoftype.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-secrets-of-type-basic-auth successful k8snoenvvarsecrets.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-env-var-secrets successful k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-privilege-escalation successful k8spspallowedusers.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-root-containers successful k8spspapparmor.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-apparmor successful k8spspcapabilities.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-capabilities successful k8spsphostnamespace.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-host-namespace successful k8spsphostnetworkingports.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-hostnetwork successful k8spspprivilegedcontainer.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-privileged-containers successful k8spspselinuxv2.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-selinux successful k8spspseccomp.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-seccomp-default successful k8spodsrequiresecuritycontext.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-securitycontext successful k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-role-wildcards successful k8srequirebinauthz.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-binauthz successful k8srequirecosnodeimage.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-cos-node-image successful k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-namespace-networkpolicy successful k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-ingress.class-gce successful k8srequiredannotations.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-managed-certificates successful k8srequiredlabels.constraints.gatekeeper.sh/cis-gke-v1.4.0-require-gke-metadata-server-enabled successful k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-automountserviceaccounttoken successful k8srestrictnamespaces.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-default-namespace successful k8srestrictrbacsubjects.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-rbac-subjects successful k8srestrictrolebindings.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-cluster-admin-role successful k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-pods-create successful k8srestrictrolerules.constraints.gatekeeper.sh/cis-gke-v1.4.0-restrict-role-secrets successful apply phase finished inventory update started inventory update finished apply result: 27 attempted, 27 successful, 0 skipped, 0 failed
Si votre répertoire de synchronisation pour Config Sync utilise Kustomize, ajoutez
policies/cis-gke-v1.4.0
à votrekustomization.yaml
racine. Sinon, supprimez le fichierpolicies/cis-gke-v1.4.0/kustomization.yaml
:rm SYNC_ROOT_DIR/policies/cis-gke-v1.4.0/kustomization.yaml
Déployez les modifications dans le dépôt Config Sync:
git add SYNC_ROOT_DIR/policies/cis-gke-v1.4.0 git commit -m 'Adding CIS GKE v1.4.0 policy bundle' 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, vous pouvez afficher les cas de non-respect des règles du cluster dans l'interface utilisateur à l'aide du tableau de bord Policy Controller.
Vous pouvez également utiliser kubectl
pour afficher les cas de non-respect des règles sur le cluster à l'aide de la commande suivante:
kubectl get constraint -l policycontroller.gke.io/bundleName=cis-gke-v1.4.0 -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-conformité par contrainte à l'aide de la commande suivante:
kubectl get constraint -l policycontroller.gke.io/bundleName=cis-gke-v1.4.0 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Modification de l'action d'application du groupe de règles CIS GKE v1.4.0
Une fois que vous avez examiné les cas de non-respect des règles sur votre cluster, vous pouvez modifier le mode d'application afin que le contrôleur d'admission warn
(ou même deny
) bloque l'application des ressources non conformes au cluster.
kubectl
Utilisez kubectl pour définir l'action coercitive des règles sur
warn
:kubectl get constraint -l policycontroller.gke.io/bundleName=cis-gke-v1.4.0 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
Vérifiez que l'action coercitive des contraintes de la règle a été mise à jour:
kubectl get constraints -l policycontroller.gke.io/bundleName=cis-gke-v1.4.0
kpt
Exécutez la fonction kpt
set-enforcement-action
pour définir l'action d'application 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 l'action d'application des règles surwarn
:kpt fn eval policies/cis-gke-v1.4.0 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Déployez les modifications dans le dépôt Config Sync:
git add SYNC_ROOT_DIR/policies/cis-gke-v1.4.0 git commit -m 'Adding CIS GKE v1.4.0 policy bundle warn enforcement' git push
Vérifiez l'état de l'installation :
gcloud alpha anthos config sync repo list --project PROJECT_ID
Votre dépôt qui apparaît 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
name: wordpress
EOF
Le contrôleur d'admission doit générer un avertissement indiquant les cas de non-respect des règles que cette ressource ne respecte pas, comme illustré dans l'exemple suivant:
Warning: [cis-gke-v1.4.0-restrict-default-namespace] <default> namespace is restricted Warning: [cis-gke-v1.4.0-restrict-root-containers] Container wordpress is attempting to run without a required securityContext/runAsNonRoot or securityContext/runAsUser != 0 Warning: [cis-gke-v1.4.0-restrict-privilege-escalation] Privilege escalation container is not allowed: wordpress Warning: [cis-gke-v1.4.0-require-seccomp-default] Seccomp profile 'not configured' is not allowed for container 'wordpress'. Found at: no explicit profile found. Allowed profiles: {"RuntimeDefault", "docker/default", "runtime/default"} Warning: [cis-gke-v1.4.0-restrict-capabilities] container <wordpress> is not dropping all required capabilities. Container must drop all of ["ALL"] or "ALL" Warning: [cis-gke-v1.4.0-require-securitycontext] securityContext must be defined for all Pod containers pod/wp-non-compliant created
Supprimer le groupe de règles CIS GKE v1.4.0
Si nécessaire, le groupe de règles CIS GKE v1.4.0 peut être supprimé du cluster.
kubectl
Utilisez kubectl pour supprimer les règles:
kubectl delete constraint -l policycontroller.gke.io/bundleName=cis-gke-v1.4.0
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 :
Déployez les modifications dans le dépôt Config Sync:
git rm -r SYNC_ROOT_DIR/policies/cis-gke-v1.4.0 git commit -m 'Removing CIS GKE v1.4.0 policy bundle' git push
Vérifiez l'état:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Votre dépôt qui s'affiche dans la colonne
SYNCED
confirme la suppression des règles.