Usa los Controles del servicio de VPC

Controles del servicio de VPC es una Google Cloud función que te permite configurar un perímetro seguro para protegerte del robo de datos. En esta página, se muestra cómo usar los Controles del servicio de VPC con los grupos privados de Cloud Build para agregar seguridad adicional a tus compilaciones.

Antes de comenzar

  • Para usar los ejemplos de la línea de comandos de esta guía, instala y configura Google Cloud CLI.

  • 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 obtener instrucciones, consulta cómo configurar tu entorno para crear grupos privados.

  • Las compilaciones que se ejecuten dentro del perímetro de servicio no tendrán permisos para almacenar registros de compilación en el bucket 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:

  • Si tus compilaciones envían imágenes y artefactos a Artifact Registry o Cloud Storage en un proyecto Google Cloud diferente, agrega ese proyecto al mismo perímetro de servicio que el proyecto desde el que se originan tus compilaciones.

  • Opcional: Familiarízate con las configuraciones de los tipo de máquina 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, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu cuenta de servicio:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Configura un grupo privado en el perímetro de los Controles del servicio de VPC

Para usar los Controles del servicio de VPC con Cloud Build, primero debes crear y configurar un perímetro de servicio, que se hace a nivel de la organización. Esta configuración garantiza que se aplicarán las verificaciones de los Controles del servicio de VPC cuando se use Cloud Build y que los desarrolladores solo puedan ejecutar compilaciones que cumplan con los Controles del servicio de VPC.

Crea un perímetro de Controles del servicio de VPC

Sigue la Guía de inicio rápido de los Controles del servicio de VPC para realizar lo siguiente:

  1. Crear un perímetro de servicio
  2. Agrega el proyecto en el que planeas crear el grupo privado al perímetro.

  3. Restringe la API de Cloud Build

Después de configurar el perímetro de servicio, se verificarán todas las llamadas a la API de Cloud Build para garantizar que se originen en su interior.

Otorga acceso a la cuenta de servicio al perímetro de los Controles del servicio de VPC

En los siguientes casos, debes otorgar acceso a la cuenta de servicio heredada de Cloud Build o Compute Engine al perímetro de los Controles del servicio de VPC para que tus compilaciones puedan acceder a los recursos dentro del perímetro:

No es necesario que otorgues acceso a la cuenta de servicio heredada de Cloud Build o Compute Engine al perímetro de los Controles del servicio de VPC si usas cuentas de servicio especificadas por el usuario para iniciar compilaciones con la API de Cloud Build o la línea de comandos.

Sigue estos pasos para otorgar acceso a la cuenta de servicio heredada de Cloud Build o Compute Engine al perímetro de los Controles del servicio de VPC:

  1. Toma nota de la dirección de correo electrónico de la cuenta de servicio heredada:

    1. Abrir la página de IAM

      Abrir la página IAM

    2. Selecciona el proyecto que agregaste al perímetro de servicio.

    3. En la tabla de permisos, busca la dirección de correo electrónico correspondiente a la cuenta de servicio heredada de Cloud Build.

  2. 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 realice la llamada a la API de CreateBuild. Para obtener más información sobre cómo configurar las políticas de entrada de los Controles del servicio de VPC, consulta Configura 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'
    
  3. Actualiza la política del perímetro ejecutando el siguiente comando y reemplazando las variables por los valores adecuados:

    gcloud beta access-context-manager perimeters update PERIMETER_NAME \
        --set-ingress-policies=INGRESS-FILENAME \
        --policy=POLICY_ID
    

Aquí:

  • SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico de la cuenta de servicio.
  • PROJECT_NUMBER: Es el número del proyectoGoogle Cloud que agregaste al perímetro de los Controles del servicio de VPC.
  • PERIMETER_NAME: Es el nombre de tu perímetro de los Controles del servicio de VPC.
  • INGRESS-FILENAME: Es el nombre de tu archivo de política de entrada.
  • POLICY_ID: Es el ID de la política de acceso.

Opcional: Habilita el acceso al perímetro para máquinas de desarrollo

