Accede a las APIs desde las VMs con direcciones IP externas

Una instancia de máquina virtual (VM) con una dirección IP externa asignada a su interfaz de red puede conectarse a las APIs y los servicios de Google si se cumplen los requisitos de red descritos en esta página. Aunque la conexión se realiza a partir de la dirección IP externa de la VM, el tráfico permanece dentro de Google Cloud y no se envía a través de la Internet pública.

Requisitos de red

Debes cumplir con los siguientes requisitos para acceder a las API y los servicios de Google desde una VM con una dirección IP externa:

  • Si deseas conectarte a los servicios y las APIs de Google mediante IPv6, debes cumplir con estos requisitos:

  • Según la configuración que elegiste, es posible que debas actualizar las entradas, las rutas y las reglas de firewall de DNS. Para obtener más información, consulta Resumen de las opciones de configuración.

Resumen de las opciones de configuración

En la siguiente tabla, se resumen las diferentes maneras en que puedes configurar el Acceso privado a Google. Para obtener información sobre la configuración más detallada, consulta Configuración de red.

Opción de dominio Configuración de DNS Configuración de enrutamiento Configuración de firewall
Dominios predeterminados. No es necesario realizar una configuración especial de DNS.

Asegúrate de que tu red de VPC pueda enrutar el tráfico a los rangos de direcciones IP que usan las API y los servicios de Google.

  • Configuración básica: Confirma que tienes rutas predeterminadas con el próximo salto default-internet-gateway y un rango de destino de 0.0.0.0/0 (para el tráfico IPv4) y ::/0 (para tráfico IPv6, si es necesario). Crea esas rutas si faltan.
  • Configuración personalizada: Crea rutas para los rangos de direcciones IP que usan las API y los servicios de Google.

Asegúrate de que las reglas de firewall permitan la salida a los rangos de direcciones IP que usan las API y los servicios de Google.

La regla predeterminada de firewall de permiso de salida permite este tráfico, si no hay una regla de mayor prioridad que lo bloquee.

private.googleapis.com

Configura los registros DNS en una zona de DNS privada para enviar solicitudes a las siguientes direcciones IP:

Para el tráfico IPv4, haz lo siguiente:

  • 199.36.153.8/30

Para el tráfico IPv6, haz lo siguiente:

  • 2600:2d00:0002:2000::/64

Asegúrate de que tu red de VPC tenga rutas a los siguientes rangos de IP:

Para el tráfico IPv4, haz lo siguiente:

  • 199.36.153.8/30
  • 34.126.0.0/18

Para el tráfico IPv6, haz lo siguiente:

  • 2600:2d00:0002:2000::/64
  • 2001:4860:8040::/42

Asegúrate de que tus reglas de firewall permitan la salida a los siguientes rangos de IP:

Para el tráfico IPv4, haz lo siguiente:

  • 199.36.153.8/30
  • 34.126.0.0/18

Para el tráfico IPv6, haz lo siguiente:

  • 2600:2d00:0002:2000::/64
  • 2001:4860:8040::/42
restricted.googleapis.com

Configura los registros DNS para enviar solicitudes a las siguientes direcciones IP:

Para el tráfico IPv4, haz lo siguiente:

  • 199.36.153.4/30

Para el tráfico IPv6, haz lo siguiente:

  • 2600:2d00:0002:1000::/64

Asegúrate de que tu red de VPC tenga rutas a los siguientes rangos de IP:

Para el tráfico IPv4, haz lo siguiente:

  • 199.36.153.4/30
  • 34.126.0.0/18

Para el tráfico IPv6, haz lo siguiente:

  • 2600:2d00:0002:1000::/64
  • 2001:4860:8040::/42

Asegúrate de que tus reglas de firewall permitan la salida a los siguientes rangos de IP:

Para el tráfico IPv4, haz lo siguiente:

  • 199.36.153.4/30
  • 34.126.0.0/18

