Compte de service personnalisé pour Cloud Build

Les fonctions Cloud Run exploitent Cloud Build lors de la compilation et du déploiement de votre fonction Cloud Run. Par défaut, les fonctions Cloud Run utilisent le compte de service Cloud Build par défaut comme compte principal lors de la compilation. Depuis juillet 2024, Cloud Build a modifié le comportement par défaut concernant la façon dont Cloud Build utilise les comptes de service dans les nouveaux projets. Cette modification est détaillée dans la section Modification du compte de service Cloud Build. En raison de cette modification, les nouveaux projets qui déploient des fonctions pour la première fois peuvent utiliser un compte de service Cloud Build par défaut avec des autorisations insuffisantes pour créer une fonction. Si vous êtes concerné par cette modification, vous pouvez effectuer l'une des opérations suivantes :

  • Consultez les conseils de Cloud Build concernant les modifications apportées au compte de service par défaut et désactivez ces modifications.

  • Ajoutez le rôle "Compte Cloud Build" (roles/cloudbuild.builds.builder) au compte de service Compute Engine par défaut.

  • Créez un compte de service Cloud Build personnalisé pour déployer les fonctions.

Ce document explique comment transmettre un compte de service créé par l'utilisateur, qui sera utilisé par Cloud Build lors du déploiement de votre fonction.

Vous pouvez déployer des fonctions avec des comptes de service personnalisés à l'aide de Google Cloud CLI, de la console Google Cloud ou de l'API de fonctions Cloud Run.

Voici quelques situations dans lesquelles vous souhaiterez peut-être fournir un autre compte de service à utiliser lorsque Cloud Build compile votre fonction :

  • Vous souhaitez avoir davantage de contrôle sur les comptes de service à ajouter à votre périmètre VPC-SC.

  • Vous souhaitez que Cloud Build s'exécute avec des autorisations différentes de celles du compte de service par défaut sans avoir à révoquer chaque autorisation individuellement.

  • Vous souhaitez définir des autorisations Cloud Build précises pour vos fonctions, et non partager un compte de service Cloud Build optimisé à d'autres fins.

  • Votre organisation a désactivé l'utilisation du compte de service par défaut.

Activer les API

Cette fonctionnalité nécessite l'activation de l'API IAM.

Utilisez Google Cloud CLI pour activer les API nécessaires au déploiement d'une fonction Cloud Run ou utilisez la console Google Cloud :

gcloud services enable iam.googleapis.com

Configurer un compte de service

Ce document explique comment créer un compte de service et lui accorder les autorisations requises. Si vous souhaitez utiliser un compte de service existant, vous avez besoin de l'adresse e-mail du compte de service que vous prévoyez d'utiliser. Pour en savoir plus, consultez la section Configurer des comptes de service spécifiés par l'utilisateur.

Vous pouvez afficher vos comptes de service existants comme suit ou utiliser la console Google Cloud :

gcloud iam service-accounts list

Créer un compte de service

Utilisez la Google Cloud CLI pour créer votre compte de service ou utilisez la console Google Cloud :

gcloud iam service-accounts create SA_EMAIL

Remplacez SA_EMAIL par l'adresse e-mail de votre compte de service.

Octroyer des autorisations

Le compte de service que vous utilisez doit disposer des rôles suivants :

  • roles/logging.logWriter : requis pour stocker des journaux de compilation dans Cloud Logging.
  • roles/artifactregistry.writer : requis pour stocker les images de compilation dans Artifact Registry. Pour le comportement par défaut, le compte de service doit avoir accès aux dépôts nommés "gcf-artifacts" et "cloud-run-source-deploy". L'accès aux dépôts peut être défini dans la stratégie IAM du dépôt. Vous pouvez également fournir votre propre dépôt d'artefacts via le champ dockerRepository.
  • roles/storage.objectViewer : requis pour récupérer la source de la fonction dans le bucket Cloud Storage et stocker les images de compilation dans Container Registry. Pour le comportement par défaut, le compte de service doit avoir accès aux buckets nommés "run-sources-*", "gcf-v2-sources-*" et "gcf-v2-uploads-*". Pour ce faire, vous pouvez ajouter une condition IAM à l'attribution de rôle, par exemple : (resource.type == "storage.googleapis.com/Object" && (resource.name.startsWith("gcf-v2-sources-") || resource.name.startsWith("gcf-v2-uploads-") || resource.name.startsWith("run-sources-")))

Attribuez les rôles suivants à l'aide de Google Cloud CLI ou utilisez la console Google Cloud.

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
    --role=roles/logging.logWriter

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/artifactregistry.writer

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectViewer

Remplacez les éléments suivants :

Déployer une fonction avec un compte de service personnalisé

Vous pouvez utiliser la Google Cloud CLI pour déployer une fonction qui utilise un compte de service personnalisé pour Cloud Build :

  • L'option --build-service-account spécifie un compte de service IAM dont les identifiants seront utilisés pour l'étape de compilation. Si aucun compte de service personnalisé n'est fourni, la fonction utilise le compte de service par défaut du projet pour Cloud Build.
  • Vous pouvez éventuellement utiliser un pool privé que vous spécifiez à l'aide de l'option --build-worker-pool.

gcloud functions deploy FUNCTION_NAME \
   --gen2 \
   --region=REGION \
   --project=PROJECT_ID \
   --runtime=RUNTIME \
   --entry-point=CODE_ENTRYPOINT \
   --build-service-account=projects/PROJECT_ID/serviceAccounts/SA_EMAIL \
   --memory=256Mi \
   --trigger-http \
   --source=.

Remplacez les éléments suivants :