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 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 "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:
- 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 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:
- FUNCTION_NAME: El nombre con 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: El ID del entorno de ejecución de una
versión de 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.