Para el tráfico IPv6, haz lo siguiente:

  • 2600:2d00:0002:1000::/64
  • 2001:4860:8040::/42

Configuración de red

En esta sección, se describen los requisitos de red básicos que debes cumplir para que una VM en tu red de VPC acceda a las API y los servicios de Google.

Opciones de dominio

Elige el dominio que deseas usar para acceder a los servicios y las APIs de Google.

Las direcciones IP virtuales (VIP) private.googleapis.com y restricted.googleapis.com solo admiten protocolos basados en HTTP en TCP (HTTP, HTTPS y HTTP/2). No se admite ningún otro protocolo, incluidos ICMP y MQTT.

Rangos de direcciones IP y de dominio Servicios compatibles Ejemplo de uso

Dominios predeterminados.

Todos los nombres de dominio para las APIs y los servicios de Google, excepto private.googleapis.com y restricted.googleapis.com.

Varios rangos de direcciones IP: puedes determinar un conjunto de rangos de IP que contenga las direcciones posibles que usan los dominios predeterminados si haces referencia a las direcciones IP para dominios predeterminados.

Habilita el acceso a la mayoría de los servicios y las APIs de Google, sin importar si son compatibles con los Controles del servicio de VPC. Incluye el acceso a la API para Google Maps, Google Ads y Google Cloud. Incluye aplicaciones web de Google Workspace, como Gmail y Documentos de Google, y otras aplicaciones web.

Los dominios predeterminados se usan cuando no configuras los registros DNS para private.googleapis.com y restricted.googleapis.com.

private.googleapis.com

199.36.153.8/30

2600:2d00:0002:2000::/64

Habilita el acceso a la mayoría de los servicios y las APIs de Google, sin importar si son compatibles con los Controles del servicio de VPC. Incluye acceso a la API de Google Maps, Google Ads, Google Cloud y la mayoría de las otras APIs de Google, incluida la siguiente lista. Es compatible con las aplicaciones web de Google Workspace, como Gmail y Documentos de Google. No es compatible con ningún sitio web interactivo.

Nombres de dominio que coinciden:

  • accounts.google.com (solo las rutas de acceso necesarias para la autenticación OAuth)
  • *.aiplatform-notebook.cloud.google.com
  • *.aiplatform-notebook.googleusercontent.com
  • appengine.google.com
  • *.appspot.com
  • *.backupdr.cloud.google.com
  • backupdr.cloud.google.com
  • *.backupdr.googleusercontent.com
  • backupdr.googleusercontent.com
  • *.cloudfunctions.net
  • *.cloudproxy.app
  • *.composer.cloud.google.com
  • *.composer.googleusercontent.com
  • *.datafusion.cloud.google.com
  • *.datafusion.googleusercontent.com
  • *.dataproc.cloud.google.com
  • dataproc.cloud.google.com
  • *.dataproc.googleusercontent.com
  • dataproc.googleusercontent.com
  • dl.google.com
  • gcr.io o *.gcr.io
  • *.googleapis.com
  • *.gstatic.com
  • *.ltsapis.goog
  • *.notebooks.cloud.google.com
  • *.notebooks.googleusercontent.com
  • packages.cloud.google.com
  • pkg.dev o *.pkg.dev
  • pki.goog o *.pki.goog
  • *.run.app
  • source.developers.google.com
  • storage.cloud.google.com

Usa private.googleapis.com para acceder a las APIs y a los servicios de Google mediante un conjunto de direcciones IP que solo se pueden enrutar desde Google Cloud.

Elige private.googleapis.com en estas circunstancias:

  • Si no usas los Controles del servicio de VPC.
  • Debes usar los Controles del servicio de VPC, pero también debes acceder a los servicios y las APIs de Google que no son compatibles con estos controles.1

restricted.googleapis.com

199.36.153.4/30

2600:2d00:0002:1000::/64

Habilita el acceso a la API a los servicios y las APIs de Google que son compatibles con los Controles del servicio de VPC.

Bloquea el acceso a los servicios y a las APIs de Google que son incompatibles con los Controles del servicio de VPC. Es incompatible con las API de Google Workspace y con las aplicaciones web de Google Workspace, como Gmail y Documentos de Google.

Usa restricted.googleapis.com para acceder a las APIs y a los servicios de Google mediante un conjunto de direcciones IP que solo se pueden enrutar desde Google Cloud.

Elige restricted.googleapis.com solo cuando necesites acceso a los servicios y las APIs de Google que son compatibles con los Controles del servicio de VPC.

El dominio restricted.googleapis.com no permite el acceso a las APIs y los servicios de Google que no son compatibles con los Controles del servicio de VPC.1

1 Si necesitas restringir los usuarios solo a los servicios y las APIs de Google que admiten los Controles del servicio de VPC, usa restricted.googleapis.com. Aunque los Controles del servicio de VPC se aplican a los servicios compatibles y configurados, sin importar el dominio que uses, restricted.googleapis.com ofrece una mitigación adicional de riesgos para el robo de datos. Usar restricted.googleapis.com rechaza el acceso a los servicios y a las API de Google que no son compatibles con los Controles del servicio de VPC. Consulta Configura una conectividad privada en la documentación de los Controles del servicio de VPC para obtener más información.

Compatibilidad con IPv6 para private.googleapis.com y restricted.googleapis.com

Los siguientes rangos de direcciones IPv6 se pueden usar para dirigir el tráfico de los clientes IPv6 a los servicios y las APIs de Google:

  • private.googleapis.com: 2600:2d00:0002:2000::/64
  • restricted.googleapis.com: 2600:2d00:0002:1000::/64

Considera configurar las direcciones IPv6 si deseas usar el dominio private.googleapis.com o restricted.googleapis.com y tienes clientes que usan direcciones IPv6. Los clientes IPv6 que también tienen direcciones IPv4 configuradas pueden acceder a los servicios y las APIs de Google mediante las direcciones IPv4. No todos los servicios aceptan el tráfico de clientes IPv6.

Configuración de DNS

Para la conectividad a los servicios y las APIs de Google, puedes elegir enviar paquetes a las direcciones IP asociadas con la VIP private.googleapis.com o restricted.googleapis.com. Para usar una VIP, debes configurar DNS de modo que las VMs de tu red de VPC resuelvan las solicitudes a *.googleapis.com y cualquier otro dominio al que necesites acceder. Por ejemplo, si usas Google Kubernetes Engine (GKE), también debes configurar *.gcr.io y *.pkg.dev, o si usas Cloud Run, configura *.run.app.

En la siguiente sección se describe cómo usar las zonas del DNS para enviar paquetes a las direcciones IP asociadas con la VIP elegida.

Cuando configures los registros DNS para las VIP, usa solo las direcciones IP que se describen en los siguientes pasos. No mezcles direcciones de las VIP private.googleapis.com y restricted.googleapis.com. Esto puede causar fallas intermitentes porque los servicios que se ofrecen difieren según el destino del paquete.

Crea una zona de DNS y registros para googleapis.com:

  1. Crea una zona de DNS privada para googleapis.com. Se recomienda crear una zona privada de Cloud DNS para este propósito.
  2. En la zona googleapis.com, crea los siguientes registros DNS para private.googleapis.com o restricted.googleapis.com, según el dominio que elijas usar.

    • Para private.googleapis.com:

      1. Crea un registro A para private.googleapis.com que apunte a las siguientes direcciones IP: 199.36.153.8, 199.36.153.9, 199.36.153.10 y 199.36.153.11.

      2. Si deseas conectarte a las APIs mediante direcciones IPv6, también configura un registro AAAA para private.googleapis.com que apunte a 2600:2d00:0002:2000::.

    • Para restricted.googleapis.com:

      1. Crea un registro A para restricted.googleapis.com que apunte a las siguientes direcciones IP: 199.36.153.4, 199.36.153.5, 199.36.153.6 y 199.36.153.7.

      2. Si deseas conectarte a las APIs mediante direcciones IPv6, también debes crear un registro AAAA para restricted.googleapis.com que apunte a 2600:2d00:0002:1000::.

    Si usas Cloud DNS, agrega los registros a la zona privada googleapis.com.

  3. En la zona googleapis.com, crea un registro CNAME para *.googleapis.com que apunte al dominio que configuraste: private.googleapis.com o restricted.googleapis.com.

