Cloud Build peut utiliser un compte de service spécial pour exécuter des compilations en votre nom. L'adresse e-mail du compte de service Cloud Build est [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com
. Ce compte de service peut disposer d'autorisations inutilement étendues pour votre cas d'utilisation. Vous pouvez améliorer la stratégie de sécurité en suivant le principe du moindre privilège. Conformément à ce principe, nous vous recommandons de créer votre propre compte de service pour exécuter des compilations en votre nom. Cela peut réduire l'impact potentiel des erreurs de configuration ou des utilisateurs malveillants.
Cette page explique toutes les autorisations dont dispose le compte de service Cloud Build. Pour savoir comment accorder ou révoquer des autorisations sur le compte de service Cloud Build, consultez la section Configurer l'accès au compte de service Cloud Build.
Autorisations par défaut du compte de service Cloud Build
Lorsque vous activez l'API Cloud Build pour un projet Google Cloud, le compte de service Cloud Build est automatiquement créé dans le projet et se voit attribuer le rôle "Compte de service Cloud Build" pour les ressources du projet. Ce rôle contient un certain nombre d'autorisations, telles que la possibilité de mettre à jour des compilations ou d'écrire des journaux. Le compte de service n'utilise ces autorisations que selon les besoins pour effectuer des actions lors de l'exécution de votre compilation. Par exemple, le compte de service utilise l'autorisation source.repos.get
pour récupérer le code de votre dépôt Cloud Source Repositories si le code source de votre compilation se trouve dans le dépôt Cloud Source Repositories. Si vous ne prévoyez pas d'effectuer une action dans le cadre du processus de compilation, nous vous recommandons de révoquer l'autorisation correspondante du compte de service Cloud Build pour respecter le principe de sécurité de moindre privilège.
Le tableau suivant répertorie les autorisations que le rôle de compte de service Cloud Build contient et l'objectif pour lequel le compte de service Cloud Build utilise ces autorisations.
Autorisation | Description | Objectif de l'autorisation |
---|---|---|
cloudbuild.builds.create |
Peut créer des compilations et des déclencheurs | Obligatoire pour:
|
cloudbuild.builds.update |
Peut mettre à jour des compilations et des déclencheurs | |
cloudbuild.builds.list |
Peut répertorier des compilations et des déclencheurs | |
cloudbuild.builds.get |
Peut obtenir une compilation et un déclencheur | |
cloudbuild.workerpools.use |
Piscine privée autorisée | Obligatoire pour exécuter des compilations dans un pool privé. |
logging.logEntries.create |
Écrire des journaux | Requis pour créer et répertorier des journaux de compilation dans Cloud Logging. |
logging.logEntries.list |
Peut répertorier les journaux | |
logging.views.access |
Peut consulter les journaux | |
pubsub.topics.create |
Créer des sujets Pub/Sub | Obligatoire pour envoyer des mises à jour de compilation à Pub/Sub |
pubsub.topics.publish |
Publier sur Pub/Sub | |
remotebuildexecution.blobs.get |
Peut être autorisé à approuver ou refuser des builds. | Obligatoire pour approuver ou refuser les builds en attente |
resourcemanager.projects.get |
Obtenir des informations sur le projet | |
resourcemanager.projects.list |
Répertorier les projets | |
source.repos.get |
Lire le code source des dépôts dans Cloud Source Repositories | Obligatoire pour:
|
source.repos.list |
Répertorier les dépôts dans Cloud Source Repositories | |
storage.buckets.create |
Peut créer des buckets Cloud Storage | Obligatoire pour:
|
storage.buckets.get |
Obtenir des buckets Cloud Storage | |
storage.buckets.list |
Répertorier des buckets Cloud Storage | |
storage.objects.list |
Répertorier des objets Cloud Storage. | |
storage.objects.update |
Mettre à jour des objets Cloud Storage | |
storage.objects.create |
Écrire des objets Cloud Storage | |
storage.objects.delete |
Supprimer des objets Cloud Storage | |
storage.objects.get |
Lire des objets Cloud Storage | |
artifactregistry.repositories.uploadArtifacts |
Importer des artefacts dans les dépôts d'Artifact Registry | Requis pour gérer les artefacts dans Artifact Registry. |
artifactregistry.repositories.downloadArtifacts |
Télécharger des artefacts à partir d'un dépôt dans Artifact Registry | |
artifactregistry.aptartifacts.create |
Importer des artefacts Apt dans Artifact Registry | |
artifactregistry.dockerimages.get |
Obtenir des images Docker à partir d'Artifact Registry | |
artifactregistry.dockerimages.list |
Peut lister les images Docker stockées dans Artifact Registry | |
artifactregistry.kfpartifacts.create |
Importer un artefact KFP dans Artifact Registry | |
artifactregistry.locations.get |
Permet d'obtenir des informations sur l'emplacement d'une ressource dans Artifact Registry. | |
artifactregistry.locations.list |
Peut lister les emplacements compatibles avec Artifact Registry | |
artifactregistry.mavenartifacts.get |
Peut obtenir des packages Maven à partir d'Artifact Registry | |
artifactregistry.mavenartifacts.list |
Peut lister les packages Maven à partir d'Artifact Registry | |
artifactregistry.npmpackages.get |
Peut obtenir des packages npm à partir d'Artifact Registry | |
artifactregistry.npmpackages.list |
Peut lister les packages npm à partir d'Artifact Registry | |
artifactregistry.projectsettings.get |
Peut obtenir les paramètres du projet à partir d'Artifact Registry | |
artifactregistry.pythonpackages.get |
Peut obtenir des packages Python à partir d'Artifact Registry | |
artifactregistry.pythonpackages.list |
Peut lister les packages Python à partir d'Artifact Registry | |
artifactregistry.yumartifacts.create |
Importer des artefacts Yum dans Artifact Registry | |
artifactregistry.repositories.createOnPush |
Peut créer un dépôt gcr.io dans Artifact Registry la première fois qu'une image est transférée vers un nom d'hôte gcr.io du projet. | |
artifactregistry.repositories.get |
Obtenir un dépôt à partir d'Artifact Registry | |
artifactregistry.repositories.list |
Répertorier les dépôts dans Artifact Registry | |
artifactregistry.repositories.listEffectiveTags |
Peut lister les tags des artefacts dans Artifact Registry | Requis pour gérer les tags des artefacts dans Artifact Registry. |
artifactregistry.repositories.listTagBindings |
Peut lister les informations sur la liaison de tags pour les artefacts dans Artifact Registry | |
artifactregistry.tags.create |
Peut créer des tags dans Artifact Registry | |
artifactregistry.tags.get |
Obtenir des tags à partir d'Artifact Registry | |
artifactregistry.tags.list |
Répertorier les tags dans Artifact Registry | |
artifactregistry.tags.update |
Peut mettre à jour des tags dans Artifact Registry | |
artifactregistry.versions.list |
Répertorier les versions dans Artifact Registry | |
artifactregistry.versions.get |
Obtenir des versions dans Artifact Registry | |
containeranalysis.occurrences.create |
Peut créer une occurrence Artifact Analysis | Le compte de service Cloud Build n'utilise pas ces autorisations, mais elles sont incluses pour des raisons de rétrocompatibilité. |
containeranalysis.occurrences.delete |
Supprimer une occurrence Artifact Analysis | |
containeranalysis.occurrences.get |
Peut obtenir une occurrence Artifact Analysis | |
containeranalysis.occurrences.list |
Peut répertorier les occurrences Artifact Analysis | |
containeranalysis.occurrences.update |
Mise à jour des occurrences Artifact Analysis |
Déclencheurs de compilation
Par défaut, les déclencheurs de compilation utilisent le compte de service Cloud Build pour exécuter des compilations. Vous pouvez également configurer des déclencheurs de compilation pour exécuter des compilations avec un compte de service de votre choix. Vous pouvez configurer chaque déclencheur avec un compte de service différent.
Tenez compte des considérations suivantes lorsque vous choisissez le compte de service à spécifier pour un déclencheur de compilation :
Compte de service Cloud Build par défaut : tout utilisateur disposant du rôle d'éditeur Cloud Build peut créer et exécuter directement un déclencheur. Par exemple, un utilisateur peut exécuter le déclencheur manuellement. Tout utilisateur peut également exécuter indirectement un déclencheur. Par exemple, un utilisateur peut appeler indirectement un déclencheur lorsqu'il transfère le nouveau code source dans un dépôt connecté. Tout utilisateur disposant du rôle d'éditeur Cloud Build peut mettre à jour un déclencheur tant que le compte de service précédent et le nouveau compte de service spécifié sur le déclencheur sont les comptes Cloud Build par défaut.
Compte de service spécifié par l'utilisateur: tout utilisateur doté du rôle Éditeur Cloud Build et de l'autorisation
iam.serviceAccounts.actAs
peut créer et exécuter directement un déclencheur. Par exemple, un utilisateur peut exécuter le déclencheur manuellement. Tout utilisateur peut également exécuter indirectement un déclencheur. Par exemple, un utilisateur peut appeler indirectement un déclencheur lorsqu'il transfère une nouvelle source vers un dépôt connecté. Tout utilisateur doté du rôle Éditeur Cloud Build peut mettre à jour un déclencheur à condition de disposer des autorisationsiam.serviceAccounts.actAs
sur le compte de service précédemment configuré et sur le nouveau compte de service spécifié sur le déclencheur. Pour accorder cette autorisation à un utilisateur, vous pouvez lui attribuer un rôle prédéfini doté de cette autorisation, tel que le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser
). Vous pouvez également créer un rôle IAM personnalisé avec l'autorisationiam.serviceAccounts.actAs
, puis attribuer ce rôle à l'utilisateur. Pour en savoir plus sur les autorisations de compte de service, consultez la section Rôles pour l'authentification des comptes de service.
De plus, le compte de service Cloud Build par défaut et les comptes de service spécifiés par l'utilisateur peuvent fournir des autorisations de durée de compilation élevée aux utilisateurs qui utilisent des déclencheurs pour appeler une compilation. Gardez à l'esprit les implications de sécurité suivantes lorsque vous utilisez des déclencheurs de compilation associés au compte de service Cloud Build par défaut:
- Un utilisateur n'ayant pas accès à votre projet Google Cloud, mais disposant d'un accès en écriture au dépôt associé aux déclencheurs de compilation du projet, sera autorisé à modifier le code en cours de compilation.
- En outre, si vous utilisez des déclencheurs de demande d'extraction GitHub, tout utilisateur disposant d'un accès en lecture au dépôt peut envoyer une requête d'extraction, qui peut déclencher une compilation incluant des modifications du code dans la requête d'extraction. Vous pouvez désactiver ce comportement en choisissant l'option Commande de commentaire lors de la création d'un déclencheur de requête d'extraction GitHub. Cette option garantit que la compilation n'est lancée que si un propriétaire du dépôt ou un collaborateur commente
/gcbrun
. Pour en savoir plus sur l'utilisation du contrôle des commentaires avec les déclencheurs GitHub, consultez la section Créer des déclencheurs GitHub.
Limites
Si vous devez vous authentifier entre les services à l'aide d'un jeton d'ID, vous devez exécuter vos compilations avec un compte de service spécifié par l'utilisateur. Le compte de service Cloud Build par défaut ne peut pas être utilisé pour générer des jetons d'identification.
Par exemple, si vous utilisez des applications de plate-forme sans serveur telles que Cloud Functions, Cloud Run ou App Engine et que vous souhaitez appeler votre application à partir de Cloud Build, un compte de service spécifié par l'utilisateur et configuré avec les autorisations requises pour l'authentification de service à service est nécessaire.
Pour obtenir des instructions, consultez Autoriser l'accès de service à service.
Étapes suivantes
- Apprenez-en plus sur les comptes de service spécifiés par l'utilisateur.
- Découvrez comment configurer l'accès pour le compte de service Cloud Build.
- Découvrez comment configurer l'accès aux ressources Cloud Build.
- Apprenez-en plus sur les autorisations requises pour afficher les journaux de compilation.