Installer Policy Controller

Cette page vous explique comment installer Policy Controller. Policy Controller vérifie, audite et applique la conformité de vos clusters aux règles liées à la sécurité, aux réglementations ou aux règles métier.

Policy Controller est disponible si vous utilisez Google Kubernetes Engine (GKE) Enterprise Edition. Pour en savoir plus, consultez les tarifs de l'édition Enterprise Google Kubernetes Engine (GKE).

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  1. Installez et initialisez Google Cloud CLI, qui fournit les commandes gcloud, gsutil, kubectl et nomos utilisées dans les présentes instructions. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande gcloud components update. Si vous utilisez Cloud Shell, Google Cloud CLI est préinstallé.
  2. Assurez-vous que Open Source Open Policy Agent Gatekeeper n'est pas installé sur votre cluster. Si c'est le cas, désinstallez Gatekeeper avant d'installer Policy Controller.
  3. Activez l'API GKE Enterprise

    Activez l'API GKE Enterprise

  4. Activez l'API Policy Controller.

    Activer l'API Policy Controller

  5. Créez un cluster exécutant une version de Kubernetes 1.14.x ou ultérieure, ou assurez-vous d'y avoir accès. Policy Controller peut sembler s'exécuter sur une version de Kubernetes antérieure à 1.14.x, mais le produit ne se comporte pas correctement.

  6. Accorder les rôles IAM requis à l'utilisateur qui enregistre le cluster

  7. Si vous prévoyez d'utiliser Google Cloud CLI pour configurer Policy Controller, enregistrez votre cluster dans un fletet maintenant. Si vous prévoyez d'utiliser Google Cloud Console, enregistrez vos clusters lorsque vous installez Policy Controller.

  8. Si vous utilisez des clusters associés à GKE, assurez-vous que votre cluster AKS ne comporte pas le module complémentaire Azure Policy et évitez d'étiqueter des espaces de noms avec la clé control-plane.

  9. Si vous utilisez Google Distributed Cloud sur VMware ou sur Bare Metal, veillez à installer Policy Controller sur un cluster d'utilisateur. Vous ne pouvez pas installer Policy Controller sur un cluster d'administrateur.

Installer Policy Controller

À partir de la version 1.16.0, si vous utilisez Google Cloud CLI, vous pouvez installer et gérer Policy Controller directement (recommandé) ou via l'objet ConfigManagement.

Console

Pour installer Policy Controller sur la console Google Cloud, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Stratégie de GKE Enterprise sous la section Gestion de la stratégie.

    Accéder à la règle

  2. Sélectionnez Installer Policy Controller.

  3. Dans le volet Installation de Policy Controller, sélectionnez l'une des options d'installation suivantes:

    • Pour installer Policy Controller sur tous les clusters d'un parc:

      1. Laissez l'option Installer dans votre parc sélectionnée.

        Si vous n'avez pas de flotte dans votre projet, vous pouvez en créer une à l'étape suivante.

      2. Si vous ne possédez pas encore de parc, choisissez un nom pour votre parc.

      3. Sélectionnez Activer Policy Controller.

    • Pour installer Policy Controller sur des clusters individuels :

      1. Sélectionnez Installer sur des clusters individuels.

      2. Dans le tableau Clusters disponibles, sélectionnez les clusters sur lesquels vous souhaitez installer Policy Controller.

      3. Sélectionnez Activer Policy Controller.

Vous êtes redirigé vers l'onglet Paramètres de Policy Controller. Lorsque Policy Controller est installé et configuré sur vos clusters, les colonnes d'état affichent Installé . Cette opération peut prendre plusieurs minutes.

gcloud Policy Controller

Activez Policy Controller en exécutant la commande suivante:

gcloud container fleet policycontroller enable \
    --memberships=MEMBERSHIP_NAME

Vous pouvez définir des champs supplémentaires pour configurer Policy Controller. Par exemple, vous pouvez demander à Policy Controller d'exempter certains espaces de noms de l'application forcée. Pour obtenir la liste complète des champs que vous pouvez configurer, consultez la documentation de Google Cloud CLI pour Policy Controller ou exécutez gcloud container fleet policycontroller enable --help.

