Exécuter des charges de travail privilégiées à partir de partenaires GKE Autopilot


Cette page explique comment exécuter des charges de travail privilégiées à partir de partenaires Autopilot Google Kubernetes Engine (GKE). Vous allez découvrir comment configurer une charge de travail de synchronisation qui installe une liste d'autorisation dans votre cluster et la met à jour.

Cette page s'adresse aux types de rôles suivants:

  • Les 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 des charges de travail tierces sur des clusters pour débloquer les équipes d'applications

Pour en savoir plus sur les rôles courants et les exemples de tâches que nous citons dans notre documentation, consultez la section Rôles utilisateur et tâches courantes de l'utilisateur dans GKE Enterprise.

Avant de lire cette page, assurez-vous de connaître les éléments suivants:

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

GKE permet à un sous-ensemble de partenaires approuvés d'exécuter des charges de travail privilégiées dans des clusters Autopilot. Ces charges de travail privilégiées peuvent contourner certaines des contraintes de sécurité appliquées par Autopilot. Par exemple, un partenaire peut avoir besoin d'exécuter une charge de travail qui utilise des fonctionnalités Linux spécifiques ou qui nécessite un conteneur privilégié.

Les partenaires créent et gèrent des listes d'autorisation pour leurs charges de travail privilégiées. Chaque liste d'autorisations est un fichier correspondant à une charge de travail partenaire privilégiée spécifique. Les partenaires soumettent ces fichiers de liste d'autorisation à GKE pour approbation. Après approbation, GKE héberge le fichier de liste d'autorisation dans un dépôt géré par Google.

Pour exécuter une charge de travail partenaire, vous devez installer le fichier de liste d'autorisation correspondant dans votre cluster. GKE fournit une ressource personnalisée Kubernetes appelée AllowlistSynchronizer qui installe des listes d'autorisation et les met à jour. Une fois qu'une liste d'autorisation a été installée, vous pouvez déployer la charge de travail partenaire privilégiée correspondante.

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

Les partenaires sont responsables de la création, du développement et de la gestion de leurs charges de travail et de leurs listes d'autorisation privilégiées. Si vous rencontrez un bug ou si vous avez une demande de fonctionnalité pour une charge de travail ou une liste d'autorisation privilégiée, contactez le partenaire correspondant.

À propos du contrôleur AllowlistSynchronizer

AllowlistSynchronizer est un contrôleur qui s'exécute dans votre plan de contrôle GKE. Vous déployez un nouveau AllowlistSynchronizer en tant que fichier manifeste YAML, comme vous le feriez pour toute autre charge de travail Kubernetes. Dans le fichier manifeste, vous spécifiez le chemin d'accès au fichier de liste d'autorisation que vous souhaitez installer, que vous obtenez auprès du partenaire tiers. Le synchroniseur recherche le fichier de liste d'autorisation du partenaire dans un dépôt géré par Google et installe la liste d'autorisation dans votre cluster.

Toutes les 10 minutes, le synchroniseur recherche les mises à jour du fichier de liste d'autorisation. Si une mise à jour est disponible, le synchronisateur installe la liste d'autorisation mise à jour dans votre cluster.

Pour arrêter d'autoriser des charges de travail spécifiques, mettez à jour les AllowlistSynchronizers existants pour supprimer les chemins d'accès aux fichiers de liste d'autorisation correspondants, puis supprimez l'objet WorkloadAllowlist de votre cluster. Si vous supprimez un objet WorkloadAllowlist installé sans supprimer le chemin d'accès du synchronisateur de liste d'autorisation, le synchronisateur réinstalle la liste d'autorisation. Les partenaires ne peuvent pas supprimer les fichiers de la liste d'autorisation du dépôt géré par Google.

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  • Activez l'API Google Kubernetes Engine.
  • Activer l'API Google Kubernetes Engine
  • Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. 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.

Conditions requises

  • La ressource personnalisée AllowlistSynchronizer nécessite GKE version 1.32.1-gke.1729000 ou ultérieure.
  • Vous devez savoir quelle charge de travail partenaire vous souhaitez exécuter dans votre cluster. Consultez la documentation de votre partenaire pour obtenir des instructions sur l'installation de la charge de travail privilégiée.

Créer un AllowlistSynchronizer.

