Si vous ne spécifiez pas de compte de service, Cloud Build peut sélectionner automatiquement un compte de service pour exécuter des compilations en votre nom. Ce compte de service peut disposer d'autorisations inutilement étendues pour votre cas d'utilisation, comme l'accès à vos Cloud Source Repositories et à tous les buckets Cloud Storage de votre projet.
Pour améliorer la stratégie de sécurité de vos projets et réduire leur impact potentiel d'erreurs de configuration ou d'utilisateurs malveillants, nous vous recommandons de suivre le principe moindre privilège. En adoptant ce principe, vous pouvez attribuer à chaque compte de service les autorisations et les rôles limités à la tâche qu'il effectue. Par exemple, vous pouvez utiliser un compte de service pour compiler et transférer des images vers Artifact Registry, comme indiqué sur le blog Google Cloud.
Avant de commencer
-
Enable the Cloud Build and IAM APIs.
Si vous prévoyez d'utiliser ce compte pour créer et gérer des identifiants, par exemple pour créer des identifiants éphémères, activez l'API IAM Service Account Credentials.
Créez un compte de service, si ce n'est pas déjà fait.
Accorder des autorisations IAM
Pour autoriser votre build à accéder aux services auxquels elle doit se connecter, vous devez vous pouvez attribuer des rôles et des autorisations:
Accédez à la page "Paramètres" de Cloud Build.
Accéder à la page Paramètres de Cloud Build
L'onglet Autorisations de compte de service s'affiche :
Dans la liste déroulante, sélectionnez le compte de service dont vous souhaitez modifier les rôles.
Définissez le rôle que vous souhaitez ajouter sur l'état Activé.
Si le rôle dont vous avez besoin pour votre pipeline de compilation ne figure pas ici, vous pouvez attribuer des rôles supplémentaires sur la page des configurations IAM.
Vous trouverez des informations supplémentaires sur les rôles généralement requis pour une s'appuyer sur Configurer l'accès à Cloud Build ressources et consultez la liste complète des services IAM les rôles et les autorisations nécessaires.
Configurer les journaux de compilation
Lorsque vous spécifiez votre propre compte de service pour les compilations, vous devez stocker votre build les journaux dans Cloud Logging ou dans un bucket Cloud Storage créé par l'utilisateur. Toi ne peuvent pas stocker vos journaux dans le bucket de journaux par défaut.
Pour stocker vos journaux dans un bucket Cloud Storage, suivez les instructions dans Stocker les journaux de compilation dans le bucket créé par l'utilisateur. Marque vérifiez que vous n'avez pas défini de règle de conservation sur le bucket de journaux, car cela pourrait empêcher Cloud Build d'écrire des journaux de compilation dans le bucket.
Pour stocker des journaux de compilation dans Cloud Logging, accordez le rôle Rédacteur de journaux (
roles/logging.logWriter
) au compte de service.Pour en savoir plus sur l'emplacement de stockage des journaux de compilation, consultez la section Choisir l'emplacement de stockage des journaux de compilation.
Exécuter une compilation à l'aide d'un fichier de configuration
Pour exécuter manuellement une compilation à l'aide d'un fichier de configuration :
Dans le répertoire racine de votre projet, créez un fichier de configuration de compilation Cloud Build nommé
cloudbuild.yaml
oucloudbuild.json
.Ajoutez le champ
serviceAccount
et la configuration de journalisation souhaitée.Si vous stockez les journaux de compilation dans Cloud Logging, ajoutez un champ
logging
et définissez sa valeur surCLOUD_LOGGING_ONLY
.Si vous stockez les journaux de compilation dans un bucket Cloud Storage créé par l'utilisateur :
- Ajoutez un champ
logging
et définissez sa valeur surGCS_ONLY
. - Ajoutez un champ
logsBucket
et définissez sa valeur sur l'emplacement de votre bucket Cloud Storage.
- Ajoutez un champ
L'exemple suivant configure Cloud Build pour exécuter des compilations à l'aide d'un compte de service spécifié par l'utilisateur et configure les journaux de compilation pour qu'ils soient stockés dans un bucket Cloud Storage créé par l'utilisateur :
YAML
steps: - name: 'bash' args: ['echo', 'Hello world!'] logsBucket: 'LOGS_BUCKET_LOCATION' serviceAccount: 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT' options: logging: GCS_ONLY
JSON
{ "steps": [ { "name": "bash", "args": [ "echo", "Hello world!" ] } ], "logsBucket": "LOGS_BUCKET_LOCATION", "serviceAccount": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT", "options": { "logging": "GCS_ONLY" } }
Remplacez les valeurs d'espace réservé dans votre fichier de configuration de compilation par les éléments suivants:
LOGS_BUCKET_LOCATION
est le bucket Cloud Storage où stocker les journaux de compilation. Exemple :gs://mylogsbucket
PROJECT_ID
est l'ID du projet Google Cloud. où vous exécutez la compilation.SERVICE_ACCOUNT
est l'adresse e-mail ou l'ID unique du compte de service que vous souhaitez spécifier pour les compilations. Par exemple, une adresse e-mail de compte de service se présente comme suit :service-account-name@project-id.iam.gserviceaccount.com
.
Lancez la compilation à l'aide du fichier de configuration de compilation :
gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
Remplacez les valeurs d'espace réservé dans les commandes ci-dessus par les éléments suivants :
CONFIG_FILE_PATH
est le chemin d'accès du fichier de configuration de compilationSOURCE_DIRECTORY
est le chemin d'accès ou l'URL du code source.
Si vous ne spécifiez pas les éléments CONFIG_FILE_PATH et SOURCE_DIRECTORY dans la commande
gcloud builds submit
, Cloud Build considère que le fichier de configuration de compilation et le code source se trouvent dans le répertoire de travail actuel.
Exécuter des compilations à l'aide de déclencheurs
Pour exécuter une compilation avec des déclencheurs Cloud Build en utilisant votre propre compte de service, configurez l'option de journalisation de votre choix et sélectionnez compte de service privilégié lors de la création du déclencheur.
Dans le fichier de configuration de compilation :
Si vous stockez les journaux de compilation dans Cloud Logging, ajoutez un
logging
et définissez la valeur du champ surCLOUD_LOGGING_ONLY
.Si vous stockez les journaux de compilation dans un bucket Cloud Storage créé par l'utilisateur:
- Ajoutez un champ
logging
et définissez sa valeur surGCS_ONLY
. - Ajoutez un champ
logsBucket
et définissez sa valeur sur l'emplacement de votre bucket Cloud Storage.
- Ajoutez un champ
L'exemple suivant configure les journaux de compilation pour qu'ils soient stockés dans un bucket Cloud Storage créé par l'utilisateur :
YAML
steps: - name: 'bash' args: ['echo', 'Hello world!'] logsBucket: 'LOGS_BUCKET_LOCATION' options: logging: GCS_ONLY
JSON
{ "steps": [ { "name": "bash", "args": [ "echo", "Hello world!" ] } ], "logsBucket": "LOGS_BUCKET_LOCATION", "options": { "logging": "GCS_ONLY" } }
Remplacez
LOGS_BUCKET_LOCATION
par le Bucket Cloud Storage pour stocker les journaux de compilation. Exemple :gs://mylogsbucket
.Spécifiez un compte de service à utiliser avec votre déclencheur de compilation:
Console
Pour exécuter des compilations à l'aide de la page "Déclencheur" de la console Google Cloud, le compte de service spécifié par l'utilisateur doit se trouver dans le même projet que votre déclencheur de compilation. Pour utiliser des déclencheurs avec des comptes de service multiprojet, créez le déclencheur de compilation à l'aide de l'outil
gcloud
.Dans le champ Compte de service, spécifiez votre compte de service. Si vous ne spécifiez pas de compte de service, Cloud Build utilise le compte de service par défaut.
Cliquez sur Créer pour enregistrer le déclencheur de compilation.
gcloud
Lors de la création d'un déclencheur de compilation, spécifiez votre compte de service à l'aide de l'option
--service-account
. Dans l'exemple suivant,gcloud
crée un déclencheur de compilation qui extrait le code d'un dépôt Git:gcloud builds triggers create github \ --name=TRIGGER_NAME \ --repo-name=REPO_NAME \ --repo-owner=REPO_OWNER \ --branch-pattern=BRANCH_PATTERN --build-config=BUILD_CONFIG_FILE --service-account=SERVICE_ACCOUNT --project=BUILD_PROJECT
Remplacez les valeurs d'espace réservé dans votre fichier de configuration de compilation par les éléments suivants:
TRIGGER_NAME
correspond au nom de votre déclencheur de compilation.REPO_NAME
est le nom du dépôt.REPO_OWNER
est le nom d'utilisateur du propriétaire du dépôt.BRANCH_PATTERN
est le nom de la branche de votre dépôt sur lequel appeler la compilation.TAG_PATTERN
est le nom du tag de votre dépôt sur lequel appeler la compilation.BUILD_CONFIG_FILE
correspond au chemin d'accès à votre fichier de configuration de compilation.SERVICE_ACCOUNT
correspond à votre compte de service au format/projects/PROJECT_ID/serviceAccounts/ACCOUNT_ID_OR_EMAIL
.BUILD_PROJECT
est le projet dans lequel vous vous trouvez le démarrage des compilations.
Configuration multiprojets
Si le compte de service spécifié par l'utilisateur se trouve dans un projet différent de celui dans lequel vous démarrez les compilations, accordez l'accès nécessaire :
Dans le projet contenant votre compte de service spécifié par l'utilisateur, assurez-vous que la contrainte de règle d'administration
iam.disableCrossProjectServiceAccountUsage
n'est pas appliquée. Cette contrainte est appliquée par défaut. Pour désactiver d'une contrainte de règle d'administration, exécutez la commande suivante, où SERVICE_ACCOUNT_PROJECT_ID est le projet qui contient le compte de service spécifié par l'utilisateur:gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage \ --project=SERVICE_ACCOUNT_PROJECT_ID
Dans le projet qui contient votre compte de service spécifié par l'utilisateur, attribuez le rôle
roles/iam.serviceAccountTokenCreator
à l'agent de service Cloud Build du projet dans lequel vous exécutez des compilations :gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member="serviceAccount:BUILD_SERVICE_AGENT" \ --role="roles/iam.serviceAccountTokenCreator"
Remplacez les valeurs d'espace réservé dans la commande par les éléments suivants :
SERVICE_ACCOUNT_PROJECT_ID
: ID du projet contenant le compte de service spécifié par l'utilisateur.BUILD_SERVICE_AGENT
: ID de messagerie de l'agent de service au formatservice-BUILD_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
, oùBUILD_PROJECT_NUMBER
correspond au numéro du projet dans lequel vous exécutez des compilations. Vous pouvez obtenir le numéro de projet page des paramètres du projet.
Limites :
Votre projet Google Cloud doit appartenir à une organisation Google Cloud.
Vous devez démarrer les compilations dans la ligne de commande en utilisant
gcloud builds submit
ougcloud builds triggers create
Pour utiliser la page "Déclencheurs" de la console Google Cloud, le compte de service spécifié par l'utilisateur et le déclencheur de compilation doivent se trouver dans le même projet.
Étape suivante
- Découvrez les rôles et les autorisations IAM pour Cloud Build.
- Découvrez l'impact des modifications du compte de service sur l'exécution de vos compilations.