Cuenta de servicio personalizada para Cloud Build (1ª gen.)

Cloud Run Functions aprovecha Cloud Build cuando se compila y se implementa la función de Cloud Run. De forma predeterminada, Cloud Run Functions usa la cuenta de servicio predeterminada de Cloud Build como la principal para realizar tu compilación. A partir de junio de 2024, Cloud Build cambió el comportamiento predeterminado de la forma en que Cloud Build usa cuentas de servicio en proyectos nuevos. Este cambio se detalla en Cambio de cuenta de servicio de Cloud Build. Como resultado de este cambio, es posible que los proyectos nuevos que implementan funciones por primera vez usen una cuenta de servicio predeterminada de Cloud Build con permisos insuficientes para compilar una función. Si este cambio te afecta, puedes realizar una de las siguientes acciones:

  • Revisar la guía de Cloud Build sobre los cambios en la cuenta de servicio predeterminada y, también, inhabilitar estos cambios.

  • Agregar el rol de Cuenta de Cloud Build (roles/cloudbuild.builds.builder) a la cuenta de servicio predeterminada de Compute Engine.

  • Crear una cuenta de servicio de personalizada de Cloud Build para las implementaciones de funciones.

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 con Google Cloud CLI, la consola de Google Cloud o la API de Cloud Run 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:

  • Quieres tener más control sobre las cuentas de servicio que se agregarán al 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.

  • Tu organización inhabilitó el uso de la cuenta de servicio predeterminada.

Habilita las APIs

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

Usa Google Cloud CLI para habilitar las APIs necesarias para implementar una función de Cloud Run 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 cómo configurar 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 la cuenta de servicio.

Otorgar permisos

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

  • roles/logging.logWriter: Obligatorio para almacenar registros de compilación en Cloud Logging.
  • roles/artifactregistry.writer: Obligatorio para almacenar imágenes de compilación en Artifact Registry. Para el comportamiento predeterminado, la cuenta de servicio necesita acceso a los repositorios denominados "gcf-artifacts" y "cloud-run-source-deploy". El acceso a los repositorios se puede configurar en la política de IAM del repositorio. Como alternativa, puedes proporcionar tu propio repositorio de artefactos a través del campo dockerRepository.
  • roles/storage.objectViewer: Obligatorio para recuperar la fuente de función del bucket de Cloud Storage y almacenar imágenes de compilación en Container Registry. Para el comportamiento predeterminado, la cuenta de servicio necesita acceso a los buckets denominados "gcf-sources-*". Para lograrlo, agrega una condición de IAM a la concesión de roles, como la siguiente: (resource.type == "storage.googleapis.com/Object" && (resource.name.startsWith("gcf-sources-")))

  • roles/storage.objectAdmin: Obligatorio para Container Registry (ahora obsoleto). Necesita acceso a buckets denominados *.artifacts.PROJECT_ID.appspot.com para acceder a Container Registry.

Otorga los siguientes roles con Google Cloud CLI o usa la consola de 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

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

Reemplaza lo siguiente:

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 manera opcional, puedes usar un grupo privado, que especificas con la marca --build-worker-pool.

gcloud functions deploy FUNCTION_NAME \
   --no-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: