Configurar la conectividad privada con las APIs y los servicios de Google

En este documento se describe cómo configurar la conectividad privada desde hosts de una red de VPC o una red local a las APIs y los servicios de Google que admiten los controles de servicio de VPC.

Antes de leer este documento, te recomendamos que te familiarices con los conceptos, las especificaciones y la configuración de red de Acceso privado a Google. Consulta diagramas de topología de ejemplo sobre el uso del acceso privado de Google con Controles de Servicio de VPC.

Antes de empezar

  • Habilita las APIs a las que quieras acceder a través de la página APIs y servicios de la consola de Google Cloud .
  • Asegúrate de que tienes el rol necesario para crear o actualizar subredes. Los propietarios y editores de proyectos, así como las entidades de IAM que tengan el rol Administrador de red, pueden crear o actualizar subredes y asignar direcciones IP. Para obtener más información sobre los roles, consulta la documentación sobre los roles de gestión de identidades y accesos.
  • Comprueba que haya una red de VPC configurada para Acceso privado de Google y Acceso privado de Google para hosts on-premise. Se admiten redes de VPC en modo automático y personalizado. No se admiten las redes antiguas.
  • Asegúrate de que las instancias de VM de una red de VPC tengan una dirección IP privada (no una pública) y estén en una subred con la función Acceso privado de Google habilitada.
  • En el caso de los hosts on-premise, asegúrate de tener un túnel Cloud VPN o una conexión Cloud Interconnect a tu red VPC. Para admitir hosts locales que tengan direcciones IPv6, consulta Compatibilidad con IPv6.

Resumen del procedimiento

Para configurar la conectividad privada, sigue estos pasos:

  • Configura las rutas de los intervalos de direcciones IP restricted.googleapis.com. Para obtener más información, consulta Configurar rutas.
  • Configura reglas de cortafuegos para permitir que el tráfico adecuado llegue a los intervalos de direcciones IP de restricted.googleapis.com. Para obtener más información, consulta Configurar reglas de cortafuegos.
  • Configura el DNS para que el tráfico a las APIs de Google se resuelva en los intervalos de direcciones IP restricted.googleapis.com. Para obtener más información, consulta Configurar DNS.

Compatibilidad con IPv6 para restricted.googleapis.com

Puedes acceder a las APIs de Google mediante el intervalo de direcciones IPv6 del dominio restricted.googleapis.com: 2600:2d00:0002:1000::/64.

Si quieres usar el dominio restricted.googleapis.com y tienes clientes que usan direcciones IPv6, plantéate configurar las direcciones IPv6. Los clientes IPv6 que también tengan configuradas direcciones IPv4 pueden acceder a las APIs y los servicios de Google mediante las direcciones IPv4. No todos los servicios aceptan tráfico de clientes IPv6.

Para permitir que los clientes IPv6 de tu entorno local accedan a las APIs de Google mediante restricted.googleapis.com, debes configurar la conexión a tu red de VPC para que admita IPv6. Para obtener más información, consulta las siguientes páginas:

Los clientes locales pueden enviar solicitudes desde cualquier dirección GUA o ULA IPv6, excepto desde el intervalo ULA fda3:e722:ac3:cc00::/64, que está reservado para uso interno.

Para obtener más información sobre la IP virtual restricted.googleapis.com, consulta el artículo Configurar Acceso privado a Google.

Conectividad directa con APIs y servicios

Algunas APIs y servicios de Google admiten la conectividad directa desde instancias de máquinas virtuales (VMs) de Compute Engine, lo que permite omitir los Google Front Ends (GFEs) y ofrecer un mejor rendimiento.

Para establecer una conectividad directa, es necesario que tus rutas y reglas de cortafuegos permitan que el tráfico IPv4 llegue a 34.126.0.0/18 y el tráfico IPv6 llegue a 2001:4860:8040::/42. Estas direcciones IP, que son un subconjunto del dominio restricted.googleapis.com, admiten Controles de Servicio de VPC. Además, no es necesario crear registros DNS para estas direcciones.