Pour exécuter une charge de travail privilégiée à partir d'un partenaire, vous ajoutez le chemin d'accès au fichier de liste d'autorisation correspondant à une ressource personnalisée AllowlistSynchronizer. Vous déployez ensuite 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 compatible avec la liste d'autorisation.
    • ALLOWLIST1_PATH, ALLOWLIST2_PATH, ... : un ou plusieurs chemins d'accès aux fichiers de liste d'autorisation des partenaires à installer. Consultez la documentation de la charge de travail du partenaire de votre choix pour ce chemin. Vous pouvez spécifier des répertoires entiers ou des fichiers individuels.
  3. 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 spécifiés dans votre cluster.

  4. Attendez que le synchroniseur indique un état Ready:

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

Vous pouvez également intégrer le déploiement de la charge de travail de votre partenaire à votre pipeline d'intégration et de déploiement continus (CI/CD). Configurez votre workflow pour qu'il attende que la liste d'autorisation soit correctement installée avant de déployer la charge de travail correspondante.

Mettre à jour un AllowlistSynchronizer existant

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:

  • Le partenaire ajoute un nouveau fichier de liste d'autorisations avec un nom différent.
  • Vous souhaitez ajouter une liste d'autorisation de charge de travail à un synchroniseur existant qui regroupe les listes d'autorisation associées.
  • Vous souhaitez supprimer une liste d'autorisations 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 de votre cluster:

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

  3. Modifiez le champ spec.allowlistPaths pour ajouter, modifier ou supprimer des chemins de fichier de la 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 augmente d'un. Le contrôleur AllowlistSynchronizer applique ensuite vos modifications.

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

Après avoir installé un AllowlistSynchronizer ou mis à jour un synchroniseur existant, vous pouvez surveiller l'état de la synchronisation. L'état vous aide à suivre l'installation, la suppression ou les modifications des fichiers de liste d'autorisation, ainsi que les erreurs pouvant se produire.

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/allowlist1.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/allowlist2.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"

Pour obtenir une description de ces champs, consultez la section État 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 la sortie 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 partenaire qui fournit 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.

Supprimer une charge de travail privilégiée

Pour arrêter d'autoriser 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. Veillez à supprimer le chemin d'accès de 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 existant.
  2. Pour vérifier que la liste d'autorisation a été désinstallée, obtenez la liste des objets WorkloadAllowlist de votre cluster:

    kubectl get workloadallowlist
    

    Dans la sortie, assurez-vous que la liste d'autorisation que vous souhaitiez supprimer n'apparaît pas.

  3. Supprimez la charge de travail de votre cluster. Pour savoir comment procéder, consultez la documentation du fournisseur de charges de travail.

Empêcher l'installation de la liste 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, utilisez un ValidatingAdmissionPolicy. La validation des règles d'admission garantit que les ressources Kubernetes répondent à des critères spécifiques avant de pouvoir s'exécuter dans le cluster. Par exemple, vous pouvez vérifier qu'une étiquette a une valeur spécifique.

Pour éviter d'installer des listes d'autorisation dans un cluster, procédez comme suit:

  1. Enregistrez le fichier manifeste ValidatingAdmissionPolicy suivant sous le nom disallow-allowlists.yaml:

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicy
    metadata:
      name: "disallow-allowlists"
    spec:
      failurePolicy: Fail
      matchConstraints:
        resourceRules:
        - apiGroups:   ["auto.gke.io"]
          apiVersions: ["*"]
          operations:  ["*"]
          resources:   ["allowlistsynchronizers"]
      validations:
      - expression: "false"
        message: 'AllowlistSynchronizer creation is not allowed'
    
  2. Enregistrez le fichier manifeste ValidatingAdmissionPolicyBinding suivant sous le nom disallow-allowlists-binding.yaml:

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicyBinding
    metadata:
      name: "disallow-allowlists-binding"
    spec:
      policyName: "disallow-allowlists"
      validationActions: [Deny]
    
  3. Déployez ValidatingAdmissionPolicy dans votre cluster:

    kubectl apply -f disallow-allowlists.yaml
    kubectl apply -f disallow-allowlists-binding.yaml
    

Cette règle empêche la création de nouveaux AllowlistSynchronizers dans le cluster.

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 de charges de travail Autopilot privilégiées.

Étape suivante