Configurar una conectividad privada a los servicios y las API de Google

Puedes usar los Controles de servicio de VPC para controlar el acceso a las API de Google y los servicios de los hosts que usan direcciones IP privadas. Estos hosts pueden ser instancias de VM en una red de VPC o clientes en una red local.

Para restringir el Acceso privado a Google en un perímetro de servicio solo a servicios y API de Google compatibles de los Servicios de VPC, los hosts deben enviar sus solicitudes al nombre de dominio restricted.googleapis.com en lugar de a *.googleapis.com. El dominio restricted.googleapis.com se convierte en un rango VIP (dirección IP virtual) 199.36.153.4/30. Este rango de direcciones IP no se anuncia en Internet.

En las siguientes secciones se describe cómo configurar la conectividad privada para hosts en una red de VPC o local. Para ver una descripción general y diagramas de topología de ejemplo, consulta Acceso privado de Google con controles de servicio de VPC.

Antes de comenzar

  • Debes habilitar las API a las que deseas acceder a través de la página de API y servicios en Google Cloud Console.
  • Los propietarios del proyecto, los editores y los miembros de IAM con la función de Administrador de red pueden crear o actualizar las subredes y asignar direcciones IP. Para obtener más información sobre las funciones, consulta la documentación sobre las funciones de IAM.
  • El acceso privado a Google y el acceso privado a Google para los hosts locales requiere una red de VPC. Se admiten las redes de VPC en modo automático y personalizado. Las redes heredadas no son compatibles.
  • Para las instancias de VM en una red de VPC, deben tener una dirección IP privada únicamente (sin dirección IP pública) y estar en subred con Acceso privado a Google habilitado.
  • Para los hosts locales, debes tener un túnel Cloud VPN existente o una conexión Cloud Interconnect a tu red de VPC.

Descripción general del procedimiento

Para configurar la conectividad privada, completa las siguientes tareas:

  • Configura rutas para el destino 199.36.153.4/30. Para obtener más información, consulta Cómo configurar las rutas.
  • Configura las reglas de firewall para permitir el tráfico adecuado al rango de direcciones IP restringidas de la API de Google. Para obtener más información, consulta Configura reglas de firewall.
  • Configura DNS para que el tráfico a las API de Google se resuelva en el rango de direcciones IP de la API de Google restringido. Para obtener más información, consulta Cómo configurar un DNS.

Configurar una ruta a restricted.googleapis.com

Tanto para Acceso privado de Google como para acceso privado a Google para hosts locales, la red de VPC debe incluir una ruta con un destino 199.36.153.4/30 cuyo siguiente salto sea la puerta de enlace de Internet predeterminada. Aunque el siguiente salto es una puerta de enlace de Internet predeterminada, el tráfico enviado a 199.36.153.4/30 permanece dentro de la red de Google. Es posible que tu red de VPC ya tenga una ruta predeterminada cuyo siguiente salto es la puerta de enlace de Internet predeterminada. Si no es así, puedes crear una ruta estática personalizada cuyo destino sea 199.36.153.4/30 y cuyo siguiente salto sea la puerta de enlace de Internet predeterminada.

Además de la ruta estática personalizada, el acceso privado a Google para hosts locales requiere un anuncio de ruta personalizado para que los hosts de la red local puedan obtener información sobre el VIP restringido. Puedes crear una ruta dinámica personalizada con Cloud Router para anunciar el VIP restringido.

Para obtener más información sobre cómo trabajar con rutas de VPC, consulta Cómo usar las rutas en la documentación de VPC.

Cómo configurar una ruta estática personalizada en una red de VPC

Agrega una ruta estática personalizada para habilitar el acceso a los servicios administrados de Google que son compatibles con los Controles de servicio de VPC.

  • Agrega una ruta personalizada que permita el acceso solo a los servicios administrados de Google protegidos por los Controles de servicio de VPC.

        gcloud compute routes create ROUTE_NAME \
          --network=NETWORK_NAME \
          --destination-range=199.36.153.4/30 \
          --next-hop-gateway=default-internet-gateway
        

    Aquí:

    • ROUTE_NAME es un nombre para la ruta personalizada.

    • NETWORK_NAME es el nombre de tu red de VPC.

Anunciar la ruta restringida a hosts en una red local