Ten en cuenta que la conectividad directa solo está disponible desde recursos de Google Cloud y no se admite desde hosts on-premise.

Configurar rutas a restricted.googleapis.com

Aunque Controles de Servicio de VPC se aplica a los servicios compatibles y configurados, independientemente del dominio que utilices, restricted.googleapis.com ofrece una mitigación de riesgos adicional para la filtración externa de datos. restricted.googleapis.com deniega el acceso a las APIs y los servicios de Google que no son compatibles con Controles de Servicio de VPC.

Tanto para Acceso privado de Google como para Acceso privado de Google para hosts on-premise, tu red de VPC debe incluir una ruta para los intervalos de direcciones IP restricted.googleapis.com cuya siguiente parada sea la puerta de enlace de Internet predeterminada. Aunque el siguiente salto sea una pasarela de Internet predeterminada, el tráfico enviado a restricted.googleapis.com no abandona la red de Google.

Si tu red de VPC no tiene una ruta predeterminada cuyo siguiente salto sea la pasarela de Internet predeterminada, puedes crear una ruta estática personalizada cuyo destino sea el intervalo de direcciones IP restricted.googleapis.com y cuyo siguiente salto sea la pasarela de Internet predeterminada. Para evitar el acceso a Internet, debes quitar otras rutas cuyo siguiente salto sea la pasarela de Internet predeterminada.

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

Configurar rutas estáticas personalizadas en una red de VPC

Añade rutas estáticas personalizadas para habilitar el acceso a los servicios gestionados por Google que admiten los Controles de Servicio de VPC.

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

Haz los cambios siguientes:

  • ROUTE_NAME: nombre de la ruta personalizada
  • NETWORK_NAME: el nombre de tu red de VPC
  • DESTINATION_RANGE: el intervalo de destino de la ruta
    • Para enrutar el tráfico a la VIP restricted.googleapis.com, usa los siguientes intervalos:
      • Para el tráfico IPv4: 199.36.153.4/30
      • Para el tráfico IPv6: 2600:2d00:0002:1000::/64
    • Para enrutar el tráfico a las APIs que permiten la conectividad directa, usa los siguientes intervalos:
      • Para el tráfico IPv4: 34.126.0.0/18
      • Para el tráfico IPv6: 2001:4860:8040::/42

Anunciar la ruta restringida a los hosts de una red local

Si usas el acceso privado de Google para hosts on-premise, configura las rutas para que el tráfico de las APIs de Google se reenvíe a través de tu conexión de Cloud VPN o Cloud Interconnect. Para anunciar los intervalos de direcciones VIP restringidas a tu red local, usa el modo de anuncio personalizado de Cloud Router. Solo se puede acceder a los intervalos de direcciones VIP restringidas desde hosts on-premise que puedan acceder a tu red de VPC mediante direcciones IP privadas.

Puedes añadir esta ruta anunciada personalizada a un router de Cloud Router (para todas las sesiones BGP del router) o a una sesión BGP concreta (para un solo túnel de Cloud VPN o una vinculación de VLAN).

Las rutas IPv6 solo se anuncian en sesiones de BGP en las que IPv6 está habilitado.

Para crear una ruta anunciada personalizada para el intervalo restringido de todas las sesiones BGP de un router de Cloud Router, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a la página Cloud Routers.

    Ir a Cloud Routers

  2. Selecciona el Cloud Router que quieras actualizar.

  3. En la página de detalles de Cloud Router, selecciona Editar.

  4. Despliega la sección Rutas anunciadas.

  5. En Rutas, selecciona Crear rutas personalizadas.

  6. Para seguir anunciando las subredes disponibles para el router de Cloud, selecciona Anunciar todas las subredes que pueda ver el router de Cloud. Si habilitas esta opción, se imitará el comportamiento predeterminado del Cloud Router.

  7. Para añadir una ruta anunciada, selecciona Añadir ruta personalizada .

  8. Configura el anuncio de ruta.

    • Origen: selecciona Intervalo de IP personalizado.
    • Intervalo de direcciones IP:
      • Para la conectividad IPv4: 199.36.153.4/30
      • Para la conectividad IPv6: 2600:2d00:0002:1000::/64
    • Descripción: añade una descripción de Restricted Google APIs IPs.
  9. Cuando hayas añadido las rutas, selecciona Guardar.

