Cette page fournit des suggestions pour sécuriser la création et la configuration des files d'attente. La solution consiste à n'accorder les autorisations d'utilisation des méthodes de gestion des files d'attente qu'à un petit nombre de personnes ou d'entités. Pour les entreprises de grande taille, il peut être nécessaire d'utiliser un compte de service pour exécuter un logiciel qui applique la configuration de file d'attente appropriée.
L'idée générale est de séparer les utilisateurs et les autres entités en trois catégories :
- Administrateurs de file d'attente : les utilisateurs de ce groupe sont autorisés à appeler des méthodes de gestion des files d'attente Cloud Tasks et à importer des fichiers
queue.yaml
. Ce groupe est restreint à un très petit nombre d'utilisateurs afin de réduire le risque d'interférence de la configuration de la file d'attente, par exemple en mélangeant involontairement les méthodes de gestion des files d'attente via un fichierqueue.yaml
et via Cloud Tasks. - Nœuds de calcul Cloud Tasks : les utilisateurs de ce groupe sont autorisés à effectuer des interactions courantes avec Cloud Tasks, telles que les tâches de mise en file d'attente et de retrait de file d'attente. Ils ne sont pas autorisés à appeler les méthodes de gestion des files d'attente Cloud Tasks.
- Utilisateurs à l'origine du déploiement App Engine : pour les projets comportant des applications App Engine, les utilisateurs de ce groupe sont autorisés à déployer l'application. Ils ne sont pas autorisés à importer des fichiers
queue.yaml
ni à effectuer d'appels à l'API Cloud Tasks, ce qui permet ainsi aux administrateurs de la file d'attente d'appliquer les stratégies appropriées.
Dans ce schéma, les utilisateurs qui sont des administrateurs de file d'attente ne doivent pas également être des nœuds de calcul Cloud Tasks, car cela irait à l'encontre de l'objectif de séparation.
Si votre projet utilise exclusivement des méthodes de gestion des files d'attente Cloud Tasks, nous vous recommandons de ne pas placer les administrateurs de file d'attente dans le groupe des utilisateurs à l'origine du déploiement App Engine, car cela permettrait l'importation d'un fichier queue.yaml
errant.
Projets et entreprises de petite taille
Les projets et entreprises de petite taille peuvent attribuer des rôles IAM (Cloud Identity and Access Management) directement aux utilisateurs pour les placer dans les groupes ci-dessus. Cela convient tout particulièrement aux équipes qui préfèrent une configuration simple, ou qui effectuent des modifications de la configuration de la file d'attente ou des déploiements d'applications App Engine manuellement.
Ajoutez des utilisateurs à ces groupes comme suit :
Administrateur de file d'attente
En tant qu'administrateur de projet, attribuez le rôle
cloudtasks.queueAdmin
aux utilisateurs autorisés à importer des fichiersqueue.yaml
et à effectuer des appels à l'API de gestion des files d'attente Cloud Tasks.gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/cloudtasks.queueAdmin
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projetEMAIL
: adresse e-mail de l'utilisateur membre
En tant qu'utilisateur bénéficiant du rôle
cloudtasks.queueAdmin
et selon les bonnes pratiques décrites ci-dessus, choisissez l'une des méthodes suivantes pour modifier la configuration de la file d'attente.Utilisez l'API Cloud Tasks pour modifier la configuration de la file d'attente.
Importez
queue.yaml
avecgcloud
:gcloud app deploy queue.yaml
Nœuds de calcul Cloud Tasks
Comme de nombreux utilisateurs sont souvent autorisés à interagir avec Cloud Tasks, vous pouvez attribuer des rôles à des comptes de service plutôt qu'à des utilisateurs individuels. Ce type d'utilisation est courant dans un environnement de production. Pour plus d'informations, consultez la section Projets et entreprises de grande taille.
En tant qu'administrateur de projet, attribuez des rôles aux utilisateurs qui sont autorisés à interagir avec Cloud Tasks, mais qui ne sont pas autorisés à modifier la configuration de la file d'attente :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.viewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.enqueuer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.dequeuer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.taskRunner gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.taskDeleter
Remplacez
PROJECT_ID
par l'ID de votre projet.
En tant qu'utilisateur ayant un ou plusieurs des rôles attribués ci-dessus, vous pouvez interagir avec l'API Cloud Tasks.
Déployeur App Engine
En tant qu'administrateur de projet, attribuez des rôles aux utilisateurs qui sont autorisés à déployer des applications App Engine, mais qui ne sont pas autorisés à modifier la configuration de la file d'attente ou à interagir avec les tâches :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/appengine.deployer gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/appengine.serviceAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/storage.admin
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projetEMAIL
: adresse e-mail de l'utilisateur membre
En tant qu'utilisateur ayant les rôles attribués ci-dessus, déployez une application App Engine.
gcloud app deploy app.yaml
Projets et entreprises de grande taille
Les projets et entreprises de grande taille peuvent utiliser des comptes de service pour séparer les tâches et les responsabilités. Cela convient tout particulièrement aux équipes qui possèdent une infrastructure complexe pour modifier la configuration de la file d'attente et éventuellement déployer des applications App Engine.
Pour suivre le principe du moindre privilège et simplifier la gestion des accès, ces instructions utilisent l'emprunt d'identité de compte de service. Pour en savoir plus sur ce modèle, consultez la section Utiliser l'emprunt d'identité d'un compte de service dans la documentation sur l'authentification Google Cloud.
Vous trouverez ci-dessous des instructions pour configurer ces comptes de service.
Administrateur de file d'attente
En tant qu'administrateur de projet, créez le compte de service.
gcloud iam service-accounts create queue-admin \ --display-name "Queue Admin"
Attribuez le rôle
cloudtasks.queueAdmin
au compte de service afin qu'il puisse importer des fichiersqueue.yaml
et effectuer des appels à l'API de gestion des files d'attente Cloud Tasks.gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:queue-admin@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.queueAdmin
Remplacez
PROJECT_ID
par l'ID de votre projet.Autoriser de manière sélective l'emprunt d'identité de l'administrateur de la file d'attente compte de service que vous créé.
Il s'agit généralement d'un petit groupe d'administrateurs de file d'attente. Attribuez à ces comptes principaux le
iam.serviceAccountTokenCreator
le rôle "Administrateur de la file d'attente" que vous avez créé. Pour savoir comment procéder, consultez la section Attribuer ou révoquer un rôle unique dans la documentation IAM.Conformément aux bonnes pratiques décrites dans la section Utiliser la gestion des files d'attente ou queue.yaml, choisissez l'une des méthodes suivantes pour modifier la configuration de la file d'attente :
Utilisez Cloud Tasks pour modifier la configuration de la file d'attente.
Importer
queue.yaml
avec la gcloud CLI
Nœuds de calcul Cloud Tasks
En tant qu'administrateur de projet, créez le compte de service.
gcloud iam service-accounts create cloud-tasks-worker \ --display-name "Cloud Tasks Worker"
Attribuez des rôles au compte de service afin qu'il puisse interagir avec Cloud Tasks, mais pas modifier la configuration de la file d'attente.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.viewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.enqueuer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.dequeuer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.taskRunner gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.taskDeleter
Remplacez
PROJECT_ID
par l'ID de votre projet.Autoriser de manière sélective l'emprunt d'identité du "nœud de calcul Cloud Tasks" compte de service que vous avez créés.
Pour les comptes principaux qui interagissent avec Cloud Tasks, accordez le rôle
iam.serviceAccountTokenCreator
sur le rôle "Nœud de calcul Cloud Tasks" compte de service que vous avez créé. Pour savoir comment procéder, consultez la section Attribuer ou révoquer un rôle unique dans la documentation IAM.
Déployeur App Engine
En tant qu'administrateur de projet, créez le compte de service.
gcloud iam service-accounts create app-engine-deployer \ --display-name "App Engine Deployer"
Attribuez des rôles au compte de service afin qu'il puisse déployer des applications App Engine, mais pas
queue.yaml
.gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \ --role roles/appengine.deployer gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \ --role roles/appengine.serviceAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \ --role roles/storage.admin
Remplacez
PROJECT_ID
par l'ID de votre projet.Autoriser de manière sélective l'emprunt d'identité du "déployeur App Engine" compte de service que vous avez créé.
Pour les principaux qui déploient des services App Engine, attribuez le rôle
iam.serviceAccountTokenCreator
au compte de service "Déployeur App Engine" que vous avez créé. Pour savoir comment procéder, consultez la section Attribuer ou révoquer un rôle unique dans la documentation IAM.
Limiter l'accès aux files d'attente uniques
Si un projet comporte plusieurs files d'attente et que vous souhaitez limiter l'accès
files d'attente, vous pouvez utiliser des stratégies IAM au niveau de la file d'attente au lieu
au niveau du projet. Pour limiter l'accès par file d'attente, utilisez la
gcloud tasks queues add-iam-policy-binding
. Exemple :
gcloud tasks queues add-iam-policy-binding QUEUE_NAME --location=LOCATION \ --member=serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/cloudtasks.enqueuer
Remplacez les éléments suivants :
QUEUE_NAME
: nom de votre file d'attente.LOCATION
: emplacement de votre file d'attentePROJECT_ID
: ID de votre projet
Étape suivante
- Comptes de service
- Comprendre les comptes de service
- Gérer l'accès aux projets, aux dossiers et aux organisations
- Créer et gérer des comptes de service
- Utiliser l'emprunt d'identité d'un compte de service