Si usas Acceso privado a Google para hosts locales, configura las rutas para que el tráfico de la API de Google se reenvíe a través de tu conexión de Cloud VPN o Cloud Interconnect. Para anunciar el VIP restringido (199.36.153.4/30) a tu red local, usa Anuncio de ruta personalizado de Cloud Router. Este rango de direcciones IP solo es accesible para los hosts locales que pueden llegar a tu red de VPC a través de direcciones IP privadas.

Puedes agregar este anuncio personalizado de ruta a un Cloud Router (para todas las sesiones de BGP en el router) o a una selección de BGP (para un solo túnel VPN de Cloud o VLAN adjunto).

Realiza los siguientes pasos y crea un anuncio de ruta personalizado del rango restringido para todas las sesiones de BGP en un Cloud Router existente:

Console


  1. Ve a la página de Cloud Router en Google Cloud Console.
    Lista de Cloud Router
  2. Selecciona el Cloud Router que quieres actualizar.
  3. En la página de detalles de Cloud Router, haz clic en Editar.
  4. Expande la sección Rutas anunciadas.
  5. En Rutas, selecciona Crear rutas personalizadas.
  6. Selecciona Anunciar todas las subredes visibles para Cloud Router. Esto hará que continúe el anuncio de las subredes disponibles en el Cloud Router. Habilitar esta opción imita el comportamiento predeterminado de Cloud Router.
  7. Selecciona Agregar ruta personalizada para agregar una ruta anunciada.
  8. Configura el anuncio de ruta.
  9. Fuente: selecciona Rango de IP personalizado para especificar un rango de IP personalizado.
  10. Rango de direcciones IP: especifica 199.36.153.4/30.
  11. Descripción: Agrega una descripción de Restricted Google APIs IPs.
  12. Cuando termines de agregar las rutas, selecciona Guardar.

gcloud


Ejecute el comando update con las marcas --set-advertisement-ranges o --add-advertisement-ranges para especificar los rangos de IP personalizados:

  • Para establecer rangos de IP personalizados, usa la marca --set-advertisement-ranges. Se reemplazará cualquier anuncio personalizado existente. El siguiente ejemplo actualiza el my-router Cloud Router para anunciar todas las subredes y el rango de IP de las API de Google restringidas 199.36.153.4/30:

        gcloud compute routers update my-router \
            --advertisement-mode CUSTOM \
            --set-advertisement-groups ALL_SUBNETS \
            --set-advertisement-ranges 199.36.153.4/30
        
  • Para agregar rangos de IP personalizados a un anuncio existente, usa la marca --add-advertisement-ranges. Ten en cuenta que esta marca requiere que el modo del anuncio del Cloud Router ya esté configurado en custom. En el siguiente ejemplo, se agrega la IP personalizada Restricted Google APIs IPs a los anuncios de Cloud Router:

        gcloud compute routers update my-router \
            --add-advertisement-ranges 199.36.153.4/30
        

Realiza los siguientes pasos para crear un anuncio de ruta personalizado del rango restringido de una sesión de BGP específica en un Cloud Router existente:

Console


  1. Ve a la página de Cloud Router en Google Cloud Console.
    Lista de Cloud Router
  2. Selecciona el Cloud Router que contiene la sesión de BGP que quieres actualizar.
  3. En la página de detalles de Cloud Router, selecciona la sesión de BGP que quieres actualizar.
  4. En la página de detalles de la sesión de BGP, selecciona Editar.
  5. En Rutas, selecciona Crear rutas personalizadas.
  6. Selecciona Anunciar todas las subredes visibles para Cloud Router. Esto hará que continúe el anuncio de las subredes disponibles en el Cloud Router. Habilitar esta opción imita el comportamiento predeterminado de Cloud Router.
  7. Selecciona Agregar ruta personalizada para agregar una ruta anunciada.
  8. Configura el anuncio de ruta.
  9. Fuente: selecciona Rango de IP personalizado para especificar un rango de IP personalizado.
  10. Rango de direcciones IP: especifica 199.36.153.4/30.
  11. Descripción: Agrega una descripción de Restricted Google APIs IPs.
  12. Cuando termines de agregar las rutas, selecciona Guardar.

gcloud