gcloud

Ejecuta el comando update con la marca --set-advertisement-ranges o --add-advertisement-ranges para especificar los intervalos de IPs personalizados:

  • Para definir intervalos de IPs personalizados, usa la marca --set-advertisement-ranges. Se sustituirán las rutas anunciadas personalizadas que ya tengas. En el ejemplo siguiente se actualiza el router de Cloud my-router para que anuncie todas las subredes y los intervalos de direcciones IP restricted.googleapis.com.

    gcloud compute routers update my-router \
        --advertisement-mode CUSTOM \
        --set-advertisement-groups ALL_SUBNETS \
        --set-advertisement-ranges RANGES
    

    Sustituye RANGES por los intervalos que quieras usar:

    • Para la conectividad IPv4: 199.36.153.4/30
    • Para la conectividad IPv6: 2600:2d00:0002:1000::/64
    • Para la conectividad IPv4 e IPv6: 199.36.153.4/30,2600:2d00:0002:1000::/64

  • Para añadir intervalos de IPs personalizados a un anuncio, usa la marca --add-advertisement-ranges. Ten en cuenta que esta marca requiere que el modo de anuncio de Cloud Router ya esté definido como custom. En el siguiente ejemplo se añaden los intervalos de direcciones IP restricted.googleapis.com a los anuncios de Cloud Router:

    gcloud compute routers update my-router \
        --add-advertisement-ranges RANGES
    

    Sustituye RANGES por los intervalos que quieras usar:

    • Para la conectividad IPv4: 199.36.153.4/30
    • Para la conectividad IPv6: 2600:2d00:0002:1000::/64
    • Para la conectividad IPv4 e IPv6: 199.36.153.4/30,2600:2d00:0002:1000::/64

Para crear una ruta anunciada personalizada para el intervalo restringido en una sesión BGP específica de un router de Cloud Router, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a la página Cloud Routers.

    Ir a Cloud Routers

  2. Selecciona el router de Cloud Router que contiene la sesión BGP que quieres actualizar.

  3. En la página de detalles de Cloud Router, seleccione la sesión de BGP que quiera actualizar.

  4. En la página Detalles de la sesión de BGP, selecciona Editar.

  5. En Rutas, selecciona Crear rutas personalizadas.

  6. Seleccione Anunciar todas las subredes que pueda ver el router de Cloud Router para seguir anunciando las subredes disponibles para el router de Cloud Router. Si habilitas esta opción, se imitará el comportamiento predeterminado del Cloud Router.

  7. Selecciona Añadir ruta personalizada para añadir una ruta anunciada.

  8. Configura el anuncio de ruta.

    • Fuente: selecciona Intervalo de IPs personalizado para especificar un intervalo de IPs personalizado.
    • Intervalo de direcciones IP:
      • Para la conectividad IPv4: 199.36.153.4/30
      • Para la conectividad IPv6: 2600:2d00:0002:1000::/64
    • Descripción: añade una descripción de Restricted Google APIs IPs.
  9. Cuando hayas terminado de añadir rutas, selecciona Guardar.

