Usa los Controles del servicio de VPC

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

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.

Antes de comenzar

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

Configurar 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

Permisos de administración de identidades y accesos: Para configurar un perímetro de servicio, necesitas las funciones de visualizador de la organización y editor de Access Context Manager. Para obtener instrucciones sobre cómo otorgar estas funciones, consulta Configura el acceso a los recursos de Cloud Build.

Para crear un perímetro de Controles del servicio de VPC, sigue estos pasos:

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 en el 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 a la cuenta de servicio de Cloud Build acceso al perímetro de los Controles del servicio de VPC

Cloud Build usa la cuenta de servicio de Cloud Build o las cuentas de servicio especificadas por el usuario para ejecutar compilaciones en tu nombre. En los siguientes casos, debes otorgar acceso a la cuenta de servicio al perímetro de los Controles del servicio de VPC para que tus compilaciones accedan a los recursos dentro del perímetro:

No es necesario que le otorgues a la cuenta de servicio acceso 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.

Realiza los siguientes pasos para otorgar a la cuenta de servicio de Cloud Build acceso al perímetro de los Controles del servicio de VPC:

  1. Toma nota de la dirección de correo electrónico de tu cuenta de servicio de Cloud Build o de la cuenta de servicio especificada por el usuario. Sigue estos pasos para obtener la dirección de correo electrónico de tu cuenta de servicio de Cloud Build:

    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, ubica la dirección de correo electrónico que termina en @cloudbuild.gserviceaccount.com y anótala. Esta es tu cuenta de servicio 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 API de Cloud Build. Esta regla de entrada permite que la cuenta de servicio realice la llamada a la API 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 mediante la ejecución del siguiente comando, reemplazando las variables con los valores adecuados:

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

Reemplaza las variables anteriores por lo siguiente:

  • SERVICE_ACCOUNT_EMAIL: Es la dirección de correo electrónico de tu cuenta de servicio de Cloud Build o de la cuenta de servicio especificada por el usuario.
  • PROJECT_NUMBER: Es el número del proyecto de 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 del archivo de la política de entrada.
  • POLICY_ID: 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 o la CLI de Google Cloud, 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 mediante 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 la política de la organización

Para asegurarte de que las verificaciones de los Controles del servicio de VPC se apliquen de forma correcta y que restrinjas las compilaciones en una organización de Google Cloud de modo que solo usen los grupos privados especificados, establece la restricción de la política de la organización constraints/cloudbuild.allowedWorkerPools. Puedes aplicar la política de la organización a toda la organización, o bien 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 en 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 la función de Administrador de políticas de la organización (roles/orgpolicy.policyAdmin). Para obtener instrucciones sobre cómo otorgar una función, 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

Reemplaza los valores de marcador de posición en los comandos anteriores por la siguiente información:

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

  • PRIVATEPOOL_PROJECT_ID: El ID del proyecto de Cloud 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.

A fin de establecer la política de la organización que requiere que todas las compilaciones en la organización usen cualquier grupo privado en esa organización, haz lo siguiente:

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

En este comando, 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 en los proyectos de una carpeta usen cualquier grupo privado en el proyecto especificado, sigue estos pasos:

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

En este comando, PROJECT_ID es el ID del proyecto que contiene los grupos privados, y FOLDER_ID contiene los proyectos en los que ejecutas las compilaciones.

Si quieres 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, sigue estos pasos:

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

En este comando, 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 la política de la organización constraints/cloudbuild.allowedWorkerPools:

  • Si aplicas esta restricción de política de la organización a un proyecto de 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 de Google Cloud contiene servicios como App Engine o Cloud Functions que usan Cloud Build de manera implícita, la restricción de las políticas de la organización puede hacer que estos servicios no funcionen como se espera.

Crear un grupo privado en el perímetro de servicio

Console

  1. En Google Cloud Console, abre la página del grupo de trabajadores:

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

  2. Selecciona el proyecto en el que deseas crear el grupo privado.

  3. En la página Grupo de trabajadores, haz clic en Crear.

  4. En el panel lateral Crear grupo privado, realiza lo siguiente:

    1. Ingresa un nombre para el grupo privado.

    2. Selecciona la región en la que deseas crear el grupo privado.

    3. Selecciona el tipo de máquina de Compute Engine que deseas usar para tu grupo privado.

    4. Ingresa el número del proyecto de Cloud en el que creaste la red de VPC.

    5. Ingresa el nombre de tu red de VPC

    6. Desmarca Asignar IP externas.

    7. Haga clic en Crear.

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
    

    Donde:

    • 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 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 de grupo privado. Para los tipos de máquina compatibles, consulta Esquema del archivo de configuración del grupo privado.
    • PRIVATE_POOL_DISK_SIZE es el tamaño del disco para la instancia de grupo privado en GB. Especifica un valor mayor o igual que 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 de tu grupo privado, PRIVATEPOOL_CONFIG_FILE es el nombre de tu archivo de configuración de 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

Asegúrese de que su red de VPC esté configurada para permitir la conectividad de red a la ubicación en la que se aloja su repositorio (p. ej., github.com) con la siguiente configuración:

  1. En tu archivo de configuración de grupo privado, asegúrate de que el campo egressOption esté configurado en NO_PUBLIC_EGRESS.

  2. La red de VPC en la que se ejecuta tu grupo privado se define como una PeeredNetwork. Para permitir llamadas al host de tu repositorio, asegúrate de que esta red de VPC permita la salida pública al host del repositorio. Para obtener información sobre cómo hacerlo, consulta Rutas y reglas de firewall.

Ejecuta compilaciones en un grupo privado dentro del perímetro de servicio

Las compilaciones que se ejecutan dentro del perímetro de servicio no tienen acceso a la Internet pública, por eso deberás realizar algunas acciones antes de ejecutar una compilación.

Envía imágenes y artefactos de compilación

Si tus compilaciones envían imágenes y artefactos a Container Registry, Artifact Registry o Cloud Storage que están en un proyecto de Cloud diferente, asegúrate de agregar ese proyecto al mismo perímetro de servicio que el proyecto desde el que se originaron tus compilaciones.

Crea un bucket de registros

La ejecución de la compilación dentro del perímetro de servicio no tendrá permisos para almacenar registros de compilación en el bucket de registros predeterminado de Cloud Storage. Elige una de las siguientes opciones:

Ejecuta compilaciones

Ejecuta tu compilación según las instrucciones que se indican en Ejecuta compilaciones en un grupo privado.

¿Qué sigue?