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 champdockerRepository
.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 :
- PROJECT_ID : ID de votre projet Google Cloud.
- SA_EMAIL : adresse e-mail de votre compte de service.
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 :
- FUNCTION_NAME : nom sous lequel vous avez déployé votre fonction.
- REGION : nom de la région Google Cloud dans laquelle vous souhaitez déployer votre fonction (par exemple,
us-west1
). - PROJECT_ID : ID de votre projet Google Cloud.
- RUNTIME : ID d'exécution d'une version d'exécution compatible pour exécuter votre fonction, par exemple,
nodejs18
. - CODE_ENTRYPOINT : point d'entrée de votre fonction dans votre code source. Il s'agit du code qui sera exécuté lors de l'exécution de votre fonction.
- SA_EMAIL : adresse e-mail de votre compte de service.