Las verificaciones de los Controles del servicio de VPC se aplican a la API de Cloud Build, por lo que las llamadas a esta fallan si no se originan en el perímetro de servicio. Por lo tanto, para administrar compilaciones con la API de Cloud Build, la IU de Cloud Build en la consola de Google Cloud o Google Cloud CLI, elige una de las siguientes opciones:

  • Usa una máquina que esté dentro del perímetro de los Controles del servicio de VPC. Por ejemplo, puedes usar una VM de Compute Engine o una máquina local conectada a tu red de VPC a través de una VPN.

  • Otorga acceso al perímetro a los desarrolladores. Por ejemplo, puedes crear niveles de acceso que habiliten el acceso al perímetro según la dirección IP o la identidad de usuario. Para obtener más información, consulta Permite el acceso a recursos protegidos desde fuera del perímetro.

Configura restricciones de políticas de la organización

Para asegurarte de que las verificaciones de los Controles del servicio de VPC se apliquen correctamente y de que restrinjas las compilaciones en una organización de Google Cloud para que solo usen los grupos privados especificados, establece la restricción de la política de la organizaciónconstraints/cloudbuild.allowedWorkerPools. 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, tu política de la 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 IAM: Para administrar las políticas de la organización, necesitas el rol de administrador de políticas de la organización (roles/orgpolicy.policyAdmin). Si deseas obtener instrucciones para otorgar un rol, consulta Configura el acceso a los recursos de Cloud Build.

El comando gcloud resource-manager org-policies allow establece una política de la organización que requiere que las compilaciones de la organización solo usen el grupo privado especificado:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools \
     projects/PRIVATEPOOL_PROJECT_ID/locations/LOCATION/workerPools/PRIVATEPOOL_ID \
     --organization ORGANIZATION_ID

Aquí:

  • PRIVATEPOOL_ID: Es el ID del grupo privado para ejecutar compilaciones.

  • PRIVATEPOOL_PROJECT_ID: Es el ID del Google Cloud proyecto que contiene el grupo privado.

  • LOCATION: Es la región que contiene el grupo privado.

  • ORGANIZATION_ID: El ID de la organización en la que ejecutas las compilaciones.

El comando admite los prefijos under: y is.

Para establecer 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, haz lo siguiente:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:organizations/ORGANIZATION_ID \
     --organization ORGANIZATION_ID

Aquí, ORGANIZATION_ID es el ID de la organización que contiene los grupos privados.

Para establecer 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, haz lo siguiente:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:projects/PROJECT_ID \
     --folder FOLDER_ID

Aquí, 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 establecer una política de la organización que requiera que todas las compilaciones de un proyecto usen cualquier grupo privado en el proyecto especificado, haz lo siguiente:

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:projects/PRIVATEPOOL_PROJECT_ID \
     --project BUILD_PROJECT_ID

Aquí, 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 ejecutas las compilaciones.

Ten en cuenta las siguientes consideraciones cuando apliques la restricción de política de la organización constraints/cloudbuild.allowedWorkerPools:

  • Si aplicas esta restricción de política de la organización a un proyecto 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 Google Cloud contiene servicios como App Engine o Cloud Run Functions que usan Cloud Build de forma implícita, aplicar esta restricción de política de la organización puede hacer que estos servicios no funcionen según lo esperado.

Crea un grupo privado en el perímetro de servicio

