Configuration sécurisée des files d'attente

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 :

  1. 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 fichier queue.yaml et via Cloud Tasks.
  2. 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.
  3. 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

  1. En tant qu'administrateur de projet, attribuez le rôle cloudtasks.queueAdmin aux utilisateurs autorisés à importer des fichiers queue.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 projet
    • EMAIL : adresse e-mail de l'utilisateur membre
  2. 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.

    1. Utilisez l'API Cloud Tasks pour modifier la configuration de la file d'attente.

    2. Importez queue.yaml avec gcloud :

      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.

  1. 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

  1. 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 projet
    • EMAIL : adresse e-mail de l'utilisateur membre
  2. 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

  1. En tant qu'administrateur de projet, créez le compte de service.

    gcloud iam service-accounts create queue-admin \
    --display-name "Queue Admin"
  2. Attribuez le rôle cloudtasks.queueAdmin au compte de service afin qu'il puisse importer des fichiers queue.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.

  3. 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.

  4. 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

  1. 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"
  2. 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.

  3. 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

  1. 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"
  2. 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.

  3. 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'attente
  • PROJECT_ID : ID de votre projet

Étape suivante