Ce document explique comment créer des listes d'autorisation qui vous permettent de déployer des charges de travail privilégiées dans vos nœuds Autopilot. Vous stockez ces listes d'autorisation dans des buckets Cloud Storage. Ce document s'adresse aux administrateurs et opérateurs de plate-forme qui souhaitent exempter des charges de travail spécifiques appartenant à des clients des contraintes de sécurité Autopilot par défaut pour des charges de travail Kubernetes spécifiques. Vous devez déjà connaître le contrôle d'admission des charges de travail privilégiées dans Autopilot.
À 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 contourner ces contraintes pour exécuter des charges de travail privilégiées spécifiques en installant des listes d'autorisation qui correspondent à ces charges de travail. Par défaut, tout cluster Autopilot ou standard vous permet d'installer des listes d'autorisation provenant de partenaires Autopilot et de projets Open Source spécifiques.
Les clients GKE éligibles peuvent créer et gérer des listes d'autorisation pour leurs propres charges de travail privilégiées qui ne sont pas compatibles avec les contraintes Autopilot par défaut. Ces listes d'autorisation sont des ressources personnalisées Kubernetes WorkloadAllowlist que vous définissez dans des fichiers YAML et stockez dans des buckets Cloud Storage. Les administrateurs de l'authentification et des comptes utilisent des règles d'administration pour vous permettre de configurer vos clusters afin qu'ils reconnaissent ces listes d'autorisation et ces buckets gérés par le client. Les administrateurs de cluster peuvent installer ces listes d'autorisation afin que les charges de travail privilégiées puissent s'exécuter en mode Autopilot.
Pour en savoir plus sur le processus et les personnes impliquées, consultez Fonctionnement du contrôle d'admission des charges de travail Autopilot privilégiées.
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 la
gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière
version en exécutant la
gcloud components updatecommande. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.
-
Activez l'API Cloud Storage.
Rôles requis pour activer les API
Pour activer les API, vous avez besoin de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation via le rôle Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles. - Assurez-vous de disposer d'un cluster GKE exécutant la version 1.35 ou ultérieure. Vous pouvez également créer un cluster Autopilot pour cette tâche.
- Vérifiez que vous disposez d'un bucket Cloud Storage que vous pouvez utiliser pour stocker les fichiers de liste d'autorisation. Vous pouvez également créer un bucket pour cette tâche.
- Ouvrez le fichier manifeste YAML qui définit la charge de travail privilégiée que vous souhaitez exécuter dans Autopilot.
Rôles requis
Pour obtenir les autorisations nécessaires pour stocker des listes d'autorisation dans Cloud Storage et configurer la synchronisation, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre bucket :
-
Stocker des listes d'autorisation dans votre bucket:
Utilisateur d'objets de l'espace de stockage (
roles/storage.objectUser) -
Accorder l'accès à l'agent de service GKE :
Administrateur Storage (
roles/storage.admin)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Créer et importer une WorkloadAllowlist
Les listes d'autorisation sont des ressources personnalisées WorkloadAllowlist que vous définissez dans des fichiers YAML. Les champs de la spécification d'une WorkloadAllowlist sont semblables à ceux d'une spécification de pod Kubernetes. Lorsque vous installez une liste d'autorisation dans votre cluster et déployez une charge de travail privilégiée, GKE valide la spécification de la charge de travail privilégiée par rapport à la liste d'autorisation installée. La charge de travail ne peut s'exécuter que si tous les champs de la spécification de la liste d'autorisation correspondent aux champs correspondants de la spécification de la charge de travail.
Pour créer une WorkloadAllowlist et l'importer dans votre bucket Cloud Storage, procédez comme suit :
- Identifiez la charge de travail privilégiée à ajouter à la liste d'autorisation.
Ajoutez l'annotation suivante au champ
metadata.annotationsde votre spécification de pod :cloud.google.com/generate-allowlist: "true"Pour les pods gérés par un contrôleur, tel qu'un DaemonSet ou un déploiement, ajoutez l'annotation au champ
spec.template.metadata.annotations.Tentez de créer la charge de travail privilégiée dans votre cluster :
kubectl apply -f WORKLOAD_FILE_PATHRemplacez WORKLOAD_FILE_PATH par le chemin d'accès à votre fichier manifeste de charge de travail. GKE rejette la charge de travail avec un message d'erreur qui inclut un fichier manifeste WorkloadAllowlist. Le résultat ressemble à ce qui suit :
This workload can be enabled using the following Custom Resource. To be used in-cluster, the WorkloadAllowlist must be uploaded to Google Cloud Storage and then installed using an AllowlistSynchronizer. Refer to https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-privileged-allowlists. Note that many common partner workloads are already allowlisted. These can be installed directly using an AllowlistSynchronizer. Refer to https://cloud.google.com/kubernetes-engine/docs/resources/autopilot-partners. --- apiVersion: auto.gke.io/v1 kind: WorkloadAllowlist metadata: name: test-pod-allowlist-2025-09-11t22-40-37 annotations: autopilot.gke.io/no-connect: "true" exemptions: - autogke-disallow-privilege matchingCriteria: containers: - name: pause-container2 image: k8s.gcr.io/pause2 securityContext: privileged: trueDans un éditeur de texte, créez un fichier YAML contenant la WorkloadAllowlist générée.
Définissez le champ
metadata.namede la liste d'autorisation.Facultatif : Généralisez la WorkloadAllowlist afin qu'elle puisse exempter des charges de travail semblables. Pour ce faire, utilisez une des méthodes suivantes :
Des champs spécifiques acceptent les expressions régulières, telles que
matchingCriteria.containers[*].imageetmatchingCriteria.containers[*].args. Utilisez une expression régulière qui correspond à plusieurs valeurs dans différentes charges de travail.Des champs spécifiques, tels que
matchingCriteria.containersetmatchingCriteria.securityContext.capabilities.add, correspondent à n'importe quelle charge de travail avec un sous-ensemble des valeurs de la WorkloadAllowlist. Dans la WorkloadAllowlist, spécifiez des valeurs supplémentaires pour correspondre à d'autres charges de travail.
Pour en savoir plus sur tous les champs et valeurs compatibles que vous pouvez utiliser, consultez la WorkloadAllowlist CustomResourceDefinition.
Importez le fichier manifeste dans votre bucket Cloud Storage.
Si les règles de votre organisation autorisent l'installation de listes d'autorisation à partir de votre bucket dans des clusters, les administrateurs de cluster peuvent procéder comme suit :
- Ajoutez vos chemins d'accès de liste d'autorisation à un cluster.
- Créez un AllowlistSynchronizer pour installer les listes d'autorisation à partir de votre bucket.
Pour en savoir plus sur la configuration d'un cluster et l'installation de listes d'autorisation, consultez Contrôler l'admission des charges de travail privilégiées en mode Autopilot.
Exemple de configuration de liste d'autorisation
Le champ matchingCriteria d'une spécification WorkloadAllowlist a une structure semblable à celle de la spécification de pod Kubernetes. La
WorkloadAllowlist CustomResourceDefinition
est la source de vérité pour tous les champs, valeurs et expressions que vous
pouvez utiliser.
Cette section présente un exemple de liste d'autorisation qui correspond à une charge de travail présentant les propriétés suivantes :
- Le conteneur
container-1de la charge de travail s'exécute en mode privilégié. - La charge de travail installe le répertoire
/var/log/à partir du système de fichiers du nœud en mode écriture.
Examinez l'exemple de charge de travail :
apiVersion: apps/v1 kind: Deployment metadata: name: example-privileged-workload labels: env: dev spec: selector: matchLabels: env: dev template: metadata: labels: env: dev spec: containers: - name: container-1 image: example-image-1 resources: requests: cpu: "400m" memory: "4Gi" # Run the container in privileged mode securityContext: privileged: true - name: container-2 image: example-image-2 volumeMounts: - name: write-varlog mountPath: /logs readOnly: false # Mount a host directory volumes: - name: write-varlog hostPath: path: /var/log type: DirectoryPar défaut, Autopilot rejette cette charge de travail.
Examinez l'exemple de WorkloadAllowlist :
apiVersion: auto.gke.io/v1 kind: WorkloadAllowlist minGKEVersion: 1.32.0-gke.1000000 metadata: name: example-privileged-workload annotations: autopilot.gke.io/no-connect: "true" # List of constraints that the allowlist modifies exemptions: - autogke-disallow-privilege - autogke-no-write-mode-hostpath matchingCriteria: containers: - name: container-1 image: example-image-1 securityContext: privileged: true - name: container-2 image: example-image-2 volumeMounts: - name: write-varlog mountPath: /logs readOnly: false volumes: - name: write-varlog hostPath: path: /var/logCette WorkloadAllowlist présente les propriétés suivantes :
- Les valeurs du champ
exemptionsspécifient les contraintes Autopilot que la liste d'autorisation contourne. - Les valeurs du champ
matchingCriteriaspécifient les conteneurs utilisés par l'exemple de charge de travail et les champs qui enfreindraient normalement les contraintes Autopilot.
La liste d'autorisation ne contient que les valeurs des champs qui enfreignent les contraintes. Les autres champs de la charge de travail, tels que le champ
resources.requests, sont ignorés.- Les valeurs du champ
Lorsque vous installez cet exemple de WorkloadAllowlist dans un cluster, GKE autorise l'exécution de la charge de travail privilégiée dans ce cluster. Par exemple, dans un cluster standard comportant des nœuds Autopilot, l'installation de cette WorkloadAllowlist permet à la charge de travail privilégiée de s'exécuter sur les nœuds Autopilot.
Accorder l'accès à l'agent de service GKE
Pour synchroniser les listes d'autorisation de votre bucket dans un cluster, le agent de service GKE du projet de cluster nécessite les rôles IAM suivants :
- Lecteur de bucket Storage (
roles/storage.bucketViewer) - Lecteur des objets Storage (
roles/storage.objectViewer)
Pour accorder ces rôles à l'agent de service, procédez comme suit :
Recherchez le numéro de projet de votre projet de cluster :
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'Attribuez le rôle
roles/storage.bucketViewer:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.s3ns-system.iam.gserviceaccount.com \ --project=BUCKET_PROJECT_ID \ --role=roles/storage.bucketViewerRemplacez les éléments suivants :
BUCKET_NAME: nom du bucket Cloud Storage.CLUSTER_PROJECT_NUMBER: numéro de projet du projet de cluster, issu de la sortie de l'étape précédente.BUCKET_PROJECT_ID: ID du projet contenant votre bucket.
Attribuez le rôle
roles/storage.objectViewer:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.s3ns-system.iam.gserviceaccount.com \ --project=BUCKET_PROJECT_ID \ --role=roles/storage.objectViewer
Étape suivante
- Ajouter vos chemins d'accès de liste d'autorisation à une règle d'administration
- Configurer des clusters et installer des listes d'autorisation