Cuenta de servicio personalizada para Cloud Build

Descripción general

Cloud Functions aprovecha Cloud Build cuando se compila e implementa la función de Cloud Functions. De forma predeterminada, Cloud Functions usa la cuenta de servicio predeterminada de Cloud Build como la principal para realizar tu compilación. En este documento, se describe cómo pasar una cuenta de servicio creada por el usuario para que la use Cloud Build cuando implementes tu función.

Puedes implementar funciones con cuentas de servicio personalizadas mediante Google Cloud CLI, la consola de Google Cloud o la API de Cloud Functions.

Estas son algunas situaciones en las que tal vez quieras proporcionar una cuenta de servicio diferente para que se use cuando Cloud Build compile tu función:

  • Deseas tener más control sobre qué cuentas de servicio agregar a tu perímetro de VPC-SC.

  • Deseas que Cloud Build se ejecute con permisos diferentes de los que tiene la cuenta de servicio predeterminada sin tener que revocar cada permiso de forma individual.

  • Deseas configurar permisos detallados de Cloud Build específicamente para tus funciones, no compartir una cuenta de servicio de Cloud Build que esté optimizada para otros fines.

Habilita APIs

Esta función requiere que se habilite la API de IAM.

Usa Google Cloud CLI para habilitar las API necesarias a fin de implementar una función de Cloud Functions o usa la consola de Google Cloud:

gcloud services enable iam.googleapis.com

Configura la cuenta de servicio

En este documento, se describe cómo crear una cuenta de servicio nueva y otorgar los permisos necesarios. Si deseas usar una cuenta de servicio existente, necesitas la dirección de correo electrónico de la cuenta de servicio que planeas usar. Consulta Configura cuentas de servicio especificadas por el usuario para obtener más detalles.

Puedes ver tus cuentas de servicio existentes de la siguiente manera o usar la consola de Google Cloud:

gcloud iam service-accounts list

Crear una cuenta de servicio.

Usa Google Cloud CLI para crear tu cuenta de servicio o usa la consola de Google Cloud:

gcloud iam service-accounts create SA_EMAIL

Reemplaza SA_EMAIL por la dirección de correo electrónico de tu cuenta de servicio.

Otorgar permisos

La cuenta de servicio que uses necesitará los siguientes roles:

Otorga los siguientes roles mediante Google Cloud CLI o usa la consola de Google Cloud.

gcloud projects add-iam-policy-binding SA_PROJECT_ID \
--member=user:DEPLOYING_USER_EMAIL \
--role=roles/iam.serviceAccountUser

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

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto de Google Cloud..
  • SA_EMAIL: La dirección de correo electrónico de la cuenta de servicio.
  • SA_PROJECT_ID: El ID del proyecto de tu cuenta de servicio.
  • DEPLOYING_USER_EMAIL: Es la dirección de correo electrónico del usuario que implementa la función.

Implementa una función con una cuenta de servicio personalizada

Puedes usar Google Cloud CLI a fin de implementar una función que use una cuenta de servicio personalizada para Cloud Build:

  • La marca --build-service-account especifica una cuenta de servicio de IAM cuyas credenciales se usarán para el paso de compilación. Si no se proporciona una cuenta de servicio personalizada, la función usa la cuenta de servicio predeterminada del proyecto para Cloud Build.
  • De forma opcional, puedes usar un grupo privado que especifiques con la marca --build-worker-pool.

gcloud beta 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=.

Reemplaza lo siguiente: