Configuration de la file d'attente sécurisée

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é de 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. Autorisez de manière sélective l'emprunt d'identité pour le compte de service "Administrateur de file d'attente" que vous avez créé.

    Il doit généralement s'agir d'un petit groupe de comptes principaux agissant en tant qu'administrateurs de la file d'attente. Attribuez à ces comptes principaux le rôle iam.serviceAccountTokenCreator pour le compte de service "Administrateur de file d'attente" que vous avez créé. Pour en savoir plus, consultez la section Attribuer ou révoquer un seul rôle dans la documentation IAM.

  4. En suivant les bonnes pratiques décrites dans la section Utiliser la gestion des files d'attente ou la page "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. Autorisez de manière sélective l'emprunt d'identité pour le compte de service "Cloud Tasks Worker" que vous avez créé.

    Pour les comptes principaux qui interagissent avec Cloud Tasks, accordez le rôle iam.serviceAccountTokenCreator au compte de service "Nœud de calcul Cloud Tasks" que vous avez créé. Pour en savoir plus, consultez la section Attribuer ou révoquer un seul rôle 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. Autorisez de manière sélective l'emprunt d'identité pour le compte de service "Déployeur App Engine" que vous avez créé.

    Pour les comptes principaux qui déploient des services App Engine, accordez le rôle iam.serviceAccountTokenCreator au compte de service "Déployeur App Engine" que vous avez créé. Pour en savoir plus, consultez la section Attribuer ou révoquer un seul rôle 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 à 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, utilisez 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'attente.
  • LOCATION: emplacement de votre file d'attente.
  • PROJECT_ID : ID de votre projet

Étapes suivantes