gcloud ConfigManagement

  1. Préparez la configuration en créant un nouveau fichier manifeste apply-spec.yaml ou en utilisant un fichier manifeste existant. L'utilisation d'un fichier manifeste existant vous permet de configurer votre cluster avec les mêmes paramètres que ceux utilisés par un autre cluster.

    Créer un nouveau fichier manifeste

    Pour configurer Policy Controller avec de nouveaux paramètres pour votre cluster, créez un fichier nommé apply-spec.yaml et copiez-y le fichier YAML suivant :

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      policyController:
        # Set to true to install and enable Policy Controller
        enabled: true
        # Uncomment to prevent the template library from being installed
        # templateLibraryInstalled: false
        # Uncomment to enable support for referential constraints
        # referentialRulesEnabled: true
        # Uncomment to disable audit, adjust value to set audit interval
        # auditIntervalSeconds: 0
        # Uncomment to log all denies and dryrun failures
        # logDeniesEnabled: true
        # Uncomment to enable mutation
        # mutationEnabled: true
        # Uncomment to exempt namespaces
        # exemptableNamespaces: ["namespace-name"]
        # Uncomment to change the monitoring backends
        # monitoring:
        #     backends:
        #     - cloudmonitoring
        #     - prometheus
      # ...other fields...
    

    Vous devez ajouter un champ spec.policyController et définir la valeur de enabled sur true. Vous pouvez choisir d'activer d'autres fonctionnalités de Policy Controller. Toutefois, la prise en charge des contraintes référentielles est désactivée par défaut. Avant de l'activer, veillez à vous familiariser avec les mises en garde concernant la cohérence à terme.

    Utiliser un fichier manifeste existant

    Pour configurer votre cluster avec les mêmes paramètres que ceux utilisés par un autre cluster, récupérez les paramètres d'un cluster enregistré :

    gcloud alpha container fleet config-management fetch-for-apply \
         --membership=MEMBERSHIP_NAME \
         --project=PROJECT_ID \
         > CONFIG_YAML_PATH
    

    Remplacez les éléments suivants :

    • MEMBERSHIP_NAME : nom de l'appartenance du cluster enregistré contenant les paramètres Policy Controller que vous souhaitez utiliser.
    • PROJECT_ID : ID de votre projet.
    • CONFIG_YAML_PATH : chemin d'accès au fichier apply-spec.yaml.
  2. Appliquez le fichier apply-spec.yaml :

    gcloud beta container fleet config-management apply \
        --membership=MEMBERSHIP_NAME \
        --config=CONFIG_YAML \
        --project=PROJECT_ID
    

    Remplacez les éléments suivants :

    • MEMBERSHIP_NAME : nom de l'appartenance du cluster enregistré contenant les paramètres Policy Controller que vous souhaitez utiliser.
    • CONFIG_YAML : ajoutez le chemin d'accès à votre fichier apply-spec.yaml.
    • PROJECT_ID : ajoutez l'ID de votre projet.

Le pod est créé, et Policy Controller commence à vérifier et à appliquer les contraintes.

Vérifier l'installation de Policy Controller

Après avoir installé Policy Controller, vous pouvez vérifier qu'il s'est exécuté avec succès.

Console

Procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Stratégie de GKE Enterprise sous la section Gestion de la stratégie.

    Accéder à la règle

  2. Sous l'onglet Paramètres, dans la table du cluster, consultez la colonne État du Policy Controller. Une installation réussie présente l'état Installé.

gcloud Policy Controller

Exécutez la commande ci-dessous.

gcloud container fleet policycontroller describe --memberships=MEMBERSHIP_NAME

Une installation réussie affiche membershipStates: MEMBERSHIP_NAME: policycontroller: state: ACTIVE.

gcloud ConfigManagement

Exécutez la commande ci-dessous.

gcloud beta container fleet config-management status \
    --project=PROJECT_ID

Remplacez PROJECT_ID par l'ID de votre projet.

Un résultat semblable aux lignes suivantes doit s'afficher :

Name          Status  Last_Synced_Token  Sync_Branch  Last_Synced_Time      Policy_Controller
CLUSTER_NAME  SYNCED  a687c2c            1.0.0        2021-02-17T00:15:55Z  INSTALLED

Une installation réussie affiche l'état INSTALLED dans la colonne Policy Controller.

Vérifier l'installation de la bibliothèque de modèles de contraintes

Lorsque vous installez Policy Controller, la bibliothèque de modèles de contraintes est installée par défaut. Cette installation peut prendre plusieurs minutes. Vous pouvez vérifier que la bibliothèque de modèles a bien été exécutée.

Console

Procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Stratégie de GKE Enterprise sous la section Gestion de la stratégie.

    Accéder à la règle

  2. Sous l'onglet Paramètres, dans la table du cluster, sélectionnez le nombre répertorié dans la colonne Groupes installés. Dans le volet État du contenu de la règle, une installation réussie de la bibliothèque de modèles affiche l'état Installée .

gcloud

Exécutez la commande ci-dessous.

kubectl get constrainttemplates

Un résultat semblable aux lignes suivantes doit s'afficher :

NAME                                      AGE
k8sallowedrepos                           84s
k8scontainerlimits                        84s
k8spspallowprivilegeescalationcontainer   84s
...[OUTPUT TRUNCATED]...

Lorsqu'un modèle de contrainte individuelle est installé correctement, son champ status.created est true.

Configurer les valeurs par défaut au niveau du parc

Si vous avez activé l'édition Enterprise Google Kubernetes Engine (GKE), vous pouvez activer et configurer Policy Controller en tant que valeur par défaut au niveau du parc pour vos clusters. Cela signifie que Policy Controller est activé sur le cluster avec les paramètres que vous spécifiez pour chaque nouveau cluster GKE sur Google Cloud enregistré lors de la création du cluster. Pour en savoir plus sur la configuration par défaut du parc, consultez la page Gérer les fonctionnalités au niveau du parc.

Pour configurer les valeurs par défaut au niveau du parc pour Policy Controller, procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à la page Gestionnaire de fonctionnalités.

    Accéder au gestionnaire de fonctionnalités

  2. Dans le volet Stratégie, cliquez sur Configurer.

  3. Vérifiez vos paramètres au niveau du parc. Tous les nouveaux clusters que vous enregistrerez dans le parc hériteront de ces paramètres.

  4. Facultatif : Pour modifier les paramètres par défaut, cliquez sur Personnaliser les paramètres du parc. Dans la boîte de dialogue qui apparaît, procédez comme suit :

    1. Dans la section Ajouter/Modifier des groupes de règles, incluez ou excluez un groupe de règles en cliquant sur le bouton d'activation correspondant.
    2. Dans la section Modifier la configuration de Policy Controller, procédez comme suit :
      1. Pour activer le webhook de mutation, cochez la case Activer le webhook de mutation. Cette fonctionnalité n'est pas compatible avec les clusters Autopilot.
      2. Dans la zone Intervalle d'audit, saisissez la durée en secondes entre deux audits consécutifs.
      3. Dans le champ Espaces de noms pouvant être exclus, saisissez une liste d'espaces de noms. Policy Controller ignore les objets de ces espaces de noms.
      4. Pour activer les contraintes référentielles, cochez la case Activer les modèles de contraintes faisant référence à des objets autres que celui en cours d'évaluation.
      5. Dans la liste Version, sélectionnez la version de Policy Controller que vous souhaitez utiliser.
    3. Cliquez sur Enregistrer les modifications.
  5. Cliquez sur Configurer.

  6. Dans la boîte de dialogue de confirmation, cliquez sur Confirmer. Si vous n'avez pas encore activé Policy Controller, cliquez sur Confirmer pour activer l'API anthospolicycontroller.googleapis.com.

  7. Facultatif : Synchronisez les clusters existants avec les paramètres par défaut :

    1. Dans la liste Clusters du parc, sélectionnez les clusters que vous souhaitez synchroniser.
    2. Cliquez sur Synchroniser avec les paramètres du parc, puis sur Confirmer dans la boîte de dialogue de confirmation qui s'affiche. Cette opération peut durer quelques minutes.