Ejecuta el comando update-bgp-peer con la marca --set-advertisement-ranges o --add-advertisement-ranges para especificar los rangos de IP personalizados.

  • Para establecer rangos de IP personalizados, usa la marca --set-advertisement-ranges. Se reemplazará cualquier anuncio personalizado existente. El siguiente ejemplo actualiza la sesión de my-bgp-session BGP en el my-router Cloud Router para anunciar todas las subredes y el rango de IP personalizado 199.36.153.4/30:

        gcloud compute routers update-bgp-peer my-router \
            --peer-name my-bgp-session \
            --advertisement-mode CUSTOM \
            --set-advertisement-groups ALL_SUBNETS \
            --set-advertisement-ranges 199.36.153.4/30
        
  • Para agregar rangos de IP personalizados a los existentes, usa la marca --add-advertisement-ranges. Ten en cuenta que esta marca requiere que el modo del anuncio del Cloud Router ya esté configurado en custom. En el siguiente ejemplo se agregan las IP 199.36.153.4/30 restringidas de las API de Google a los anuncios de Cloud Router:

        gcloud compute routers update-bgp-peer my-router \
            --peer-name my-bgp-session \
            --add-advertisement-ranges 199.36.153.4/30
        

    Para obtener más información sobre los anuncios personalizados, consulta Anuncios de ruta personalizados.

Configurar reglas de firewall

Para el acceso privado a Google, las instancias de VM usan direcciones IP internas y no requieren direcciones IP externas para llegar a los recursos protegidos de la API de Google. Sin embargo, es posible que las instancias de VM posean direcciones IP externas o que cumplan los requisitos de acceso a Internet. Además de las rutas personalizadas, puedes restringir el tráfico de salida de las instancias de VM en tu red de VPC al crear reglas de firewall para denegar el tráfico de salida.

De forma predeterminada, la regla de firewall de expulsión implícita permite que las instancias de VM envíen tráfico a cualquier destino si existe una ruta aplicable. Puedes crear una regla de rechazo de salida para bloquear todo el tráfico saliente y luego crear reglas de permiso de salida de mayor prioridad para permitir el tráfico a los destinos seleccionados en tu red de VPC y al rango de direcciones IP 199.36.153.4/30 (restricted.googleapis.com). Toda la comunicación a restricted.googleapis.com está en el puerto TCP 443.

Para obtener más información sobre cómo trabajar con reglas de firewall de VPC, consulta Cómo usar reglas de firewall en la documentación de VPC.

Reglas de firewall en redes locales

Debes configurar las reglas de tu firewall local para permitir que el tráfico desde tus hosts locales alcance 199.36.153.4/30.

Configurar DNS

Para utilizar las direcciones IP de las API de Google restringidas, configura tu servidor DNS para que *.googleapis.com funcione como CNAME en restricted.googleapis.com y configura un registro A para restricted.googleapis.com. Para el uso general de los Controles de servicio de VPC, te recomendamos que uses las zonas privadas administradas de Cloud DNS para tus redes de VPC.

Para acceso local, puedes configurar una política de reenvío entrante de Cloud DNS para permitir que los servidores de nombres locales consulten una zona privada administrada de Cloud DNS o configurar un servidor de nombres local, como uno que use BIND:

  • Las zonas de DNS privadas de Cloud DNS te permiten alojar una zona DNS accesible desde redes de VPC autorizadas y, si configuras el reenvío, también desde ciertos servidores de nombre locales. Puedes crear una zona privada para googleapis.com con un registro A para restricted.googleapis.com y registros CNAME apropiados para cada nombre *.googleapis.com. Las zonas privadas de Cloud DNS no admiten anulaciones parciales, lo que significa que solo puedes elegir redireccionar todas las solicitudes a *.googleapis.com a restricted.googleapis.com. Como resultado, no podrás usar ninguna API de Google ni servicios que no admitan el uso del restricted.googleapis.com VIP. Para obtener más información, consulta Cómo administrar zonas.
  • No se puede usar BIND personalizado ni restricted.googleapis.com VIP para Dataflow porque la resolución DNS de Dataflow no se puede personalizar.

Cómo configurar un DNS con Cloud DNS