Consola de Google Cloud

  1. Abre la página Grupo de trabajadores en la consola de Google Cloud :

    Abrir la página de grupos de trabajadores de Cloud Build

  2. Haz clic en Crear grupo privado.

    Se mostrará la página Crear grupo privado.

    Ingresa la siguiente información para crear tu grupo privado:

  3. Nombre: Ingresa 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.

  4. Región: Selecciona la región en la que deseas crear el grupo privado.

  5. Configuración de la máquina: Configura lo siguiente:

    1. Serie: Elige una serie de máquinas.

    2. Tipo de máquina: Este parámetro de configuración muestra los tipos de máquinas, según la serie de máquinas que seleccionaste, que puede usar el grupo de trabajadores. Los tipos de máquinas disponibles varían según la región.

    3. Tamaño del disco: Ingresa un tamaño de disco para tu grupo privado. Especifica un valor mayor o igual que 100 y menor o igual que 4,000. Si no proporcionas un valor, Cloud Build usa un tamaño de disco de 100.

    4. Virtualización anidada: Si seleccionaste una máquina de la serie C3, puedes habilitar la virtualización anidada. Esta función te permite ejecutar instancias de máquina virtual (VM) dentro de otras VMs para que puedas crear tus propios entornos de virtualización.

  6. En Tipo de red, selecciona Red privada y, luego, elige lo siguiente:

    1. Proyecto: Selecciona el Google Cloud ID de tu proyecto.

    2. Red: Selecciona tu red en el menú desplegable. Si no creaste una red, consulta Crea y administra redes de VPC para obtener información sobre cómo crear una.

    3. Rango de IP: Ingresa el rango de IP interna que la red del productor de Cloud Build puede usar para asignar a las VMs que mantienen una conexión con repositorios privados.

      Puedes especificar el rango con la notación de enrutamiento de enrutamiento entre dominios sin clases (CIDR) en 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 rango de IP se usan como máscara de subred (192.0.2.0), mientras que las posibles direcciones de host varían de 192.0.2.0 a 192.0.2.255.

      El valor de la longitud del prefijo no debe superar /29. Si no se especifica ningún valor para el rango, se asigna automáticamente un valor predeterminado de /24. Si no se especifica ningún valor para la longitud del prefijo, las direcciones IP se asignan automáticamente dentro de la red de VPC interconectada. Si no se especifica ningún valor para la dirección IP, se le asigna automáticamente un rango dentro de la red de VPC interconectada.

    4. Borra Asignar IPs externas para restringir el acceso a tu red privada.

  7. Haz clic en Crear para crear tu grupo privado.

gcloud

  1. Crea un archivo de configuración de grupo privado en formato YAML o JSON y establece la marca egressOption en NO_PUBLIC_EGRESS:

    privatePoolV1Config:
      networkConfig:
        egressOption: NO_PUBLIC_EGRESS
        peeredNetwork: PEERED_NETWORK
      workerConfig:
        diskSizeGb: 'PRIVATE_POOL_DISK_SIZE'
        machineType: PRIVATE_POOL_MACHINE_TYPE
    

    Aquí:

    • PEERED_NETWORK es la URL del recurso de red de la red que realiza un intercambio de tráfico con la red del proveedor de servicios. PEERED_NETWORK debe tener el formato projects/NETWORK_PROJECT_ID/global/networks/NETWORK_NAME, en el que NETWORK_PROJECT_ID es el ID del proyecto de Google Cloud que contiene tu red de VPC y NETWORK_NAME es el nombre de tu red de VPC.
    • PRIVATE_POOL_MACHINE_TYPE es el tipo de máquina de Compute Engine para la instancia del grupo privado. Para conocer los tipos de máquinas compatibles, consulta Esquema del archivo de configuración del grupo privado.
    • PRIVATE_POOL_DISK_SIZE es el tamaño del disco para la instancia del grupo privado en GB. Especifica un valor superior o igual a 100 y menor o igual que 1,000. Si especificas 0, Cloud Build usa el valor predeterminado de 100.
    • egressOption es la marca para habilitar el perímetro de los Controles del servicio de VPC en tu grupo de trabajadores. Configúralo como NO_PUBLIC_EGRESS para crear tu grupo de trabajadores dentro del perímetro de los Controles del servicio de VPC.
  2. Ejecuta el siguiente comando de gcloud, en el que PRIVATEPOOL_ID es un identificador único para tu grupo privado, PRIVATEPOOL_CONFIG_FILE es el nombre de tu archivo de configuración del grupo privado y REGION es la región en la que deseas crear tu grupo privado:

    gcloud builds worker-pools create PRIVATEPOOL_ID --config-from-file PRIVATEPOOL_CONFIG_FILE --region REGION
    

Opcional: Habilita llamadas por Internet públicas en la red de VPC

Para habilitar tu red de VPC para permitir la conectividad de red a la ubicación en la que se aloja tu repositorio (p.ej., github.com), configura los siguientes parámetros:

Limitaciones

  • La protección de los Controles del servicio de VPC solo está disponible para las compilaciones que se ejecutan en grupos privados. No puedes usar los Controles del servicio de VPC con las compilaciones que se ejecutan en grupos predeterminados.

  • Los activadores de Cloud Build Pub/Sub no son compatibles cuando se usan los Controles del servicio de VPC.

¿Qué sigue?