Accede a recursos externos en una red privada a través de una IP externa estática

En esta página, se explica cómo puedes configurar tus grupos privados para acceder a recursos externos a través de una IP externa estática.


Para seguir la guía paso a paso sobre esta tarea de forma directa en la consola de Google Cloud, haz clic en Guiarme:

Guiarme


Antes de comenzar

  • Habilita las API de Cloud Build, Compute Engine, and Service Networking.

    Habilita las API

  • Para obtener los permisos que necesitas para configurar una conexión privada, pídele a tu administrador que te otorgue el rol de IAM Administrador de red de Compute Engine (roles/compute.networkAdmin) en el proyecto de Cloud en el que reside la red de VPC. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

  • Para usar los comandos de gcloud en esta página, instala Google Cloud CLI.

Crear red de VPC

Console

Para crear una red de VPC con la consola de Google Cloud, completa los siguientes pasos:

  1. Abre la página Redes de VPC en la consola de Google Cloud.

    Ir a las redes de VPC

  2. Haz clic en Crear red de VPC para crear una red nueva.

    Verás la página Crea una red de VPC.

  3. Ingresa un nombre para la red.

  4. En Modo de creación de subredes, selecciona Automático.

  5. Si quieres personalizar aún más otros campos, consulta Crea y administra redes de VPC. De lo contrario, deja todos los campos como están.

  6. Haz clic en Crear para crear tu red de VPC.

    Después de hacer clic en Crear, verás tu red de VPC nueva en la página Redes de VPC.

gcloud

Para crear una red de VPC con la herramienta de línea de comandos de gcloud, ingresa el siguiente comando en la terminal, en el que NETWORK_NAME es el nombre de la red de VPC:

gcloud compute networks create NETWORK_NAME \
  --subnet-mode=auto

Después de hacer clic en Crear, verás tu red de VPC nueva en la página Redes de VPC.

Si quieres obtener más información para crear y administrar redes de VPC, consulta Crea y administra redes de VPC.

Crea una conexión privada

Console

Para crear una conexión privada entre tu red de VPC y la red del productor de servicios, completa los siguientes pasos:

  1. Abre la página Redes de VPC en la consola de Google Cloud.

    Ir a las redes de VPC

  2. Haz clic en el nombre de la red.

    Verás la página Detalles de la red de VPC.

  3. Haz clic en la pestaña Conexión privada a servicios.

    1. Selecciona la pestaña Rangos de IP asignados para los servicios.

    2. Haz clic en Asigna rangos de IP.

      Verás el cuadro emergente Asignar un rango de IP internas.

      1. Ingresa un Nombre para tu rango de IP.

      2. En Rango de IP, selecciona Automático.

      3. En el campo Longitud del prefijo, ingresa la longitud de un prefijo para tu red.

      4. Haz clic en Asignar para asignar el rango de IP.

    3. Selecciona la pestaña Conexiones privadas a servicios.

    4. Haz clic en Create Connection.

      Verás la ventana emergente Crear una conexión privada.

      1. En Asignación asignada, selecciona tu rango de IP.

      2. Haz clic en Conectar.

      Ahora verás tu conexión en la tabla que se encuentra en la pestaña Conexiones privadas a servicios.

      Haz clic en Habilitar (Exportar ruta personalizada) a fin de asegurarte de que las rutas para VPC se apliquen a la red en la que se ejecutan tus instancias de grupo privado.

Ya configuraste tu red.

gcloud

Para crear una conexión privada entre tu red de VPC y la red del productor de servicios, completa los siguientes pasos:

  1. Ingresa el siguiente comando en la terminal para asignar un rango de IP al servicio:

        gcloud compute addresses create RESERVED_RANGE_NAME \
          --global \
          --prefix-length=PREFIX_LENGTH \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    Aquí:

    • RESERVED_RANGE_NAME es el nombre de tu rango asignado. Por ejemplo, my-allocated-range
    • PREFIX_LENGTH es la longitud del prefijo de tu red. La longitud de tu prefijo debe ser /24 o inferior, como /22, /21, etcétera.
    • VPC_NETWORK es el nombre de la red de VPC, como my-vpc-network.
    • PROJECT_ID es el ID del proyecto que contiene tu red de VPC.
  2. Ingresa el siguiente comando en la terminal para crear una conexión privada:

        gcloud services vpc-peerings connect \
          --service=servicenetworking.googleapis.com \
          --ranges=RESERVED_RANGE_NAME \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    Aquí:

    • RESERVED_RANGE_NAME es el nombre del rango asignado que creaste en el paso anterior.
    • VPC_NETWORK es el nombre de la red de VPC, como my-vpc-network.
    • PROJECT_ID es el ID del proyecto que contiene tu red de VPC.
  3. Ingresa el siguiente comando en la terminal para asegurarte de que las rutas de VPC se apliquen a la red en la que se ejecutan las instancias de tu grupo privado:

        gcloud compute networks peerings update servicenetworking-googleapis-com \
          --export-custom-routes \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    Aquí:

    • VPC_NETWORK es el nombre de la red de VPC, como my-vpc-network.
    • PROJECT_ID es el ID del proyecto que contiene tu red de VPC.

