Cuenta de servicio personalizada para Cloud Build
Cloud Run Functions aprovecha Cloud Build cuando se compila e implementa Cloud Run Functions. 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 julio 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 hacer una de las siguientes acciones:
Revisa la guía de Cloud Build sobre los cambios en la cuenta de servicio predeterminada y, también, inhabilita estos cambios.
Agrega el rol de Cuenta de Cloud Build (
roles/cloudbuild.builds.builder
) a la cuenta de servicio predeterminada de Compute Engine.Crea una cuenta de servicio de Cloud Build personalizada 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 mediante 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:
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.
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 API necesarias a fin de implementar una función de Cloud Run 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 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 llamados "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 campodockerRepository
.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 "run-sources-*", "gcf-v2-sources-*" y "gcf-v2-uploads-*". Para ello, se puede agregar una condición de IAM a la concesión de roles, como la siguiente:(resource.type == "storage.googleapis.com/Object" && (resource.name.startsWith("gcf-v2-sources-") || resource.name.startsWith("gcf-v2-uploads-") || resource.name.startsWith("run-sources-")))
Otorga los siguientes roles con Google Cloud CLI o 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
Reemplaza lo siguiente:
- PROJECT_ID: El ID del proyecto de Google Cloud..
- SA_EMAIL: Es la dirección de correo electrónico de tu cuenta de servicio.
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 especificas con la marca
--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=.
Reemplaza lo siguiente:
- FUNCTION_NAME: El nombre en el que implementaste la función.
- REGION: el nombre de la región de Google Cloud en la que deseas implementar tu función
(por ejemplo,
us-west1
). - PROJECT_ID: El ID del proyecto de Google Cloud..
- RUNTIME: Es el ID del entorno de ejecución de una versión del entorno de ejecución compatible para ejecutar tu función, por ejemplo,
nodejs18
. - CODE_ENTRYPOINT: el punto de entrada a tu función en tu código fuente. Este es el código que se ejecutará cuando se ejecute tu función.
- SA_EMAIL: Es la dirección de correo electrónico de tu cuenta de servicio.