Cuando implementas el código fuente en Cloud Run, esa fuente se almacena en un bucket de Cloud Storage. A continuación, Cloud Build compila el código de forma automática en una imagen de contenedor y envía esa imagen a un registro de imágenes. Cada compilación se ejecuta en su propio trabajador. Cloud Run importa la imagen compilada cuando se realiza la implementación.
Si deseas personalizar el grupo de trabajadores de compilación que usa Cloud Build para un contexto de compilación seguro de los Controles del servicio de VPC, debes personalizar el grupo de trabajadores. Esta página es relevante para los desarrolladores de plataformas que implementan servicios o funciones de Cloud Run desde el código fuente con Google Cloud CLI y configuran grupos privados que usa Cloud Build. Las marcas de gcloud CLI de los grupos de trabajadores de compilación son compatibles con las implementaciones de código fuente (--source
) y no con las implementaciones de imágenes de contenedor (--image
).
Antes de comenzar
-
Enable the Cloud Run Admin API and Cloud Build APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.Después de habilitar la API de Cloud Run Admin, se crea de forma automática la cuenta de servicio predeterminada de Compute Engine.
Roles requeridos
Tú o tu administrador deben otorgar los siguientes roles de IAM a la cuenta del implementador y a la cuenta de servicio de Cloud Build.
Haz clic para ver los roles necesarios para la cuenta del implementador
Para obtener los permisos que necesitas para compilar e implementar desde la fuente, pídele a tu administrador que te otorgue los siguientes roles de IAM:
- Desarrollador de origen de Cloud Run (
roles/run.sourceDeveloper
) en tu proyecto - Consumidor de Service Usage (
roles/serviceusage.serviceUsageConsumer
) en tu proyecto - Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser
) en la identidad del servicio de Cloud Run
Haz clic para ver los roles necesarios para la cuenta de servicio de Cloud Build
Cloud Build usa automáticamente la cuenta de servicio predeterminada de Compute Engine como la cuenta de servicio predeterminada de Cloud Build para compilar tu código fuente y el recurso de Cloud Run, a menos que anules este comportamiento. Para que Cloud Build compile tus fuentes, pídele a tu administrador que otorgue el rol de Compilador de Cloud Run (roles/run.builder
) a la cuenta de servicio predeterminada de Compute Engine en tu proyecto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.builder
Reemplaza PROJECT_NUMBER
por el número de tu proyecto Google Cloudy PROJECT_ID
por el ID del proyecto proyecto Google Cloud. Para obtener instrucciones detalladas sobre cómo encontrar el ID y el número de tu proyecto, consulta Crea y administra proyectos.
El otorgamiento del rol de compilador de Cloud Run a la cuenta de servicio predeterminada de Compute Engine tarda un par de minutos en propagarse.
Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta los roles de IAM de Cloud Run y los permisos de IAM de Cloud Run. Si tu servicio de Cloud Run interactúa con las APIs deGoogle Cloud , como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información sobre cómo otorgar roles, consulta permisos de implementación y administra el acceso.
Protege tu compilación con grupos privados
De forma predeterminada, Cloud Build tiene acceso a Internet ilimitado durante el proceso de compilación. Si configuraste un perímetro de los Controles del servicio de VPC (VPC SC) y deseas limitar el acceso de la compilación solo a las dependencias almacenadas dentro del perímetro (por ejemplo, paquetes de Administración de socios de red), puedes usar el Función de grupos de trabajadores privados de Cloud Build.
En general, sigue estos pasos para configurar tu grupo privado:
- Crea tu grupo de trabajadores privados. Consulta Crea y administra grupos privados.
Configura el perímetro de los Controles del servicio de VPC. Consulta Usa los Controles del servicio de VPC.
Si tu grupo de trabajadores privados está en un proyecto diferente al de tu servicio de Cloud Run, debes otorgar al agente de servicio de Cloud Run (
service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
) el rol Usuario de grupo de trabajadores de Cloud Build (cloudbuild.workerPoolUser
) para que el servicio de Cloud Build pueda acceder al grupo de trabajadores.gcloud projects add-iam-policy-binding PRIVATE_POOL_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \ --role roles/cloudbuild.workerPoolUser
Reemplaza lo siguiente:
- PROJECT_NUMBER por el número del proyecto en el que se ejecuta el servicio.
- PRIVATE_POOL_PROJECT_ID por el ID del proyecto en el que se encuentra el grupo de trabajadores. Consulta Ejecuta compilaciones en un grupo privado para obtener más información.
Implementa tu servicio desde la fuente para compilar con un grupo privado:
gcloud
Para especificar un grupo privado que se compilará cuando se implemente desde el código fuente, usa la marca
--build-worker-pool
:gcloud run deploy SERVICE \ --source . \ --build-worker-pool WORKER_POOL
Reemplaza lo siguiente:
- SERVICE por el nombre de tu servicio
- WORKER_POOL por el nombre del grupo privado.
Si implementas una función, agrega la marca
--function
con el punto de entrada de la función desde tu código fuente.
Borrar grupos de trabajadores de compilación
Puedes borrar grupos de trabajadores de compilación para servicios existentes.
gcloud
Para borrar el grupo de trabajadores de Cloud Build para las implementaciones de origen, usa la marca --clear-build-worker-pool
:
gcloud run deploy SERVICE \ --source . \ --clear-build-worker-pool WORKER_POOL
Reemplaza lo siguiente:
- SERVICE por el nombre de tu servicio
- WORKER_POOL por el nombre del grupo privado que deseas borrar.
Si implementas una función, agrega la marca --function
con el punto de entrada de la función desde tu código fuente.