gcloud

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

  • Para definir intervalos de IPs personalizados, usa la marca --set-advertisement-ranges. Se sustituirán las rutas anunciadas personalizadas que ya tengas.

    Si añades intervalos personalizados de IPv6 y el tráfico IPv6 está inhabilitado en la sesión de BGP, puedes habilitarlo con la marca --enable-ipv6.

    En el siguiente ejemplo se actualiza la sesión BGP my-bgp-session del router de Cloud Router my-router para anunciar todas las subredes y el intervalo de IPs personalizado:

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --advertisement-mode CUSTOM \
        --set-advertisement-groups ALL_SUBNETS \
        --set-advertisement-ranges RANGES
    

    Sustituye RANGES por los intervalos que quieras usar:

    • Para la conectividad IPv4: 199.36.153.4/30
    • Para la conectividad IPv6: 2600:2d00:0002:1000::/64
    • Para la conectividad IPv4 e IPv6: 199.36.153.4/30,2600:2d00:0002:1000::/64

  • Para añadir intervalos de IPs personalizados a los que ya haya, usa la marca --add-advertisement-ranges. Ten en cuenta que esta marca requiere que el modo de anuncio de Cloud Router ya esté definido como custom.

    Si añades intervalos personalizados de IPv6 y el tráfico IPv6 está inhabilitado en la sesión de BGP, puedes habilitarlo con la marca --enable-ipv6.

    En el siguiente ejemplo se añaden los intervalos de direcciones VIP restringidas a los anuncios de Cloud Router:

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --add-advertisement-ranges RANGES
    

    Sustituye RANGES por los intervalos que quieras usar:

    • Para la conectividad IPv4: 199.36.153.4/30
    • Para la conectividad IPv6: 2600:2d00:0002:1000::/64
    • Para la conectividad IPv4 e IPv6: 199.36.153.4/30,2600:2d00:0002:1000::/64

    Para obtener más información sobre el modo de anuncio personalizado, consulte Rutas anunciadas personalizadas.

Configurar reglas de cortafuegos

En el caso del acceso privado de Google, las instancias de VM usan direcciones IP internas y no requieren direcciones IP externas para acceder a los recursos de las APIs de Google protegidas. Sin embargo, es posible que las instancias de VM tengan direcciones IP externas o cumplan los requisitos de acceso a Internet. Además de las rutas anunciadas personalizadas, puedes restringir el tráfico saliente de las instancias de VM de tu red de VPC creando reglas de cortafuegos para denegar el tráfico saliente.

De forma predeterminada, la regla de cortafuegos de salida implícita permite que las instancias de VM envíen tráfico a cualquier destino si existe una ruta aplicable. Primero puedes crear una regla de denegación de salida para bloquear todo el tráfico saliente. Después, puede crear reglas de salida de mayor prioridad que permitan el tráfico a los destinos seleccionados de su red VPC y a los intervalos de direcciones IP de restricted.googleapis.com. Toda la comunicación con restricted.googleapis.com se realiza a través del puerto TCP 443.

Para permitir que el tráfico de Google Cloud llegue a las IPs virtuales de restricted.googleapis.com, añade reglas de cortafuegos para los siguientes destinos:

  • Para el tráfico IPv4: 199.36.153.4/30
  • Para el tráfico IPv6: 2600:2d00:0002:1000::/64

Para permitir que el tráfico de Google Cloud llegue a las APIs y los servicios que permiten la conectividad directa, añade reglas de cortafuegos para los siguientes destinos:

  • Para el tráfico IPv4: 34.126.0.0/18
  • Para el tráfico IPv6: 2001:4860:8040::/42

Para obtener más información sobre cómo trabajar con reglas de cortafuegos de VPC, consulta el artículo Usar reglas de cortafuegos de VPC en la documentación de Cloud Next Generation Firewall.

Configura las reglas de tu cortafuegos local para permitir que el tráfico de tus hosts locales llegue a los intervalos de direcciones IP de restricted.googleapis.com.

  • Para el tráfico IPv4: 199.36.153.4/30
  • Para el tráfico IPv6: 2600:2d00:0002:1000::/64

La conectividad directa con las APIs y los servicios de Google no se admite desde redes on-premise.

Configurar DNS

Puedes usar zonas privadas gestionadas para tus redes de VPC. Las zonas de DNS privadas de Cloud DNS te permiten alojar una zona de DNS a la que se puede acceder desde redes de VPC autorizadas. Para configurar el reenvío desde determinados servidores de nombres locales, puedes usar los intervalos de direcciones IP restricted.googleapis.com. A continuación, puedes crear una zona privada para googleapis.com con un registro A de DNS que asigne restricted.googleapis.com y los registros CNAME adecuados para cada nombre de *.googleapis.com. Para obtener más información, consulta Gestionar zonas.