Algunos servicios y APIs de Google se proporcionan a través de nombres de dominio adicionales, incluidos *.gcr.io, *.gstatic.com, *.pkg.dev, pki.goog, y *.run.app Consulta la tabla de rangos de direcciones IP y dominios en Opciones de dominio para determinar si se puede acceder a los servicios del dominio adicional mediante private.googleapis.com o restricted.googleapis.com. Luego, para cada uno de los dominios adicionales, sigue estos pasos:

  1. Crea una zona de DNS para DOMAIN (por ejemplo, gcr.io). Si usas Cloud DNS, asegúrate de que esta zona se encuentre en el mismo proyecto que la zona privada googleapis.com.

  2. En esta zona de DNS, crea los siguientes registros DNS para private.googleapis.com o restricted.googleapis.com, según el dominio que elijas:

    • Para private.googleapis.com:

      1. Crea un registro A para DOMAIN que apunte a las siguientes direcciones IP: 199.36.153.8, 199.36.153.9, 199.36.153.10 y 199.36.153.11.

      2. Si deseas conectarte a las APIs mediante direcciones IPv6, también debes crear un registro AAAA para DOMAIN que apunte a 2600:2d00:0002:2000::.

    • Para restricted.googleapis.com:

      1. Crea un registro A para DOMAIN que apunte a las siguientes direcciones IP: 199.36.153.4, 199.36.153.5, 199.36.153.6 y 199.36.153.7.

      2. Si deseas conectarte a las APIs mediante direcciones IPv6, también debes crear un registro AAAA para restricted.googleapis.com que apunte a 2600:2d00:0002:1000::.

  3. En la zona DOMAIN, crea un registro CNAME para *.DOMAIN que apunte a DOMAIN. Por ejemplo, crea un registro CNAME para *.gcr.io que apunte a gcr.io.

Opciones de enrutamiento

La red de VPC debe tener rutas adecuadas cuyo siguiente salto sea la puerta de enlace de Internet predeterminada. Google Cloud no admite el enrutamiento del tráfico a las API y a los servicios de Google a través de otras instancias de VM o siguientes saltos personalizados. A pesar de que se denominan puerta de enlace de Internet predeterminada, los paquetes enviados desde las VM de la red de VPC hacia las API y los servicios de Google permanecen dentro de la red de Google.

  • Si seleccionas los dominios predeterminados, las instancias de VM se conectarán a las API y a los servicios de Google mediante un subconjunto de direcciones IP externas de Google. Estas direcciones IP se pueden enrutar de forma pública, pero la ruta desde una VM en una red de VPC hacia esas direcciones permanece dentro de la red de Google.

  • Google no publica las rutas en Internet de ninguna de las direcciones IP que usan los dominios private.googleapis.com o restricted.googleapis.com. En consecuencia, solo las VM en una red de VPC o en sistemas locales conectados a una red de VPC pueden acceder a estos dominios.

Si la red de VPC contiene una ruta predeterminada cuyo siguiente salto es la puerta de enlace de Internet predeterminada, puedes usar esa ruta a fin de acceder a los servicios y a las API de Google, sin necesidad de crear rutas personalizadas. Consulta Enruta con una ruta predeterminada para obtener más detalles.

Si reemplazaste una ruta predeterminada (destino 0.0.0.0/0 o ::0/0) por una ruta personalizada cuyo próximo salto no es la puerta de enlace de Internet predeterminada, puedes cumplir con lo siguiente: requisitos de enrutamiento para los servicios y las API de Google mediante el enrutamiento personalizado en su lugar.