Ya configuraste tu red.

Si quieres obtener más información para configurar una red, consulta Configura una conexión privada entre tu red de VPC y la red del productor de servicios.

Crea un grupo privado

Console

Para crear un grupo privado con la consola de Google Cloud, completa los siguientes pasos:

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

    Abrir la página Grupo 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.

    Verás el panel Crear grupo privado.

  4. En el panel lateral Crear grupo privado, ingresa la siguiente información:

    1. Ingresa un Nombre para el grupo privado.

    2. Selecciona una Región en el menú desplegable.

    3. En Red, ingresa la siguiente información:

    • Project (Proyecto): Ingresa el ID o número del proyecto.
    • Red: Ingresa el nombre de tu red de VPC.
    1. (Opcional) Desmarca la casilla Asignar IP externas para la configuración de red más restringida.

Acabas de crear un grupo privado.

gcloud

Para crear un grupo privado con la herramienta de línea de comandos de gcloud, ingresa el siguiente comando en la terminal:

      gcloud builds worker-pools create PRIVATEPOOL_ID \
        --project=PRIVATEPOOL_PROJECT_ID \
        --region=REGION \
        --peered-network=PEERED_NETWORK \
        --no-public-egress

Aquí:

  • PRIVATEPOOL_ID es el identificador único de tu grupo privado.
  • PRIVATEPOOL_PROJECT_ID es el ID del proyecto de Google Cloud en el que deseas crear tu grupo privado.
  • REGION es una de las regiones compatibles.
  • PEERED_NETWORK es la URL del recurso de red.
  • --no-public-egress: Si se configura esta marca, el grupo privado se crea sin una dirección IP externa.

Acabas de crear un grupo privado.

Para obtener más información sobre cómo crear y administrar grupos privados, consulta Crea y administra grupos privados.

Accede a recursos externos en una red privada

De forma predeterminada, las direcciones IP externas asociadas con los grupos privados de Cloud Build no son estáticas ni configurables. Google Cloud los asigna. Si deseas configurar tus grupos privados para acceder a recursos externos desde tu red privada con una IP externa estática, debes configurar una máquina virtual (VM) en tu proyecto para que actúe como una puerta de enlace NAT autoadministrada que redireccione las solicitudes a la Internet pública. A continuación, debes configurar rutas personalizadas para reenviar estas solicitudes a tu VM y asegurarte de que las rutas se intercambien con el proyecto de herramientas de redes de servicio.

