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 respecter 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'usurpation d'identité d'un compte de service dans la documentation d'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.Autorisez de manière sélective l'emprunt d'identité du compte de service "Administrateur de la file d'attente" que vous avez créé.
Il s'agit généralement d'un petit groupe d'administrateurs de files d'attente. Attribuez à ces utilisateurs principaux le rôle
iam.serviceAccountTokenCreator
sur le compte de service "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 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.Autorisez de manière sélective l'emprunt d'identité du compte de service "Cloud Tasks Worker" que vous avez créé.
Pour les principaux qui interagissent avec Cloud Tasks, attribuez le rôle
iam.serviceAccountTokenCreator
au compte de service "Worker Cloud Tasks" 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.Autorisez de manière sélective l'usurpation d'identité du compte de service "Déployeur App Engine" 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 vous disposez de plusieurs files d'attente dans un projet et que vous souhaitez limiter l'accès à des files d'attente individuelles, vous pouvez utiliser des stratégies IAM au niveau de la file d'attente plutôt qu'au niveau du projet. Pour limiter l'accès par file d'attente, exécutez la commande 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'attenteLOCATION
: 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