Usa Cloud DNS para habilitar la resolución de DNS para instancias de VM en tu red de VPC, hosts en una red local o ambos. Si usas VPC compartida, consulta Zonas privadas y VPC compartida en la documentación de Cloud DNS. Además, si usas VPC compartida, asegúrate de que el proyecto de host de red de VPC compartida esté incluido en el mismo perímetro de servicio que los proyectos que se conectan a la red.

  1. Crea una zona privada administrada para tu red de VPC.

        gcloud beta dns managed-zones create ZONE_NAME \
         --visibility=private \
         --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
         --description=DESCRIPTION \
         --dns-name=googleapis.com
        
    • ZONE_NAME es un nombre para la zona que estás creando. Por ejemplo: vpc Este nombre se usará en cada uno de los siguientes pasos.

    • PROJECT_ID es el ID del proyecto que aloja tu red de VPC.

    • NETWORK_NAME es el nombre de tu red de VPC.

    • DESCRIPTION es una descripción opcional y legible de la zona administrada.

  2. Inicia una transacción.

        gcloud dns record-sets transaction start --zone=ZONE_NAME
        
    • ZONE_NAME es el nombre de la zona que creaste en el primer paso.
  3. Agrega registros DNS.

        gcloud dns record-sets transaction add --name=*.googleapis.com. \
            --type=CNAME restricted.googleapis.com. \
            --zone=ZONE_NAME \
            --ttl=300
        
    • ZONE_NAME es el nombre de la zona que creaste en el primer paso.
        gcloud dns record-sets transaction add --name=restricted.googleapis.com. \
            --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
            --zone=ZONE_NAME \
            --ttl=300
        
    • ZONE_NAME es el nombre de la zona que creaste en el primer paso.
  4. Ejecuta la transacción.

        gcloud dns record-sets transaction execute --zone=ZONE_NAME
        
    • ZONE_NAME es el nombre de la zona que creaste en el primer paso.
  5. Opcional Para que los hosts locales lleguen al VIP restringido, completa los siguientes pasos:

    1. Crea una política de DNS y habilita el reenvío de DNS entrante para que los servicios de resolución de nombres de la red de VPC estén disponibles externamente para los sistemas en redes locales.

          gcloud beta dns policies create POLICY_NAME \
           --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
           --enable-inbound-forwarding \
           --description=DESCRIPTION
          
      • POLICY_NAME es un nombre para la política que estás creando. Por ejemplo: apipolicy

      • PROJECT_ID es el ID del proyecto que aloja tu red de VPC.

      • NETWORK_NAME es el nombre de tu red de VPC.

      • DESCRIPTION es una descripción opcional y legible de la zona administrada.

    2. En tu red local, apunta tu DNS local hacia la dirección IP de reenvío de Cloud DNS. Para encontrar la dirección IP del reenviador, use el comando compute addresses list:

          gcloud compute addresses list --filter='name ~ ^dns-forwarding.*' \
           --format='csv[no-heading](address, subnetwork)'
          

Cómo configurar un DNS con BIND

Si usas BIND para la resolución de DNS, puedes configurarlo para que resuelva las solicitudes de la API de Google a las API de Google restringidas. Usa el siguiente ejemplo de configuración BIND, que usa las zonas de políticas de respuesta (RPZ) para lograr este comportamiento:

  1. Agrega las siguientes líneas a /etc/bind/named.conf:

        include "/etc/bind/named.conf.options";
        include "/etc/bind/named.conf.local";
        
  2. Agrega las siguientes líneas a /etc/bind/named.conf.options:

        options {
          directory "/var/cache/bind";
    
          dnssec-validation no;
    
          auth-nxdomain no;    # conform to RFC 1035
          listen-on-v6 { any; };
          listen-on { any; };
          response-policy { zone "googleapis.zone"; };
          allow-query { any;};
        };
        
  3. Agrega las siguientes líneas a /etc/bind/named.conf.local:

        include "/etc/bind/named.conf.default-zones";

    zone "googleapis.zone" { type master; file "/etc/bind/db.googleapis.zone"; allow-query {none;}; };

  4. Agrega las siguientes líneas a /etc/bind/db.googleapis.zone:

        $TTL 1H
        @                       SOA LOCALHOST. noreply.localhost(1 1h 15m 30d 2h)
                                NS  LOCALHOST.

    *.googleapis.com CNAME restricted.googleapis.com. restricted.googleapis.com CNAME rpz-passthru.