Si tu red de VPC no tiene una ruta IPv6 predeterminada, no tendrás conectividad IPv6 a las APIs y los servicios de Google. Agrega una ruta predeterminada IPv6 para permitir la conectividad IPv6.

Enrutamiento con una ruta predeterminada

Cada red de VPC contiene una ruta predeterminada de IPv4 (0.0.0.0/0) cuando se crea. Si habilitas direcciones IPv6 externas en una subred, se agregará una ruta IPv6 predeterminada (::/0) generada por el sistema a esa red de VPC.

Las rutas predeterminadas proporcionan una ruta a las direcciones IP para los siguientes destinos:

  • Los dominios predeterminados.

  • private.googleapis.com: 199.36.153.8/30 y 2600:2d00:0002:2000::/64.

  • restricted.googleapis.com: 199.36.153.4/30 y 2600:2d00:0002:1000::/64.

Para verificar la configuración de una ruta predeterminada en una red determinada, sigue estas instrucciones.

Consola

  1. En la consola de Google Cloud, ve a la página Supervisión.

    Ir a Rutas

  2. Filtra la lista de rutas para ver solo las rutas de la red que debes inspeccionar.

  3. Busca una ruta cuyo destino sea 0.0.0.0/0 para el tráfico de IPv4 o ::/0 para el tráfico de IPv6 y cuyo siguiente salto sea la puerta de enlace de Internet predeterminada.

gcloud

Usa el siguiente comando de gcloud y reemplaza NETWORK_NAME por el nombre de la red que quieres inspeccionar:

gcloud compute routes list \
    --filter="default-internet-gateway NETWORK_NAME"

Si necesitas crear una ruta IPv4 de reemplazo predeterminada, consulta Agrega una ruta estática.

Si necesitas crear una ruta IPv6 predeterminada de reemplazo, consulta Agrega una ruta predeterminada IPv6.

Enrutamiento personalizado

Como alternativa a una ruta predeterminada, puedes usar rutas estáticas personalizadas; cada una debe tener un destino más específico y usar el próximo salto de puerta de enlace de Internet predeterminada. La cantidad de rutas que necesitas y sus direcciones IP de destino dependen del dominio que elijas.

Además, te recomendamos que agregues rutas para 34.126.0.0/18 y 2001:4860:8040::/42. Para obtener más información, consulta Resumen de las opciones de configuración.

A fin de verificar la configuración de las rutas personalizadas para las APIs y los servicios de Google en una red determinada, sigue estas instrucciones.

Consola

  1. En la consola de Google Cloud, ve a la página Supervisión.

    Ir a Rutas

  2. Usa el campo de texto Tabla de filtros para filtrar la lista de rutas con los siguientes criterios y reemplaza NETWORK_NAME por el nombre de tu red de VPC.

    • Red: NETWORK_NAME
    • Tipo de salto siguiente: default internet gateway
  3. Observa la columna Rango de IP de destino para cada ruta. Si seleccionaste los dominios predeterminados, busca varias rutas estáticas personalizadas, una para cada rango de direcciones IP que usa el dominio predeterminado. Si eliges private.googleapis.com o restricted.googleapis.com, busca el rango de IP de ese dominio.

gcloud

Usa el siguiente comando de gcloud y reemplaza NETWORK_NAME por el nombre de la red que quieres inspeccionar:

gcloud compute routes list \
    --filter="default-internet-gateway NETWORK_NAME"

Las rutas se enumeran en formato de tabla, a menos que personalices el comando con la marca --format. Busca en la columna DEST_RANGE el destino de cada ruta. Si seleccionaste los dominios predeterminados, busca varias rutas estáticas personalizadas, una para cada rango de direcciones IP que usa el dominio predeterminado. Si eliges private.googleapis.com o restricted.googleapis.com, busca el rango de IP de ese dominio.

