Définir des autorisations de compte de service

Cette page explique le fonctionnement du compte de service Cloud Build et comment lui accorder l'accès à d'autres projets.

Qu'est-ce que le compte de service Cloud Build ?

Cloud Build exécute les compilations à l'aide d'un compte de service. Il s'agit d'un compte Google spécial exécutant des compilations en son nom. L'adresse e-mail du compte de service Cloud Build est [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com.

Vous pouvez afficher les comptes de service de votre projet via le menu IAM de Cloud Console.

Lorsque vous activez l'API Cloud Build, le compte de service est automatiquement créé et se voit attribuer le rôle Cloud Build Service Account (Compte de service Cloud Build) pour votre projet. Ce rôle suffit pour plusieurs tâches, notamment :

  • La récupération du code depuis le dépôt Cloud Source Repositories de votre projet
  • Le téléchargement de fichiers à partir d'un bucket Cloud Storage appartenant à votre projet
  • L'enregistrement des journaux de compilation dans Cloud Logging
  • Le transfert d'images Docker vers Container Registry
  • L'extraction d'images de base de Container Registry

Le compte de service effectue ces actions uniquement selon les besoins pour exécuter la compilation. Par exemple, le compte de service ne récupère pas le code du dépôt Cloud Source Repositories à moins que vous ne le lui demandiez.

Accorder un accès supplémentaire

Les autorisations par défaut du compte de service ne lui permettent pas d'effectuer certaines actions, telles que le déploiement sur App Engine ou Cloud Functions, la gestion des ressources Compute Engine et Google Kubernetes Engine, ou l'accès à un bucket Cloud Storage.

Vous pouvez activer votre compte de service pour effectuer ces actions en attribuant des rôles IAM supplémentaires au compte.

Pour accorder un rôle IAM à un compte de service Cloud Build, procédez comme suit :

  1. Accédez à la page "Paramètres" de Cloud Build.

    Accéder à la page Paramètres de Cloud Build

    La page "Autorisations de compte de service" s'affiche alors :

    Capture d'écran de la page des autorisations de compte de service

  2. Définissez le rôle que vous souhaitez ajouter sur l'état Activé.

Extraire des images privées d'autres projets Google Cloud

Vous pouvez accorder des autorisations pour extraire des images privées d'un autre projet Cloud Platform, à condition que le compte de service ait accès au projet. Par exemple, vous souhaiterez peut-être exécuter une compilation dans le projet A pouvant extraire des images du projet B.

gsutil

Pour accorder ces autorisations à votre compte de service, exécutez les commandes suivantes dans l'interface système ou la fenêtre de terminal :

  1. Recherchez le nom du bucket Cloud Storage pour le registre. Pour cela, répertoriez les buckets :

    gsutil ls
    

    L'URL de votre bucket Container Registry sera répertoriée sous la forme gs://artifacts.[PROJECT_ID].appspot.com ou gs://[STORAGE_REGION].artifacts.[PROJECT_ID].appspot.com.

  2. Accordez des autorisations au compte de service du projet A pour lire les objets du projet B :

    gsutil acl ch -r -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:R \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    
  3. Accordez des autorisations au compte de service du projet A pour lire le bucket du projet B :

    gsutil acl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:R \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    
  4. Mettez à jour la LCA par défaut du projet B afin que le compte de service du projet A dispose des autorisations de lecture pour les objets créés après l'exécution des étapes 1 et 2 ci-dessus :

    gsutil defacl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:R \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    

Où :

  • [STORAGE_REGION] est l'emplacement multirégional (asia, eu, ou us) du registre qui héberge l'image ;
  • [PROJECT_NUMBER_A] est le numéro de projet du projet A ;
  • [PROJECT_ID_B] est l'ID de projet du projet B.

console

Pour obtenir des instructions sur l'octroi d'autorisations à l'aide de Cloud Console, consultez la page Créer et gérer des listes de contrôle d'accès.

Transférer des images privées vers d'autres projets Google Cloud

Vous pouvez accorder des autorisations pour transférer des images privées vers un autre projet Cloud Platform, à condition que le compte de service ait accès au projet. Par exemple, vous souhaiterez peut-être exécuter une compilation dans le projet A pouvant transférer des images vers le projet B.

gsutil

Pour accorder ces autorisations à votre compte de service, exécutez les commandes suivantes dans l'interface système ou la fenêtre de terminal :

  1. Recherchez le nom du bucket Cloud Storage pour le registre. Pour cela, répertoriez les buckets :

    gsutil ls
    

    L'URL de votre bucket Container Registry sera répertoriée sous la forme gs://artifacts.[PROJECT_ID].appspot.com ou gs://[STORAGE_REGION].artifacts.[PROJECT_ID].appspot.com.

  2. Accordez des autorisations au compte de service du projet A pour lire les objets du projet B :

    gsutil acl ch -r -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:W \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    
  3. Accordez des autorisations au compte de service du projet A pour lire le bucket du projet B :

    gsutil acl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:W \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    
  4. Mettez à jour la LCA par défaut du projet B afin que le compte de service du projet A dispose des autorisations d'écriture pour les objets créés après l'exécution des étapes 1 et 2 ci-dessus :

    gsutil defacl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:W \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    

Où :

  • [STORAGE_REGION] est l'emplacement multirégional (asia, eu, ou us) du registre qui héberge l'image ;
  • [PROJECT_NUMBER_A] est le numéro de projet du projet A ;
  • [PROJECT_ID_B] est l'ID de projet du projet B.

console

Pour obtenir des instructions sur l'octroi d'autorisations à l'aide de Cloud Console, consultez la page Créer et gérer des listes de contrôle d'accès.

Dépannage

Si vous trouvez des erreurs 403 (accès refusé) dans vos journaux de compilation, procédez comme suit :

  • Désactivez l'API Cloud Build et réactivez-la. Cela devrait permettre à votre compte de service d'accéder à nouveau au projet.
  • Exécutez de nouveau les commandes ci-dessus.

Étape suivante