Controles de Servicio de VPC es una Google Cloud función que te permite configurar un perímetro seguro para protegerte frente a la filtración externa de datos. En esta página se muestra cómo usar Controles de Servicio de VPC con grupos privados de Cloud Build para añadir seguridad adicional a tus compilaciones.
Antes de empezar
Para usar los ejemplos de línea de comandos de esta guía, instala y configura la CLI de Google Cloud.
Configura una conexión privada entre tu red de nube privada virtual y la red de VPC en la que residen los grupos privados. Para ver instrucciones, consulta el artículo sobre cómo configurar tu entorno para crear grupos privados.
Las compilaciones que se ejecuten dentro del perímetro de servicio no tendrán permiso para almacenar registros de compilación en el segmento de registros predeterminado de Cloud Storage. Antes de ejecutar la compilación, configura el archivo de configuración de compilación con una de las siguientes opciones:
- Para almacenar los registros de compilación en Cloud Logging, define
loggingMode
enCLOUD_LOGGING_ONLY
. - En tu proyecto privado, crea un segmento de registros de Cloud Storage para almacenar los registros de compilación. Para obtener más información, consulta Almacenar registros de compilación en un contenedor creado por el usuario.
- Para inhabilitar los registros de compilación, asigna el valor
NONE
aloggingMode
.
- Para almacenar los registros de compilación en Cloud Logging, define
Si tus compilaciones insertan imágenes y artefactos en Artifact Registry o Cloud Storage en un proyecto diferente, añade ese proyecto al mismo perímetro de servicio que el proyecto del que proceden tus compilaciones. Google Cloud
Opcional: Familiarízate con las configuraciones de los tipos de máquinas y la disponibilidad regional. Para obtener más información, consulta
workerconfig
en la documentación del esquema del archivo de configuración del grupo privado.
Para obtener los permisos que necesitas para configurar un perímetro de servicio, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu cuenta de servicio:
-
Lector de organización (
roles/resourcemanager.organizationViewer
) -
Editor del Administrador de contextos de acceso (
roles/accesscontextmanager.policyEditor
)
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Configurar un grupo privado en el perímetro de Controles de Servicio de VPC
Para usar Controles de Servicio de VPC con Cloud Build, primero debes crear y configurar un perímetro de servicio, lo que se hace a nivel de organización. Esta configuración asegura que se apliquen las comprobaciones de Controles de Servicio de VPC al usar Cloud Build y que los desarrolladores solo puedan ejecutar compilaciones que cumplan con Controles de Servicio de VPC.
Crear un perímetro de Controles de Servicio de VPC
Sigue la guía de inicio rápido de Controles de Servicio de VPC para hacer lo siguiente:
- Crea un perímetro de servicio.
Añade al perímetro el proyecto en el que tienes previsto crear el grupo privado.
Restringe la API Cloud Build.
Una vez que hayas configurado tu perímetro de servicio, se comprobarán todas las llamadas a la API de Cloud Build para asegurarse de que proceden del mismo perímetro.
Conceder acceso a la cuenta de servicio al perímetro de Controles de Servicio de VPC
En los siguientes casos, debes conceder acceso a la cuenta de servicio antigua de Cloud Build o Compute Engine al perímetro de Controles de Servicio de VPC para que tus compilaciones puedan acceder a los recursos del perímetro:
Si usas la cuenta de servicio antigua de Cloud Build o Compute Engine para iniciar compilaciones con un activador de compilación, la API Cloud Build o la línea de comandos.
Si utilizas cuentas de servicio especificadas por los usuarios para iniciar compilaciones mediante un activador de compilación.
No es necesario que concedas acceso a la cuenta de servicio antigua de Cloud Build o Compute Engine al perímetro de Controles de Servicio de VPC si usas cuentas de servicio especificadas por el usuario para iniciar compilaciones con la API Cloud Build o la línea de comandos.
Sigue estos pasos para conceder a la cuenta de servicio antigua de Cloud Build o Compute Engine acceso al perímetro de Controles de Servicio de VPC:
Anota la dirección de correo de la cuenta de servicio antigua:
Abre la página de gestión de identidades y accesos:
Selecciona el proyecto que has añadido al perímetro de servicio.
En la tabla de permisos, busca la dirección de correo correspondiente a la cuenta de servicio de Cloud Build antigua.
Actualiza la política de entrada del perímetro de servicio para permitir que la cuenta de servicio llame a las APIs de Cloud Build. Esta regla de entrada permite que la cuenta de servicio haga la llamada a la API
CreateBuild
. Para obtener más información sobre cómo definir políticas de entrada de Controles de Servicio de VPC, consulta los artículos Configurar políticas de entrada y salida y Reglas de entrada y salida.- ingressFrom: identities: - serviceAccount:SERVICE_ACCOUNT_EMAIL sources: - accessLevel: '*' ingressTo: operations: - serviceName: 'cloudbuild.googleapis.com' methodSelectors: - method: '*' resources: - 'projects/PROJECT_NUMBER'
Actualiza la política de perímetro ejecutando el siguiente comando y sustituyendo las variables por los valores correspondientes:
gcloud beta access-context-manager perimeters update PERIMETER_NAME \ --set-ingress-policies=INGRESS-FILENAME \ --policy=POLICY_ID
Donde:
SERVICE_ACCOUNT_EMAIL
: la dirección de correo de la cuenta de servicio.PROJECT_NUMBER
: el número del proyecto que has añadido al perímetro de Controles de Servicio de VPC.Google CloudPERIMETER_NAME
: el nombre de tu perímetro de Controles de Servicio de VPC.INGRESS-FILENAME
: el nombre del archivo de la política de entrada.POLICY_ID
: el ID de la política de acceso.
Opcional: Habilitar el acceso perimetral para máquinas de desarrollo
Como los controles de servicio de VPC se aplican a la API Cloud Build, las llamadas a la API Cloud Build fallan a menos que se originen dentro del perímetro de servicio. Por lo tanto, para gestionar compilaciones con la API Cloud Build, la interfaz de usuario de Cloud Build en la Google Cloud consola o la CLI de Google Cloud, elige una de las siguientes opciones:
Usa una máquina dentro del perímetro de Controles de Servicio de VPC. Por ejemplo, puedes usar una VM de Compute Engine o una máquina local conectada a tu red de VPC mediante una VPN.
Concede acceso al perímetro a los desarrolladores. Por ejemplo, puedes crear niveles de acceso que permitan el acceso al perímetro en función de la dirección IP o de la identidad del usuario. Para obtener más información, consulta el artículo sobre cómo permitir el acceso a recursos protegidos desde fuera de un perímetro.
Configurar restricciones de política de organización
Para asegurarte de que los controles de servicio de VPC se apliquen correctamente y de que solo se puedan usar los grupos privados especificados para crear compilaciones en una organización, define la constraints/cloudbuild.allowedWorkerPools
restricción de la política de la organización. Google Cloud
Puedes aplicar la política de la organización a toda la organización o a un proyecto o una carpeta de la organización. Por ejemplo, la política de tu organización puede especificar lo siguiente:
- Todas las compilaciones de la organización usan los grupos privados especificados.
- Todas las compilaciones de una carpeta usan los grupos privados especificados.
- Todas las compilaciones de un proyecto usan los grupos privados especificados.
Permisos de gestión de identidades y accesos: para gestionar las políticas de la organización, necesitas el rol Administrador de políticas de la organización (roles/orgpolicy.policyAdmin
). Para obtener instrucciones sobre cómo conceder un rol, consulta el artículo sobre cómo configurar el acceso a recursos de Cloud Build.
El comando gcloud resource-manager org-policies allow
define una política de la organización que requiere que las compilaciones de la organización solo
utilicen el grupo privado especificado:
gcloud resource-manager org-policies allow \
cloudbuild.allowedWorkerPools \
projects/PRIVATEPOOL_PROJECT_ID/locations/LOCATION/workerPools/PRIVATEPOOL_ID \
--organization ORGANIZATION_ID
Donde:
PRIVATEPOOL_ID
: el ID del grupo privado en el que se ejecutarán las compilaciones.PRIVATEPOOL_PROJECT_ID
: el ID del Google Cloud proyecto que contiene el grupo privado.LOCATION
: la región que contiene el grupo privado.ORGANIZATION_ID
: el ID de la organización en la que estás ejecutando compilaciones.
El comando admite los prefijos under:
y is
.
Para definir una política de la organización que requiera que todas las compilaciones de la organización usen cualquier grupo privado de esa organización, sigue estos pasos:
gcloud resource-manager org-policies allow \
cloudbuild.allowedWorkerPools under:organizations/ORGANIZATION_ID \
--organization ORGANIZATION_ID
Donde ORGANIZATION_ID
es el ID de la organización que contiene las piscinas privadas.
Para definir una política de la organización que requiera que todas las compilaciones de los proyectos de una carpeta usen cualquier grupo privado del proyecto especificado, sigue estos pasos:
gcloud resource-manager org-policies allow \
cloudbuild.allowedWorkerPools under:projects/PROJECT_ID \
--folder FOLDER_ID
donde PROJECT_ID
es el ID del proyecto que contiene los grupos privados y FOLDER_ID contiene los proyectos en los que ejecutas las compilaciones.
Para definir una política de la organización que requiera que todas las compilaciones de un proyecto usen cualquier grupo privado del proyecto especificado, sigue estos pasos:
gcloud resource-manager org-policies allow \
cloudbuild.allowedWorkerPools under:projects/PRIVATEPOOL_PROJECT_ID \
--project BUILD_PROJECT_ID
Donde PRIVATEPOOL_PROJECT_ID
es el ID del proyecto que contiene los grupos privados y BUILD_PROJECT_ID es el ID del proyecto en el que se ejecutan las compilaciones.
Ten en cuenta los siguientes aspectos al aplicar la restricción de política de organización constraints/cloudbuild.allowedWorkerPools
:
Si aplicas esta restricción de política de organización a un proyecto de Google Cloud , asegúrate de que todas las compilaciones del proyecto usen el grupo privado. Las compilaciones que intenten usar el grupo compartido predeterminado fallarán.
Si tu organización contiene servicios como funciones de App Engine o Cloud Run que usan Cloud Build de forma implícita, aplicar esta restricción de política de la organización puede provocar que estos servicios no funcionen como se espera. Google Cloud
Crear un grupo privado en el perímetro de servicio
Google Cloud consola
Abre la página Grupo de trabajadores en la Google Cloud consola:
Haz clic en Crear grupo privado.
Se muestra la página Crear grupo privado.
Introduce la siguiente información para crear tu grupo privado:
Nombre: introduce un nombre para tu grupo privado. Este valor solo puede contener caracteres alfanuméricos
/[a-z][0-9]/
o guiones-
. El nombre de tu grupo privado debe tener entre 1 y 63 caracteres.Región: selecciona la región en la que quieras crear el grupo privado.
Configuración de la máquina: configure lo siguiente:
Serie: elige una serie de máquinas.
Tipo de máquina: este ajuste muestra los tipos de máquina que puede usar el grupo de trabajadores en función de la serie de máquinas que hayas seleccionado. Los tipos de máquinas disponibles varían según la región.
Tamaño del disco: introduce el tamaño del disco de tu grupo privado. Especifica un valor igual o superior a 100 e igual o inferior a 4000. Si no proporcionas ningún valor, Cloud Build usará un tamaño de disco de 100.
Virtualización anidada: si has seleccionado una máquina de la serie C3, puedes habilitar la virtualización anidada. Esta función te permite ejecutar instancias de máquinas virtuales dentro de otras máquinas virtuales para que puedas crear tus propios entornos de virtualización.
En Tipo de red, selecciona Red privada y, a continuación, elige lo siguiente:
Proyecto: selecciona el Google Cloud ID de proyecto.
Red: selecciona tu red en el menú desplegable. Si no has creado ninguna red, consulta el artículo Crear y gestionar redes de VPC para saber cómo crear una.
Intervalo de IPs: introduce el intervalo de IPs internas que puede usar la red de productores de Cloud Build para asignar a las VMs que mantienen una conexión con repositorios privados.
Puede especificar el intervalo mediante la notación de enrutamiento de interdominios sin clases (CIDR) con el formato
STARTING_IP_ADDRESS/SUBNET_PREFIX_SIZE
. Por ejemplo,192.0.2.0/24
tiene una longitud de prefijo de 24. Los primeros 24 bits del intervalo de IP se usan como máscara de subred (192.0.2.0
), mientras que las posibles direcciones de host van de192.0.2.0
a192.0.2.255
.El valor de la longitud del prefijo no debe superar
/29
. Si no se especifica ningún valor para el intervalo, se asigna automáticamente el valor predeterminado/24
. Si no se especifica ningún valor para la longitud del prefijo, las direcciones IP se asignan automáticamente en la red de VPC emparejada. Si no se especifica ningún valor para la dirección IP, se le asigna automáticamente un intervalo dentro de la red VPC emparejada.Desmarca Asignar IPs externas para restringir el acceso a tu red privada.
Haz clic en Crear para crear tu grupo privado.
gcloud
Crea un archivo de configuración de grupo privado en formato YAML o JSON y define la marca
egressOption
enNO_PUBLIC_EGRESS
:privatePoolV1Config: networkConfig: egressOption: NO_PUBLIC_EGRESS peeredNetwork: PEERED_NETWORK workerConfig: diskSizeGb: 'PRIVATE_POOL_DISK_SIZE' machineType: PRIVATE_POOL_MACHINE_TYPE
Donde:
PEERED_NETWORK
es la URL del recurso de red de la red emparejada con la red del proveedor de servicios.PEERED_NETWORK
debe tener el formatoprojects/NETWORK_PROJECT_ID/global/networks/NETWORK_NAME
, dondeNETWORK_PROJECT_ID
es el ID del proyecto Google Cloud que contiene tu red de VPC yNETWORK_NAME
es el nombre de tu red de VPC.PRIVATE_POOL_MACHINE_TYPE
es el tipo de máquina de Compute Engine de la instancia del grupo privado. Para ver los tipos de máquinas admitidos, consulta el esquema del archivo de configuración del grupo privado.PRIVATE_POOL_DISK_SIZE
es el tamaño del disco de la instancia del grupo privado en GB. Especifica un valor igual o superior a 100 e igual o inferior a 1000. Si especifica0
, Cloud Build usará el valor predeterminado de 100.egressOption
es la marca para habilitar el perímetro de Controles de Servicio de VPC en tu grupo privado. Defínelo comoNO_PUBLIC_EGRESS
para crear tu grupo privado dentro del perímetro de Controles de Servicio de VPC.
Ejecuta el siguiente comando
gcloud
, dondePRIVATEPOOL_ID
es un identificador único de tu grupo privado,PRIVATEPOOL_CONFIG_FILE
es el nombre del archivo de configuración de tu grupo privado yREGION
es la región en la que quieres crear tu grupo privado:gcloud builds worker-pools create PRIVATEPOOL_ID --config-from-file PRIVATEPOOL_CONFIG_FILE --region REGION
Opcional: Habilita las llamadas por Internet pública en la red de VPC
Asegúrate de que tu red de VPC esté configurada para permitir la conectividad de red con el lugar donde se aloja tu repositorio (por ejemplo, github.com) con los siguientes ajustes:
Asegúrate de que el campo
egressOption
de tu archivo de configuración del grupo privado esté definido comoPUBLIC_EGRESS
o configura tus grupos privados para que usen una IP externa estática.La red de VPC en la que se ejecuta tu grupo privado se define como PeeredNetwork. Para permitir las llamadas a tu host de repositorio, asegúrate de que esta red de VPC permita el tráfico de salida público a tu host de repositorio. Para obtener información sobre cómo hacerlo, consulta rutas y reglas de cortafuegos.
Limitaciones
La protección de Controles de Servicio de VPC solo está disponible para las compilaciones que se ejecutan en grupos privados. No puedes usar Controles de Servicio de VPC con compilaciones que se ejecuten en grupos predeterminados.
Los activadores de Cloud Build Pub/Sub no se admiten cuando se usa Controles de servicio de VPC.
Siguientes pasos
- Consulta cómo ejecutar compilaciones en grupos privados.
- Consulta cómo configurar los casos prácticos de redes más habituales.