Contrôler l'admission des charges de travail privilégiées en mode Autopilot

Vous pouvez exécuter des charges de travail privilégiées en mode Google Kubernetes Engine (GKE) Autopilot en installant des listes d'autorisation pour ces charges de travail dans vos clusters. Ce document explique comment effectuer les tâches suivantes :

  • Configurer GKE pour n'exécuter que des charges de travail privilégiées spécifiques en mode Autopilot.
  • Installer des listes d'autorisation pour les charges de travail privilégiées.

Ce document est destiné aux types de rôles suivants :

  • Ingénieurs en sécurité qui souhaitent s'assurer que les charges de travail tierces nécessitent une liste d'autorisation pour s'exécuter sur vos clusters et proviennent de sources approuvées par GKE.
  • Ingénieurs de plate-forme qui souhaitent activer les charges de travail tierces sur les clusters pour débloquer les équipes d'application.

Vous devez déjà connaître les concepts suivants :

À propos des charges de travail privilégiées dans Autopilot

Le mode Autopilot applique un ensemble de contraintes par défaut aux charges de travail afin d'améliorer votre niveau de sécurité. Vous pouvez modifier ces contraintes pour exécuter des charges de travail privilégiées spécifiques en installant des listes d'autorisation correspondant à ces charges de travail. Par défaut, Autopilot vous permet d'installer des listes d'autorisation provenant de partenaires Autopilot et de projets Open Source spécifiques. Les clients GKE éligibles peuvent également créer des listes d'autorisation pour les charges de travail privilégiées qu'ils possèdent et qu'ils importent dans des buckets Cloud Storage.

Chaque liste d'autorisation est un fichier qui correspond à une charge de travail privilégiée spécifique. Pour exécuter une charge de travail privilégiée, procédez comme suit :

  1. Configurez le cluster pour autoriser l'installation de listes d'autorisation à partir de chemins d'accès spécifiques. Par défaut, toutes les listes d'autorisation des partenaires Autopilot et des projets Open Source approuvés sont compatibles.
  2. Créez un AllowlistSynchronizer dans le cluster qui installe la liste d'autorisation et la maintient à jour.

Bugs et demandes de fonctionnalités pour les charges de travail privilégiées et les listes d'autorisation

Le propriétaire d'une charge de travail privilégiée est responsable de la création, du développement et de la maintenance de ses charges de travail et de ses listes d'autorisation. Si vous rencontrez un bug ou si vous avez une demande de fonctionnalité pour une charge de travail privilégiée ou une liste d'autorisation, contactez le propriétaire correspondant.

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  • Activez l'API Google Kubernetes Engine.
  • Activer l'API Google Kubernetes Engine
  • Pour utiliser la Google Cloud CLI pour cette tâche, installez-la, puis initialisez-la. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la gcloud components update commande. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.

Conditions requises

  • La ressource personnalisée AllowlistSynchronizer nécessite GKE version 1.32.2-gke.1652000 ou ultérieure.
  • Vous devez savoir quelle charge de travail privilégiée vous souhaitez exécuter dans votre cluster.
  • Pour modifier la configuration du chemin d'accès à la liste d'autorisation d'un cluster, votre cluster doit exécuter GKE version 1.35 ou ultérieure.

Configurer les chemins d'accès à la liste d'autorisation pour un cluster

Cette section explique comment configurer un cluster pour qu'il soit compatible avec l'installation de listes d'autorisation à partir d'un ensemble de chemins d'accès approuvés. Par défaut, Autopilot est compatible avec l'installation de listes d'autorisation provenant de partenaires GKE et de projets Open Source approuvés. Vous pouvez modifier cette configuration par défaut pour des clusters individuels. Vous pouvez également spécifier des sources de listes d'autorisation approuvées pour l'ensemble d'une organisation, d'un dossier, ou d'un projet en utilisant une règle d'administration.

  1. Identifiez les chemins d'accès aux fichiers de liste d'autorisation à ajouter au cluster. Vous pouvez spécifier plusieurs chemins d'accès lorsque vous créez ou mettez à jour votre cluster. Vous pouvez également désactiver l'installation de listes d'autorisation à partir de n'importe quelle source en spécifiant une chaîne vide au lieu d'un chemin d'accès. Pour en savoir plus sur les chemins d'accès que vous pouvez spécifier, consultez la section Chemins d'accès à la liste d'autorisation.

  2. Pour contrôler les sources de listes d'autorisation approuvées pour un cluster, utilisez l'option --autopilot-privileged-admission lorsque vous créez ou mettez à jour un cluster Autopilot ou Standard, comme dans la commande suivante :

    gcloud container clusters create-auto CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...
    

    Remplacez les éléments suivants :

    • CLUSTER_NAME : nom de votre nouveau cluster.
    • LOCATION: emplacement du plan de contrôle du cluster, tel que us-central1.
    • ALLOWLIST1_PATH,ALLOWLIST2_PATH,...: liste de chemins d'accès aux fichiers ou répertoires de listes d'autorisation, séparés par une virgule. Par exemple, gke://*,gs://my-agent/privileged-logging-agent.yaml. Vous pouvez également désactiver l'installation de listes d'autorisation à partir de n'importe quelle source en spécifiant une chaîne vide ("").

