Configurer des comptes de service spécifiés par l'utilisateur

Pour suivre le principe du moindre privilège dans Cloud Build, vous pouvez configurer Cloud Build pour qu'il utilise un compte de service disposant des droits suffisants pour exécuter une compilation. Cette page explique comment configurer un compte de service.

Si vous ne spécifiez pas de compte de service, Cloud Build peut en sélectionner un automatiquement pour exécuter des compilations en votre nom. Ce compte de service peut disposer d'autorisations inutilement larges pour votre cas d'utilisation, comme l'accès à vos dépôts Cloud Source Repositories et à n'importe quel bucket Cloud Storage de votre projet.

Pour améliorer la sécurité de vos projets et réduire l'impact potentiel des configurations incorrectes ou des utilisateurs malveillants, nous vous recommandons de suivre le principe du moindre privilège. En adoptant ce principe, vous pouvez attribuer à chaque compte de service les autorisations et les rôles adaptés à la tâche qu'il exécute. Par exemple, vous pouvez utiliser un compte de service pour compiler et transférer des images vers Artifact Registry, comme indiqué sur le blogGoogle Cloud .

Avant de commencer

  • Enable the Cloud Build and IAM APIs.

    Enable the 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.

    Enable the IAM Service Account Credentials API.

    Enable the API

  • Créez un compte de service, si ce n'est pas déjà fait.

Accorder des autorisations IAM

Pour permettre à votre compilation d'accéder aux services auxquels elle doit se connecter, vous devez accorder certains rôles et autorisations :

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

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

  2. Dans la liste déroulante, sélectionnez le compte de service dont vous souhaitez modifier les rôles.

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

  4. Si le rôle dont vous avez besoin pour votre pipeline de compilation ne figure pas dans la liste, vous pouvez attribuer des rôles supplémentaires sur la page de configuration IAM.

Pour en savoir plus sur les rôles couramment requis pour un build, consultez Configurer l'accès aux ressources Cloud Build et la liste complète des rôles et autorisations IAM Cloud Build.

Configurer les journaux de compilation

Lorsque vous spécifiez votre propre compte de service pour les compilations, vous devez stocker vos journaux de compilation dans Cloud Logging ou dans un bucket Cloud Storage créé par l'utilisateur. Vous ne pouvez pas stocker vos journaux dans le bucket de journaux par défaut.

Exécuter une compilation à l'aide d'un fichier de configuration

Pour exécuter manuellement une compilation à l'aide d'un fichier de configuration :

  1. Dans le répertoire racine de votre projet, créez un fichier de configuration de compilation Cloud Build nommé cloudbuild.yaml ou cloudbuild.json.

  2. Ajoutez le champ serviceAccount et la configuration de journalisation de votre choix.

    • Si vous stockez les journaux de compilation dans Cloud Logging, ajoutez un champ logging et définissez sa valeur sur CLOUD_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 sur GCS_ONLY.
      • Ajoutez un champ logsBucket et définissez sa valeur sur l'emplacement de votre bucket Cloud Storage.

    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 correspond à l'ID du projet Google Cloud sur lequel 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.
  3. 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 compilation
    • SOURCE_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 à l'aide de votre propre compte de service, configurez votre option de journalisation préférée et sélectionnez votre compte de service préféré lorsque vous créez le déclencheur.

  1. Dans le fichier de configuration de compilation :

    • Si vous stockez les journaux de compilation dans Cloud Logging, ajoutez un champ logging et définissez sa valeur sur CLOUD_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 sur GCS_ONLY.
      • Ajoutez un champ logsBucket et définissez sa valeur sur l'emplacement de votre bucket Cloud Storage.

    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 dans lequel stocker les journaux de compilation. Exemple : gs://mylogsbucket.

  2. 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éclencheurs" 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 multiprojets, créez le déclencheur de compilation à l'aide de l'outil gcloud.

    1. Créez ou modifiez votre déclencheur de compilation.

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

    3. 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, la commande 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 est votre compte de service au format /projects/PROJECT_ID/serviceAccounts/ACCOUNT_ID_OR_EMAIL.
    • BUILD_PROJECT est le projet dans lequel vous démarrez les compilations.

Configuration multiprojet

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 le 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 cette contrainte de règle d'administration, exécutez la commande suivante, où SERVICE_ACCOUNT_PROJECT_ID correspond au projet contenant 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 le 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 les 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 : adresse e-mail de l'agent de service au format service-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 du projet sur la page Paramètres du projet.

Limites :

  • Votre projet Google Cloud doit se trouver dans une organisation Google Cloud .

  • Vous devez démarrer les compilations en ligne de commande à l'aide de gcloud builds submit ou gcloud builds triggers create. Pour utiliser la page "Déclencheurs" dans 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.

Étapes suivantes