Cette page vous explique comment exécuter des charges de travail privilégiées à partir de partenaires Google Kubernetes Engine (GKE) Autopilot. Vous apprendrez à configurer une charge de travail de synchronisation qui installe une liste d'autorisation dans votre cluster et la maintient à jour.
Cette page s'adresse 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 des charges de travail tierces sur des clusters pour débloquer les équipes d'application.
Pour en savoir plus sur les rôles courants et les exemples de tâches que nous citons dans notre documentation, consultez Rôles utilisateur et tâches courantes de GKE Enterprise.
Avant de lire cette page, assurez-vous de connaître les éléments suivants :
- Ressources personnalisées Kubernetes
- Contraintes de sécurité de GKE Autopilot
- Partenaires GKE Autopilot
À 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 les 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'autorisation est un fichier qui correspond à une charge de travail partenaire privilégiée spécifique. Les partenaires envoient ces fichiers de liste d'autorisation à GKE pour approbation. Une fois la liste d'autorisation approuvée, GKE l'héberge 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 nommée AllowlistSynchronizer
qui installe les listes d'autorisation et les maintient à jour.
Une fois la liste d'autorisation 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 privilégiées et les listes d'autorisation
Il incombe aux partenaires de créer, de développer et de gérer leurs charges de travail privilégiées et leurs listes d'autorisation. Si vous rencontrez un bug ou si vous souhaitez demander une fonctionnalité pour une charge de travail privilégiée ou une liste d'autorisation, 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 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. Vous l'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 existe, le synchronisateur installe la liste d'autorisation mise à jour dans votre cluster.
Pour ne plus autoriser des charges de travail spécifiques, mettez à jour les AllowlistSynchronizers existants afin de supprimer les chemins d'accès aux fichiers de la 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 de votre 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.2-gke.1652000 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 savoir comment installer 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 devez ajouter 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.
- Dans un éditeur de texte, créez un fichier YAML.
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, ...
: 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 choisi pour ce chemin d'accès. Vous pouvez spécifier des répertoires entiers ou des fichiers individuels.
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.Attendez que le synchroniseur indique l'é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 du partenaire dans 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 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 les synchroniseurs existants dans les situations suivantes :
- Le partenaire ajoute un fichier de liste d'autorisation portant un autre nom.
- 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'autorisation d'un synchroniseur, car vous ne voulez plus utiliser la charge de travail correspondante.
Pour mettre à jour un objet AllowlistSynchronizer
existant, procédez comme suit :
Affichez la liste des synchroniseurs existants dans votre cluster :
kubectl get allowlistsynchronizer
Ouvrez la spécification du synchroniseur que vous souhaitez mettre à jour dans un éditeur de texte.
Mettez à jour le champ
spec.allowlistPaths
pour ajouter, modifier ou supprimer des chemins de fichiers de la liste d'autorisation.Enregistrez et fermez l'éditeur de texte.
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 modifié à l'étape précédente.
Lorsque vous déployez une configuration de synchroniseur mise à jour, le champ managedAllowlistStatus.generation
dans 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
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 la modification des fichiers de liste d'autorisation, ainsi que les éventuelles erreurs.
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 É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 la liste d'autorisation 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 obtenir la liste des partenaires Autopilot et des liens vers leur documentation, consultez Partenaires Autopilot.
Utiliser des dépôts de mise en miroir d'images privés
Vous pouvez mettre en miroir les images de conteneurs des charges de travail partenaires dans des dépôts privés qui vous appartiennent. Pour exécuter ces images dupliquées dans une charge de travail, vous devez remplir toutes les conditions suivantes :
- Le condensé SHA-256 de l'image mise en miroir doit correspondre au condensé de l'image de la charge de travail partenaire disponible publiquement.
- Le résumé SHA-256 de l'image que vous spécifiez doit exister dans l'objet
WorkloadAllowlist
fourni par le partenaire et synchronisé avec votre cluster.
Si la charge de travail du partenaire est compatible avec les images miroir, la spécification de la 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 la 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 :
- Vérifiez que la liste d'autorisation existe dans votre cluster.
Obtenez les spécifications 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. 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 des résumés autorisés.# lines omitted for clarity - containerName: pause-container1 imageDigests: - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23
Si le résultat ne comporte pas de champ
imageDigests
ou si le résumé de la version que vous souhaitez utiliser ne figure pas dans la liste, contactez directement le partenaire et demandez-lui de mettre à jour sa liste d'autorisation. Une fois que le partenaire a ajouté des résumés d'images à sa liste d'autorisation et soumis les modifications à GKE, le synchronisateur de liste d'autorisation de votre cluster installe automatiquement la liste d'autorisation mise à jour.Ajoutez l'un des résumés d'image 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 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 récapitulatif SHA-256 dans le champ de votre image, comme dans l'exemple précédent. Si les résumés ne correspondent pas, l'image mise en miroir ne s'exécutera pas. Pour conserver les résumés d'image lorsque vous dupliquez 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 une charge de travail privilégiée de s'exécuter 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 AllowlistSynchronizer
.
Pour désinstaller une liste d'autorisation, procédez comme suit :
- Dans le fichier manifeste YAML du
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 une section AllowlistSynchronizer existante. 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 le résultat, assurez-vous que la liste d'autorisation que vous souhaitez supprimer n'apparaît pas.
Supprimez la charge de travail de votre cluster. Pour savoir comment procéder, consultez la documentation du fournisseur de charge 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 une ValidatingAdmissionPolicy. La validation des règles d'admission garantit que les ressources Kubernetes répondent à des critères spécifiques avant d'être autorisées à s'exécuter dans le cluster. Par exemple, vous pouvez vérifier qu'un libellé a une valeur spécifique.
Pour empêcher l'installation de listes d'autorisation dans un cluster, procédez comme suit :
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'
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]
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 Résoudre les problèmes de déploiement des charges de travail Autopilot privilégiées.
Étapes suivantes
- Partenaires GKE Autopilot
- Exécuter des charges de travail Open Source privilégiées sur GKE Autopilot
- Fonctionnalités de sécurité de GKE Autopilot
- Définition de ressource personnalisée AllowlistSynchronizer