Si vous mettez à jour un cluster existant sans spécifier l'option --autopilot-privileged-admission, la configuration de chemin d'accès existante pour ce cluster ne change pas. Vous n'avez pas besoin de spécifier cette option chaque fois que vous mettez à jour un cluster.

Une fois l'opération de création ou de mise à jour du cluster terminée, vous pouvez installer des listes d'autorisation à partir des chemins d'accès spécifiés en créant des AllowlistSynchronizers.

Créer un AllowlistSynchronizer

Pour exécuter une charge de travail privilégiée, ajoutez le chemin d'accès au fichier de liste d'autorisation correspondant à une spécification AllowlistSynchronizer dans un fichier YAML. Vous déployez ensuite l'AllowlistSynchronizer sur votre cluster.

  1. Dans un éditeur de texte, créez un fichier YAML.
  2. Ajoutez le contenu suivant au fichier YAML :

    apiVersion: auto.gke.io/v1
    kind: AllowlistSynchronizer
    metadata:
      name: ALLOWLIST_SYNCHRONIZER_NAME
    spec:
      allowlistPaths:
      - ALLOWLIST1_PATH
      - ALLOWLIST2_PATH
    

    Remplacez les éléments suivants :

    • ALLOWLIST_SYNCHRONIZER_NAME: nom du nouveau synchroniseur. Choisissez un nom descriptif qui identifie la charge de travail ou l'équipe que la liste d'autorisation prend en charge.
    • ALLOWLIST1_PATH, ALLOWLIST2_PATH, ... : liste de chemins d'accès aux fichiers ou répertoires de listes d'autorisation que vous souhaitez installer, comme dans l'exemple suivant pour les listes d'autorisation approuvées par GKE :

      allowlistPaths:
      - Gke-Org/accelerators/*
      - Wiz/wiz-sensor/v1/wiz-sensor-v1.yaml
      

      Ou dans l'exemple suivant pour les listes d'autorisation appartenant à des clients :

      allowlistPaths:
      - my-agent/log-collector/*
      - my-agent/privileged-logging-agent.yaml
      

      La configuration du cluster doit être compatible avec les chemins d'accès que vous spécifiez, comme décrit dans la section Configurer les chemins d'accès à la liste d'autorisation pour un cluster. De plus, chaque AllowlistSynchronizer doit contenir exclusivement des listes d'autorisation approuvées par GKE ou exclusivement des listes d'autorisation appartenant à des clients.

  3. Si vous installez des listes d'autorisation à partir d'un bucket Cloud Storage appartenant à un client, ajoutez les champs spec.projectNumber et spec.bucketName à votre AllowlistSynchronizer. Pour en savoir plus, consultez la section Définition de ressource personnalisée AllowlistSynchronizer.

  4. Déployez le fichier YAML sur votre cluster :

    kubectl apply -f PATH_TO_YAML_FILE
    

    Remplacez PATH_TO_YAML_FILE par le chemin d'accès au fichier YAML que vous avez créé à l'étape précédente.

    Le contrôleur AllowlistSynchronizer installe les fichiers de liste d'autorisation à partir des chemins d'accès spécifiés dans votre cluster.

  5. Attendez que le synchroniseur signale l'état Ready :

    kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \
        --timeout=60s
    

Vous pouvez également intégrer l'installation de listes d'autorisation et le déploiement de charges de travail privilégiées dans votre pipeline d'intégration continue et de déploiement continu (CI/CD). Configurez votre workflow pour qu'il attende que la liste d'autorisation soit installée avant de déployer la charge de travail correspondante.

Mettre à jour un AllowlistSynchronizer

Vous pouvez mettre à jour un AllowlistSynchronizer existant pour ajouter ou supprimer des fichiers de liste d'autorisation. Vous pouvez mettre à jour des synchroniseurs existants dans les situations suivantes, par exemple :

  • Le propriétaire de la charge de travail ajoute un fichier de liste d'autorisation portant un nom différent.
  • Vous souhaitez ajouter une nouvelle liste d'autorisation de charge de travail à un synchroniseur existant qui regroupe des listes d'autorisation associées.
  • Vous souhaitez supprimer une liste d'autorisation d'un synchroniseur, car vous ne souhaitez plus utiliser la charge de travail correspondante.

Pour mettre à jour un objet AllowlistSynchronizer existant, procédez comme suit :

  1. Répertoriez les synchroniseurs existants dans votre cluster :

    kubectl get allowlistsynchronizer
    
  2. Ouvrez la spécification du synchroniseur que vous souhaitez mettre à jour dans un éditeur de texte.

  3. Mettez à jour le champ spec.allowlistPaths pour ajouter, modifier ou supprimer des chemins d'accès aux fichiers de liste d'autorisation.

  4. Enregistrez et fermez l'éditeur de texte.

  5. Appliquez la configuration mise à jour au cluster :

    kubectl apply -f PATH_TO_YAML_FILE
    

    Remplacez PATH_TO_YAML_FILE par le chemin d'accès au fichier YAML que vous avez mis à jour à l'étape précédente.

Lorsque vous déployez une configuration de synchroniseur mise à jour, le champ managedAllowlistStatus.generation de l'état de l'objet AllowlistSynchronizer est incrémenté de un. Le contrôleur AllowlistSynchronizer applique ensuite vos modifications.

Surveiller l'état de la synchronisation de la liste d'autorisation

Une fois que vous avez installé un AllowlistSynchronizer ou mis à jour un synchroniseur existant, vous pouvez surveiller l'état de la synchronisation. L'état vous permet de suivre l'installation, la suppression ou les modifications des fichiers de liste d'autorisation, ainsi que les erreurs éventuelles.

Pour surveiller l'état général de la synchronisation, exécutez la commande suivante :

kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml

Le résultat ressemble à ce qui suit :

...
status:
  conditions:
  - type: Ready
    status: "False"
    reason: "SyncError"
    message: "some allowlists failed to sync: example-allowlist-1.yaml"
    lastTransitionTime: "2024-10-12T10:00:00Z"
    observedGeneration: 2
  managedAllowlistStatus:
    - filePath: "gs://path/to/example-allowlist-2.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/example-allowlist-1.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"

Dans cet exemple de résultat, la synchronisation de la liste d'autorisation example-allowlist-1.yaml a échoué, et la liste d'autorisation example-allowlist-2.yaml a été installée. Pour obtenir une description de ces champs, consultez la section État d'AllowlistSynchronizer.

Vérifier qu'une liste d'autorisation existe dans votre cluster

Pour vérifier qu'une liste d'autorisation existe dans votre cluster, exécutez la commande suivante :

kubectl get workloadallowlist

Le résultat est une liste des listes d'autorisation installées dans le cluster. Vérifiez que le résultat inclut la liste d'autorisation que vous souhaitez utiliser.

Déployer la charge de travail privilégiée

Une fois qu'une liste d'autorisation est installée, vous pouvez déployer la charge de travail correspondante dans votre cluster. Le propriétaire de la charge de travail doit également vous fournir des instructions d'installation pour la charge de travail. Pour obtenir la liste des partenaires Autopilot et des liens vers leur documentation, consultez la section Partenaires Autopilot.

Utiliser des dépôts de miroir d'images privés

Vous pouvez mettre en miroir les images de conteneurs de charges de travail privilégiées dans des dépôts privés dont vous êtes propriétaire. Pour exécuter ces images mises en miroir dans une charge de travail, vous devez respecter toutes les exigences suivantes :

  • Le condensé SHA-256 de l'image mise en miroir doit correspondre au condensé d'image de la charge de travail disponible publiquement.
  • Le condensé d'image SHA-256 que vous spécifiez doit exister dans l'objet WorkloadAllowlist synchronisé avec votre cluster.

Si la charge de travail est compatible avec les images mises en miroir, la spécification de liste d'autorisation pour cette charge de travail contient une liste de condensés d'images dans le champ containers.imageDigests de la spécification de liste d'autorisation pour cette charge de travail. En règle générale, ce champ comporte un condensé distinct pour chaque version disponible de l'image de conteneur. Pour afficher cette liste de condensés d'images, procédez comme suit :

  1. Vérifiez que la liste d'autorisation existe dans votre cluster.
  2. Obtenez la spécification de la liste d'autorisation installée :

    kubectl get workloadallowlist ALLOWLIST_NAME -o yaml
    

    Remplacez ALLOWLIST_NAME par le nom de la liste d'autorisation installée. Par exemple, company-name-solution-v1.0.0.

    Pour les charges de travail compatibles avec cette fonctionnalité, le résultat ressemble à ce qui suit. Le champ imageDigests contient une liste de condensés autorisés.

    # lines omitted for clarity
    - containerName: pause-container1
      imageDigests:
      - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
      - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23
    

    Si le résultat n'inclut pas de champ imageDigests, ou si le condensé de la version que vous souhaitez utiliser ne figure pas dans la liste, contactez directement le propriétaire de la charge de travail et demandez-lui de mettre à jour sa liste d'autorisation. Une fois que le propriétaire de la charge de travail a ajouté des condensés d'images à sa liste d'autorisation, le synchroniseur de liste d'autorisation de votre cluster installe automatiquement la liste d'autorisation mise à jour.

  3. Ajoutez l'un des condensés d'images compatibles au fichier manifeste de votre charge de travail.

Prenons l'exemple de l'image suivante dans la spécification de pod disponible publiquement d'un partenaire :

...
  containers:
  - name: pause-container1
    image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

Vous pouvez utiliser une image mise en miroir si le condensé correspond au condensé disponible publiquement, comme dans l'exemple suivant :

...
  containers:
  - name: pause-container1
    image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

Vous devez inclure le condensé SHA-256 dans votre champ d'image, comme dans l'exemple précédent. Si les condensés ne correspondent pas, l'image mise en miroir ne s'exécute pas. Pour conserver les condensés d'images lorsque vous mettez en miroir des images partenaires, envisagez d'utiliser un outil tel que crane, ORAS, ou skopeo.

Supprimer une charge de travail privilégiée

Pour empêcher l'exécution d'une charge de travail privilégiée dans vos clusters, supprimez le chemin d'accès à la liste d'autorisation correspondante de votre AllowlistSynchronizer. Le synchroniseur désinstalle la liste d'autorisation.

Si vous supprimez un objet WorkloadAllowlist de votre cluster au lieu de mettre à jour le synchroniseur, le synchroniseur réinstalle la liste d'autorisation. Assurez-vous de supprimer le chemin d'accès de l'AllowlistSynchronizer.

Pour désinstaller une liste d'autorisation, procédez comme suit :

  1. Dans le fichier manifeste YAML de l'AllowlistSynchronizer qui gère la liste d'autorisation, supprimez le chemin d'accès à la liste d'autorisation que vous souhaitez désinstaller. Pour obtenir des instructions, consultez la section Mettre à jour un AllowlistSynchronizer.
  2. Pour vérifier que la liste d'autorisation a été désinstallée, obtenez la liste des objets WorkloadAllowlist dans votre cluster :

    kubectl get workloadallowlist
    

    Dans le résultat, assurez-vous que la liste d'autorisation que vous souhaitez supprimer n'apparaît pas.

  3. Supprimez la charge de travail de votre cluster. Pour obtenir des instructions, consultez la documentation du fournisseur de la charge de travail.

Empêcher l'installation de listes d'autorisation dans vos clusters

Pour empêcher l'installation de listes d'autorisation de charges de travail privilégiées dans des clusters spécifiques, spécifiez une chaîne vide ("") dans l' --autopilot-privileged-admission lorsque vous créez ou mettez à jour un cluster.

  • Pour désactiver des chemins d'accès à des listes d'autorisation spécifiques pour un cluster, omettez les chemins d'accès à ces listes d'autorisation lorsque vous créez ou mettez à jour un cluster :

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...
    

    Remplacez ALLOWLIST1_PATH,ALLOWLIST2_PATH,... par une liste de chemins d'accès aux sources de listes d'autorisation, séparés par une virgule. Omettez les chemins d'accès que vous souhaitez désactiver.

  • Pour désactiver toutes les listes d'autorisation dans un cluster existant, spécifiez une chaîne vide comme chemin d'accès approuvé :

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-allowlist-paths=""
    

Résoudre les problèmes

Si la synchronisation ou le déploiement de la charge de travail échouent, consultez la section Résoudre les problèmes de déploiement des charges de travail Autopilot privilégiées.

Étape suivante