gcloud

  1. Créez un fichier nommé fleet-default.yaml contenant les configurations par défaut de Policy Controller. Le champ installSpec est obligatoire pour activer les valeurs par défaut au niveau du parc. Cet exemple montre les options que vous pouvez configurer:

    # cat fleet-default.yaml
    
     policyControllerHubConfig:
      installSpec: INSTALL_SPEC_ENABLED 
      # Uncomment to set default deployment-level configurations.
      # deploymentConfigs:
      #   admission:
      #     containerResources:
      #       limits:
      #        cpu: 1000m
      #         memory: 8Gi
      #       requests:
      #         cpu: 500m
      #         memory: 4Gi
      # Uncomment to set policy bundles that you want to install by default.
      # policyContent:
      #   bundles:
      #     cis-k8s-v1.5.1:
      #       exemptedNamespaces:
      #       - "namespace-name"
      # Uncomment to exempt namespaces from admission.
      # exemptableNamespaces:
      # - "namespace-name"
      # Uncomment to enable support for referential constraints
      # referentialRulesEnabled: true
      # Uncomment to disable audit, adjust value to set audit interval
      # auditIntervalSeconds: 0
      # Uncomment to log all denies and dryrun failures
      # logDeniesEnabled: true
      # Uncomment to enable mutation
      # mutationEnabled: true
      # Uncomment to adjust the value to set the constraint violation limit
      # constraintViolationLimit: 20
      # ... other fields ...
    
  2. Appliquez la configuration par défaut à votre flotte :

    gcloud container fleet policycontroller enable \
      --fleet-default-member-config=fleet-default.yaml
    
  3. Pour vérifier que la configuration a bien été appliquée, exécutez la commande suivante :

    gcloud container fleet policycontroller describe
    
  4. Pour supprimer la configuration par défaut au niveau du parc, exécutez la commande suivante :

    gcloud container fleet policycontroller enable \
      --no-fleet-default-member-config
    

Interactions de Policy Controller avec Config Sync

Si vous utilisez Policy Controller avec Config Sync, vous devez connaître les interactions suivantes avec les ressources stockées dans votre source de référence, comme un dépôt Git, qui sont synchronisées par Config Sync :

  • Vous ne pouvez pas synchroniser un modèle de contrainte qui fait également partie de la bibliothèque de modèles, sauf si la bibliothèque de modèles de contraintes est désactivée.

  • Si vous souhaitez synchroniser la ressource Config stockée dans l'espace de noms gatekeeper-system, vous ne devez définir que la ressource Config dans la source de vérité. Le paramètre gatekeeper-system Namespace ne doit pas être défini avec elle.

Gérer la bibliothèque de modèles de contraintes

Pour en savoir plus sur la désinstallation ou l'installation des modèles de contraintes, les contraintes associées ou la bibliothèque de modèles de contraintes, consultez la page Créer des contraintes.

Exempter des espaces de noms de l'application forcée

Vous pouvez configurer Policy Controller pour ignorer des objets dans un espace de noms. Pour en savoir plus, consultez la page Exclure des espaces de noms de Policy Controller.

Muter des ressources

Policy Controller agit également comme un webhook de mutation. Pour en savoir plus, consultez la section Muter des ressources.

Afficher la version de Policy Controller

Pour connaître la version de Gatekeeper que Policy Controller utilise, affichez le tag d'image en exécutant la commande suivante :

kubectl get deployments -n gatekeeper-system gatekeeper-controller-manager \
  -o="jsonpath={.spec.template.spec.containers[0].image}"

Le tag Git (ou le hachage) utilisé pour créer Gatekeeper et le numéro de version ConfigManagement Operator sont inclus dans le tag d'image comme suit:

.../gatekeeper:VERSION_NUMBER-GIT_TAG.gBUILD_NUMBER

Par exemple, pour l'image suivante :

gcr.io/config-management-release/gatekeeper:anthos1.3.2-480baac.g0
  • anthos1.3.2 est le numéro de version.
  • 480baac est le tag Git.
  • 0 est le numéro de build.

Mettre à niveau Policy Controller

Avant de mettre à niveau Policy Controller, consultez les notes de version pour en savoir plus sur les changements entre les versions.

Pour mettre à niveau Policy Controller, procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à la page Stratégie de GKE Enterprise sous la section Gestion de la stratégie.

    Accéder à la règle

  2. Dans l'onglet Paramètres, à côté du cluster dont vous souhaitez mettre à niveau la version, sélectionnez Modifier la configuration.
  3. Développez le menu Modifier la configuration Policy Controller.
  4. Dans la liste déroulante Version, sélectionnez la version vers laquelle vous souhaitez effectuer la mise à niveau.
  5. Cliquez sur Enregistrer les modifications.

gcloud

Exécutez la commande suivante :

gcloud container fleet policycontroller update \
  --version=VERSION \
  --membership=MEMBERSHIP_NAME

Remplacez les éléments suivants :

  • VERSION : version vers laquelle vous souhaitez effectuer la mise à jour.
  • MEMBERSHIP_NAME : nom d'appartenance que vous avez choisi lors de l'enregistrement de votre cluster. Vous pouvez trouver le nom d'appartenance en exécutant la commande gcloud container fleet memberships list.

Désinstaller Policy Controller

Suivez ces étapes pour désinstaller Policy Controller de vos clusters.