En esta sección, se describe cómo configurar tus grupos privados para acceder a recursos externos a través de una IP externa estática mediante los siguientes pasos:

  1. Crea una secuencia de comandos de inicio para configurar la VM a fin de usar un proxy en el tráfico enrutado a la VM y enmascarar ese tráfico como si se originara en su dirección IP:

    #! /bin/bash
    set -e
    
    sysctl -w net.ipv4.ip_forward=1
    IFACE=$(ip -brief link | tail -1 | awk  {'print $1'})
    iptables -t nat -A POSTROUTING -o "$IFACE" -j MASQUERADE
    
  2. Configura una VM en la misma VPC que el grupo privado con una regla para permitir que las solicitudes se envíen mediante proxy a través de la VPC:

    gcloud compute instances create VM_NAME \
      --image-project=ubuntu-os-cloud --image-family=ubuntu-2204-lts \
      --network=NETWORK_NAME \
      --private-network-ip=INTERNAL_IP --can-ip-forward \
      --zone=ZONE \
      --subnet=SUBNETWORK \
      --tags=NAT_TAG  \
      --metadata-from-file=startup-script=STARTUP_SCRIPT
    

    Aquí:

    • VM_NAME es el nombre que deseas proporcionarle a tu VM.
    • NETWORK_NAME es el nombre de la red que creaste en la sección anterior.
    • INTERNAL_IP es cualquier dirección IP interna válida dentro del rango de la subred de la región de tu VM. Por ejemplo, 10.128.0.2
    • ZONE es la zona asociada con tu red, como us-central1-a.
    • SUBNETWORK es el nombre de tu subred (opcional). Puedes encontrar el nombre de tu subred en la REST equivalente para la subred en el siguiente formato: projects/project-id/regions/region/subnetworks/subnetwork-name. Si seleccionaste Automático en Modo de conexión de subred cuando creas una red de VPC, no es necesario que especifiques este campo.
    • NAT_TAG es el nombre de la etiqueta de la puerta de enlace NAT que te permite enrutar solicitudes de forma condicional, en función de si tienen o no una etiqueta de esta VM. Puedes especificar cualquier nombre para la etiqueta.
    • STARTUP_SCRIPT es el nombre de la secuencia de comandos de inicio que creaste en el paso anterior. Por ejemplo, startup-script-example.sh En este ejemplo, se usa la marca --metadata-from-file para pasar el contenido de la secuencia de comandos de inicio que especificaste a una clave llamada startup-script.

    Después de ejecutar este comando, verás un resultado que contiene el valor de la IP externa. Toma nota del valor de la IP externa. Todo el tráfico del grupo privado al recurso externo proviene de esta dirección. Puedes optar por usar esta dirección para realizar más configuraciones, como configurar reglas de firewall en tu red externa.

  3. Configura una ruta para dirigir todas las solicitudes al recurso externo para que vayan a la instancia creada en el paso anterior, lo que permite que tus solicitudes se reenvíen a las instancias de tu grupo privado:

    gcloud compute routes create PRIVATE_POOL_ROUTE_NAME \
      --destination-range=DESTINATION_RANGE \
      --next-hop-address=INTERNAL_IP \
      --network=NETWORK_NAME \
      --priority=POOL_ROUTE_PRIORITY
    

    Aquí:

    • PRIVATE_POOL_ROUTE_NAME es el nombre que deseas asignar a tu ruta.
    • DESTINATION_RANGE es un rango de direcciones CIDR válido que contiene el destino al que deseas enrutar. Por ejemplo, una instancia de GitHub Enterprise Edition. Por ejemplo, 8.8.8.0/24
    • INTERNAL_IP es el valor de la IP interna que se obtuvo en el paso anterior. Por ejemplo, 10.128.0.2
    • NETWORK_NAME es el nombre de la red que creaste en la sección anterior.
    • POOL_ROUTE_PRIORITY es el número de prioridad que deseas especificar para tu ruta.

    Este comando garantiza que el tráfico de una compilación dentro de una instancia de grupo privado se enrute a la VM de proxy que creaste, no se enruta directamente a la Internet pública.

  4. Configura una ruta para reenviar solicitudes desde tu proxy desde tus instancias etiquetadas al rango de IP de destino externa. El siguiente comando crea una ruta para reenviar solicitudes a la Internet pública asociada con tus instancias de grupo privado.

    gcloud compute routes create NAT_EGRESS_ROUTE_NAME \
      --destination-range=DESTINATION_RANGE \
      --next-hop-gateway=default-internet-gateway \
      --network=NETWORK_NAME \
      --priority=NAT_ROUTE_PRIORITY \
      --tags=NAT_TAG
    

    Aquí:

    • NAT_EGRESS_ROUTE_NAME es el nombre que deseas asignar a tu ruta de puerta de enlace NAT.
    • DESTINATION_RANGE es la dirección del destino al que deseas enrutar. Por ejemplo, una instancia de GitHub Enterprise Edition. Por ejemplo, 8.8.8.0/24
    • NETWORK_NAME es el nombre de la red que creaste en la sección anterior.
    • NAT_TAG es el nombre de la etiqueta de la puerta de enlace NAT que te permite enrutar solicitudes de forma condicional, en función de si tienen o no una etiqueta de esta VM. Puedes especificar cualquier nombre para la etiqueta.
    • NAT_ROUTE_PRIORITY es el número de prioridad que deseas especificar para la ruta.

    Este comando garantiza que el tráfico de la VM del proxy se pueda dirigir a la Internet pública.

  5. Agrega una regla de firewall para permitir el tráfico de tu grupo privado a tu VM de puerta de enlace NAT:

    gcloud compute firewall-rules create RULE_NAME \
      --direction=INGRESS --priority=FIREWALL_PRIORITY --action=ALLOW --rules=all \
      --network=NETWORK_NAME \
      --source-ranges=RESERVED_RANGE \
      --target-tags=NAT_TAG
    

    Aquí:

    • RULE_NAME es el nombre que deseas darle a tu regla de firewall.
    • FIREWALL_PRIORITY es el número de prioridad que deseas especificar para la regla de firewall.
    • NETWORK_NAME es el nombre de la red que creaste en la sección anterior.
    • RESERVED_RANGE es el rango CIDR que asignaste cuando configuraste la red de VPC.
    • NAT_TAG es el nombre de la etiqueta de la puerta de enlace NAT que te permite enrutar solicitudes de forma condicional, en función de si tienen o no una etiqueta de esta VM. Puedes especificar cualquier nombre para la etiqueta.

Ahora puedes acceder a recursos externos desde la dirección IP estática de la puerta de enlace NAT autoadministrada en tu VPC.

¿Qué sigue?