Para acceder desde un entorno 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 gestionada de Cloud DNS. También puedes configurar un servidor de nombres local, como uno que utilice BIND:

Configurar DNS con Cloud DNS

Para habilitar la resolución de DNS en las instancias de VM de tu red de VPC, en los hosts de una red local o en ambos, usa Cloud DNS. Si usas una VPC compartida, consulta Zonas privadas y VPC compartida en la documentación de Cloud DNS. Además, si utilizas una VPC compartida, te recomendamos que incluyas el proyecto del host de la red de VPC compartida en el mismo perímetro de servicio que los proyectos que se conectan a la red.

Configurar Cloud DNS con zonas privadas

Puedes usar zonas privadas para configurar Cloud DNS:

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

    gcloud 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

    Haz los cambios siguientes:

    • ZONE_NAME: el nombre de la zona que vas a crear. Por ejemplo, vpc. Este nombre se usa en cada uno de los pasos siguientes.
    • PROJECT_ID: el ID del proyecto que aloja tu red de VPC.
    • NETWORK_NAME: el nombre de tu red de VPC.
    • DESCRIPTION: descripción opcional de la zona gestionada legible por humanos.
  2. Inicia una transacción.

    gcloud dns record-sets transaction start --zone=ZONE_NAME

    Sustituye ZONE_NAME por el nombre de la zona que has creado en el primer paso.

  3. Añade registros DNS.

    gcloud dns record-sets transaction add --name=*.googleapis.com. \
        --type=CNAME restricted.googleapis.com. \
        --zone=ZONE_NAME \
        --ttl=300

    Sustituye ZONE_NAME por el nombre de la zona que has creado 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

    Sustituye ZONE_NAME por el nombre de la zona que has creado en el primer paso.

    Si vas a configurar las direcciones IPv6 de restricted.googleapis.com, también debes crear el siguiente conjunto de registros:

    gcloud dns record-sets transaction add --name=restricted.googleapis.com. \
        --type=AAAA 2600:2d00:0002:1000:: \
        --zone=ZONE_NAME \
        --ttl=300
  4. Ejecuta la transacción.

    gcloud dns record-sets transaction execute --zone=ZONE_NAME

    Sustituye ZONE_NAME por el nombre de la zona que has creado en el primer paso.

  5. Opcional. Para permitir que los hosts locales accedan a la VIP restringida, sigue estos 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 VPC estén disponibles externamente para los sistemas de las redes on-premise.

      gcloud dns policies create POLICY_NAME \
       --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
       --enable-inbound-forwarding \
       --description=DESCRIPTION

      Haz los cambios siguientes:

      • POLICY_NAME: el nombre de la política que vas a crear. Por ejemplo, apipolicy.
      • PROJECT_ID: el ID del proyecto que aloja tu red de VPC.
      • NETWORK_NAME: el nombre de tu red de VPC.
      • DESCRIPTION: descripción opcional de la zona gestionada legible por personas.
    2. En tu red on-premise, dirige tu DNS on-premise a la dirección IP del reenviador de Cloud DNS. Para encontrar la dirección IP del reenviador, usa el comando compute addresses list:

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

Configurar DNS con BIND

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

  1. Añade las siguientes líneas a /etc/bind/named.conf:

    include "/etc/bind/named.conf.options";
    include "/etc/bind/named.conf.local";
    
  2. Añade 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. Añade 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. Añade 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.

Configurar el DNS en casos especiales

Cuando necesite configurar el DNS en casos especiales, tenga en cuenta lo siguiente:

  • No se admite BIND personalizado cuando se usa Dataflow. Para personalizar la resolución de DNS al usar Dataflow con Controles de Servicio de VPC, utiliza zonas privadas de Cloud DNS en lugar de servidores BIND personalizados. Si quieres usar tu propia resolución de DNS local, te recomendamos que utilices unGoogle Cloud método de reenvío de DNS.
  • También puede que tengas que configurar el DNS para gcr.io si, por ejemplo, usas Google Kubernetes Engine (GKE). Para obtener más información, consulta Configurar Container Registry para clústeres privados de GKE.