Console

Pour désactiver Policy Controller sur vos clusters, effectuez les tâches suivantes :

  1. Dans la console Google Cloud, accédez à la page Stratégie de GKE Enterprise sous la section Gestion de la stratégie.

    Accéder à la règle

  2. Sous l'onglet Paramètres, dans la table du cluster, sélectionnez Modifier dans la colonne Modifier la configuration.
  3. Dans le volet du cluster, faites défiler la page vers le bas et développez le menu À propos de Policy Controller.
  4. Sélectionnez Désinstaller Policy Controller.
  5. Confirmez la désinstallation en suivant les instructions de la boîte de dialogue de confirmation et en sélectionnant Confirmer.

Lorsque Policy Controller est désinstallé, les colonnes d'état affichent Non installé .

gcloud Policy Controller

Pour désinstaller Policy Controller, exécutez la commande suivante :

gcloud container fleet policycontroller disable \
  --memberships=MEMBERSHIP_NAME

Remplacez MEMBERSHIP_NAME par le nom d'appartenance du cluster enregistré sur lequel désactiver Policy Controller. Vous pouvez spécifier plusieurs appartenances séparées par une virgule.

gcloud ConfigManagement

Pour désinstaller Policy Controller :

  1. Modifiez la configuration de ConfigManagement Operator dans votre fichier apply-spec.yaml et définissez policyController.enabled sur false.

  2. Appliquez les modifications dans le fichier apply-spec.yaml :

     gcloud beta container fleet config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    Remplacez les éléments suivants :

    • CLUSTER_NAME : ajoutez le cluster enregistré auquel vous souhaitez appliquer cette configuration.
    • CONFIG_YAML : ajoutez le chemin d'accès à votre fichier apply-spec.yaml.
    • PROJECT_ID : ajoutez l'ID de votre projet.

Supprimer ConfigManagement Operator

Si vous avez installé Policy Controller via l'objet ConfigManagement, vous devez également supprimer ConfigManagement Operator de vos clusters.

Pour supprimer ConfigManagement Operator, exécutez les commandes suivantes :

  1. Supprimez l'objet ConfigManagement du cluster :

    kubectl delete configmanagement --all
    

    Une fois cette commande exécutée, voici ce qui se produit :

    • Tous les objets ClusterRole et ClusterRoleBinding créés dans le cluster par ConfigManagement Operator sont supprimés du cluster.
    • Toutes les configurations de contrôleurs d'admission installées par ConfigManagement Operator sont supprimées.
    • Le contenu de l'espace de noms config-management-system est supprimé, à l'exception du secret git-creds, et pour les versions de Policy Controller à partir de la version 1.9.0, le déploiement config-management-operator et le pod config-management-operator. ConfigManagement Operator ne peut pas fonctionner sans l'espace de noms config-management-system. Tous les objets CustomResourceDefinition (CRD) créés ou modifiés par le contrôleur ConfigManagement Operator sont supprimés des clusters où ils ont été créés ou modifiés. Le CRD requis pour exécuter ConfigManagement Operator est toujours présent car, du point de vue de Kubernetes, il a été ajouté par l'utilisateur qui a installé ConfigManagement Operator. La procédure de suppression de ces composants est présentée à l'étape suivante.
  2. Si vous devez conserver le secret git-creds, procédez comme suit dès à présent :

    kubectl -n config-management-system get secret git-creds -o yaml
    
  3. Supprimez l'espace de noms config-management-system :

    kubectl delete ns config-management-system
    
  4. Supprimez l'espace de noms config-management-monitoring :

    kubectl delete ns config-management-monitoring
    
  5. Supprimez l'objet CustomResourceDefinition ConfigManagement :

    kubectl delete crd configmanagements.configmanagement.gke.io
    

RBAC Policy Controller et autorisations

Policy Controller comprend des charges de travail à privilèges élevés. Les autorisations associées à ces charges de travail sont décrites dans la documentation des opérations Open Policy Agent Gatekeeper.

Demandes de ressources Policy Controller

Le tableau suivant répertorie les besoins en ressources Kubernetes pour chaque version compatible de Policy Controller. Les demandes de ressources pour ConfigManagement Operator ne s'appliquent que si vous avez installé Policy Controller via l'objet ConfigManagement.

Composant Processeur Mémoire
ConfigManagement Operator 100 m 100 Mi
Policy Controller 100 m 256 Mi

Étapes suivantes