Acceder a recursos externos en una red privada mediante una IP externa estática

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


Para seguir las instrucciones paso a paso de esta tarea directamente en la Google Cloud consola, haz clic en Ayúdame:

Guíame


Antes de empezar

  • Enable the Cloud Build, Compute Engine, and Service Networking APIs.

    Enable the APIs

  • Para obtener los permisos que necesitas para configurar una conexión privada, pide a tu administrador que te asigne el rol de gestión de identidades y accesos Administrador de red de Compute Engine (roles/compute.networkAdmin) en el proyecto de Cloud en el que se encuentra la red VPC. Para obtener más información sobre cómo conceder roles, consulta el artículo sobre cómo gestionar el acceso.

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

Crear una red VPC

Consola

Para crear una red de VPC con la Google Cloud consola, sigue estos pasos:

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

    Ir a redes de VPC

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

    Verá la página Crear una red VPC.

  3. Introduzca un nombre para su red.

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

  5. Si quieres personalizar otros campos, consulta el artículo Crear y gestionar redes de VPC. De lo contrario, deja todos los campos tal cual.

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

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

gcloud

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

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

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

Para obtener más información sobre cómo crear y gestionar redes de VPC, consulta el artículo Crear y gestionar redes de VPC.

Crear conexión privada

Consola

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

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

    Ir a redes de VPC

  2. Haz clic en el nombre de tu red.

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

  3. Haga clic en la pestaña Conexión de servicio privada.

    1. Seleccione la pestaña Intervalos de direcciones IP asignados para los servicios.

    2. Haz clic en Asignar intervalo de IPs.

      Verá el cuadro emergente Asignar intervalo de IP internas.

      1. Introduzca un nombre para el intervalo de IPs.

      2. En Intervalo de IP, seleccione Automático.

      3. En el campo Longitud del prefijo, introduce la longitud del prefijo de tu red.

      4. Haz clic en Asignar para asignar tu intervalo de IPs.

    3. Seleccione la pestaña Conexiones privadas a los servicios.

    4. Haga clic en Crear conexión.

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

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

      2. Haz clic en Connect (Conectar).

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

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

Ya has configurado tu red.

gcloud

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

  1. Introduce el siguiente comando en tu terminal para asignar un intervalo de IPs a tu servicio:

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

    Donde:

    • RESERVED_RANGE_NAME es el nombre del intervalo asignado. Por ejemplo, my-allocated-range.
    • PREFIX_LENGTH es la longitud del prefijo de tu red. La longitud del prefijo debe ser igual o inferior a /24, como /22, /21, etc.
    • VPC_NETWORK es el nombre de tu red de VPC, como my-vpc-network.
    • PROJECT_ID es el ID del proyecto que contiene tu red de VPC.
  2. Introduce el siguiente comando en tu 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
    

    Donde:

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

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

    Donde:

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

Ya has configurado tu red.

Para obtener más información sobre cómo configurar una red, consulta el artículo Configurar una conexión privada entre tu red de VPC y la red del productor de servicios.

Crear un grupo privado

Consola

Para crear un grupo privado con la Google Cloud consola, sigue estos pasos:

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

    Abre la página del grupo de trabajadores de Cloud Build

  2. Selecciona el proyecto en el que quieras 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, introduce la siguiente información:

    1. Introduce un nombre para tu grupo privado.

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

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

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

Ya has creado un grupo privado.

gcloud

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

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

Donde:

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

Ya has creado un grupo privado.

Para obtener más información sobre cómo crear y gestionar grupos privados, consulta el artículo Crear y gestionar grupos privados.

Acceder a recursos externos en una red privada

De forma predeterminada, las direcciones IP externas asociadas a los grupos privados de Cloud Build no son estáticas ni configurables. Se asignan por Google Cloud. Si quieres configurar tus grupos privados para que accedan 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 pasarela NAT autogestionada que proxyice las solicitudes a Internet pública. Después, debes configurar rutas personalizadas para reenviar estas solicitudes a tu VM y asegurarte de que las rutas se intercambien con el proyecto de redes de servicios.