Si necesitas crear rutas, consulta Agrega una ruta estática.

Configuración de firewall

La configuración de firewall de la red de VPC debe permitir el acceso de las VM a las direcciones IP que usan las API y los servicios de Google. La regla implícita allow egress cumple con este requisito.

En algunas opciones de configuración de firewall, debes crear reglas de permiso de salida específicas. Por ejemplo, supongamos que creaste una regla de denegación de salida que bloquea el tráfico a todos los destinos (0.0.0.0 para IPv4 o ::/0 para IPv6). En ese caso, debes crear una regla de firewall de permiso de salida cuya prioridad sea superior a la regla de denegación de salida para cada rango de direcciones IP que usa el dominio elegido para las API y los servicios de Google.

Además, te recomendamos que incluyas 34.126.0.0/18 y 2001:4860:8040::/42 en tu regla de firewall de permiso de salida. Para obtener más información, consulta Resumen de las opciones de configuración.

Para crear reglas de firewall, consulta Crea reglas de firewall. Puedes limitar las VM a las que se aplican las reglas de firewall cuando defines el destino de cada regla de permiso de salida.

Direcciones IP para dominios predeterminados

En esta sección, se describe cómo crear una lista de rangos de IP de dominio predeterminados que usan las APIs y los servicios de Google, como *.googleapis.com y *.gcr.io. Estos rangos se asignan de forma dinámica y cambian con frecuencia, por lo que no es posible definir rangos de IP específicos para APIs o servicios individuales. Para mantener una lista precisa, configura la automatización para ejecutar la secuencia de comandos todos los días. Para obtener alternativas para mantener una lista de rangos de direcciones IP, considera usar la VIP privada.googleapis.com o Private Service Connect.

  • Google publica la lista completa de rangos de IP que pone a disposición de los usuarios en Internet, en goog.json.

  • Google también publica una lista de los rangos de direcciones IP externas internacionales y regionales disponibles para los recursos de Google Cloud del cliente en cloud.json.

Las direcciones IP que usan los dominios predeterminados para las APIs y los servicios de Google se ajustan a la lista de rangos calculados mediante la eliminación de todos los rangos en cloud.json de los que están en goog.json. Estas listas se actualizan con frecuencia.

Puedes usar la siguiente secuencia de comandos de Python a fin de crear una lista de rangos de direcciones IP que incluyan los que usan los dominios predeterminados para las APIs y los servicios de Google.

Para obtener información sobre cómo ejecutar esta secuencia de comandos, consulta Cómo ejecutar.

from __future__ import print_function

import json

try:
    from urllib import urlopen
except ImportError:
    from urllib.request import urlopen
    from urllib.error import HTTPError

import netaddr

IPRANGE_URLS = {
    "goog": "https://www.gstatic.com/ipranges/goog.json",
    "cloud": "https://www.gstatic.com/ipranges/cloud.json",
}

def read_url(url):
    try:
        return json.loads(urlopen(url).read())
    except (IOError, HTTPError):
        print("ERROR: Invalid HTTP response from %s" % url)
    except json.decoder.JSONDecodeError:
        print("ERROR: Could not parse HTTP response from %s" % url)

def get_data(link):
    data = read_url(link)
    if data:
        print("{} published: {}".format(link, data.get("creationTime")))
        cidrs = netaddr.IPSet()
        for e in data["prefixes"]:
            if "ipv4Prefix" in e:
                cidrs.add(e.get("ipv4Prefix"))
            if "ipv6Prefix" in e:
                cidrs.add(e.get("ipv6Prefix"))
        return cidrs

def main():
    cidrs = {group: get_data(link) for group, link in IPRANGE_URLS.items()}
    if len(cidrs) != 2:
        raise ValueError("ERROR: Could process data from Google")
    print("IP ranges for Google APIs and services default domains:")
    for ip in (cidrs["goog"] - cidrs["cloud"]).iter_cidrs():
        print(ip)

if __name__ == "__main__":
    main()