En esta sección se explica cómo configurar tus grupos privados para acceder a recursos externos a través de una IP externa estática. Para ello, sigue estos pasos:

  1. Crea una secuencia de comandos de inicio para configurar la VM de forma que actúe como proxy de cualquier tráfico enrutado a la VM y enmascare ese tráfico como si procediera de 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 tu grupo privado con una regla para permitir que las solicitudes se proxyicen 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
    

    Donde:

    • VM_NAME es el nombre que quieres asignar a tu VM.
    • NETWORK_NAME es el nombre de la red que has creado en la sección anterior.
    • INTERNAL_IP es cualquier dirección IP interna válida dentro del intervalo de la subred de la región de tu VM. Por ejemplo, 10.128.0.2.
    • ZONE es la zona asociada a tu red, como us-central1-a.
    • (Opcional) SUBNETWORK es el nombre de tu subred. El nombre de tu subred se puede encontrar en el equivalente de REST de tu subred con el siguiente formato: projects/project-id/regions/region/subnetworks/subnetwork-name. Si has seleccionado Automático en Modo de conexión de subred al crear una red VPC, no tienes que especificar este campo.
    • NAT_TAG es el nombre de la etiqueta de la pasarela NAT que te permite enrutar solicitudes de forma condicional en función de si tienen o no una etiqueta de esta VM. Puede especificar el nombre que quiera para la etiqueta.
    • STARTUP_SCRIPT es el nombre de la secuencia de comandos de inicio que has creado en el paso anterior. Por ejemplo, startup-script-example.sh. En este ejemplo, se usa la marca --metadata-from-file para transferir el contenido de la secuencia de comandos de inicio que has especificado a una clave llamada startup-script.

    Después de ejecutar este comando, verás un resultado que contiene el valor de la IP externa. Anota el valor de la IP externa. Todo el tráfico de tu grupo privado a tu recurso externo pasa por esta dirección. Puede usar esta dirección para realizar más configuraciones, como configurar reglas de cortafuegos en su red externa.

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

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

    Donde:

    • PRIVATE_POOL_ROUTE_NAME es el nombre que quieres dar a tu ruta.
    • DESTINATION_RANGE es un intervalo de direcciones CIDR válido que contiene el destino al que quieres dirigir el tráfico. Por ejemplo, una instancia de GitHub Enterprise Edition. Por ejemplo, 8.8.8.0/24.
    • INTERNAL_IP es el valor de IP interno obtenido en el paso anterior. Por ejemplo, 10.128.0.2.
    • NETWORK_NAME es el nombre de la red que has creado en la sección anterior.
    • POOL_ROUTE_PRIORITY es el número de prioridad que quieres especificar para tu ruta.

    Este comando asegura que el tráfico de una compilación de una instancia de un grupo privado se dirija a la máquina virtual proxy que has creado, en lugar de dirigirse directamente a Internet.

  4. Configura una ruta para reenviar las solicitudes de tu proxy desde tus instancias etiquetadas al intervalo de IPs de destino externo. El siguiente comando crea una ruta para reenviar solicitudes a Internet público asociadas a las instancias de tu 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
    

    Donde:

    • NAT_EGRESS_ROUTE_NAME es el nombre que quieres dar a la ruta de la pasarela de NAT.
    • DESTINATION_RANGE es la dirección del destino al que quieres ir. Por ejemplo, una instancia de GitHub Enterprise Edition. Por ejemplo, 8.8.8.0/24.
    • NETWORK_NAME es el nombre de la red que has creado en la sección anterior.
    • NAT_TAG es el nombre de la etiqueta de la pasarela NAT que te permite enrutar solicitudes de forma condicional en función de si tienen o no una etiqueta de esta VM. Puede especificar el nombre que quiera para la etiqueta.
    • NAT_ROUTE_PRIORITY es el número de prioridad que quieres especificar para tu ruta.

    Este comando asegura que cualquier tráfico de la VM proxy se pueda dirigir a Internet pública.

  5. Añade una regla de cortafuegos 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
    

    Donde:

    • RULE_NAME es el nombre que quieres dar a la regla de cortafuegos.
    • FIREWALL_PRIORITY es el número de prioridad que quieres especificar para tu regla de cortafuegos.
    • NETWORK_NAME es el nombre de la red que has creado en la sección anterior.
    • RESERVED_RANGE es el intervalo CIDR que has asignado al configurar tu red de VPC.
    • NAT_TAG es el nombre de la etiqueta de la pasarela NAT que te permite enrutar solicitudes de forma condicional en función de si tienen o no una etiqueta de esta VM. Puede especificar el nombre que quiera para la etiqueta.

Ahora puedes acceder a recursos externos desde la dirección IP estática de la pasarela de NAT autogestionada de tu VPC.

Siguientes pasos