Configura el Acceso privado a Google

De forma predeterminada, cuando una VM de Compute Engine no tiene una dirección IP externa asignada a su interfaz de red, solo puede enviar paquetes a otros destinos con direcciones IP internas. Puedes permitir que estas VM se conecten al conjunto de direcciones IP externas que las API y los servicios de Google usan si habilitas el Acceso privado a Google en la subred que usa la interfaz de red de la VM.

El Acceso privado a Google también permite el acceso a las direcciones IP externas que usa App Engine, incluidos los servicios de terceros basados en App Engine.

Para ver las API y los servicios aptos que puedes usar con el Acceso privado a Google, visita Servicios compatibles en la descripción general del Acceso privado a Google.

Consulta Opciones de acceso privado a los servicios para obtener información general sobre el Acceso privado a Google y otras opciones de conectividad privada que ofrece Google Cloud.

Especificaciones

Puedes habilitar el Acceso privado a Google en cada subred cuando creas una o cuando la editas después de crearla.

Cuando el Acceso privado a Google está habilitado en una subred y se cumplen los requisitos de red para las API y los servicios de Google en la red de VPC, Google Cloud permite a las VM que tienen una interfaz de red en la subred habilitada enviar paquetes de las siguientes fuentes a direcciones IP externas de los servicios y las API de Google:

  • La dirección IP interna principal de la interfaz de red de una VM en una subred habilitada, excepto si esa interfaz tiene una dirección externa asignada

  • Una dirección IP interna de un rango de alias de IP de la interfaz de red de la VM en una subred habilitada

Una VM con una dirección IP externa asignada a su interfaz de red no necesita Acceso privado a Google para conectarse a los servicios y las API de Google. Puede conectarse a las API y los servicios de Google, siempre y cuando la interfaz de red con una dirección IP externa asociada esté en una red de VPC que cumpla con los requisitos de red.

Requisitos de red

El Acceso privado a Google tiene los siguientes requisitos:

  • Debido a que el Acceso privado a Google se habilita por subred, debes usar una red de VPC. Las redes heredadas no son compatibles porque no admiten subredes.

  • El Acceso privado a Google no habilita de forma automática ninguna API. Debes habilitar las API de Google por separado mediante la página API y servicios en Google Cloud Console.

  • Si usas los nombres de dominio private.googleapis.com o restricted.googleapis.com, tendrás que crear registros DNS para dirigir el tráfico a las direcciones IP asociadas con esos dominios. Consulta Configuración de red para obtener información.

  • La red debe tener rutas adecuadas para los rangos de IP de destino que usan las API y los servicios de Google. Estas rutas deben usar el siguiente salto de puerta de enlace de Internet predeterminado. Si usas los nombres de dominio private.googleapis.com o restricted.googleapis.com, solo necesitas una ruta (por dominio). De lo contrario, deberás crear varias rutas. Consulta Opciones de enrutamiento para obtener más detalles.

  • Los firewalls de salida deben permitir el tráfico a los rangos de direcciones IP que usan las API y los servicios de Google. La regla de firewall de permiso de salida implícita satisface este requisito. Para conocer otras formas de cumplir con el requisito de firewall, consulta la Configuración de firewall.

Permisos

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.

Logging

Cloud Logging captura todas las solicitudes a la API que se realizan desde las instancias de VM en las subredes que tienen el Acceso privado a Google habilitado. Las entradas de registro identifican el origen de la solicitud a la API como una dirección IP interna de la instancia que realiza la llamada.

Puedes configurar el uso diario y los informes mensuales de lista completa para que se envíen a un depósito de Cloud Storage. Consulta la página Visualiza informes de uso para obtener detalles.

Configuración de red

En esta sección, se describen los requisitos de red básicos que debes cumplir para que cualquier VM en la red de VPC (si usas el Acceso privado a Google o si tienes una dirección IP externa) acceda a las API y a los servicios de Google.

Primero debes elegir el dominio para acceder a las API y a los servicios de Google.

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

Todos los nombres de dominio para las API 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 API de Google, sin importar si son compatibles con los Controles del servicio de VPC. Incluye el acceso a la API de Google Maps, Google Ads, Google Cloud Platform y la mayoría de las API de Google cuyos nombres terminen en googleapis.com. No es compatible con las aplicaciones web de G Suite. 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
Habilita el acceso a la mayoría de los servicios y las API de Google, sin importar si son compatibles con los Controles del servicio de VPC. Incluye acceso a la API de Maps, Google Ads, Google Cloud Platform y la mayoría de las otras API de Google, incluidas las listas que aparecen a continuación. No es compatible con las aplicaciones web de G Suite.

Nombres de dominio que terminan con lo siguiente:
  • googleapis.com
  • googleadapis.com
  • ltsapis.goog
  • gcr.io
  • gstatic.com
  • appspot.com
  • cloudfunctions.net
  • pki.goog
  • cloudproxy.app
  • run.app
  • datafusion.googleusercontent.com
  • datafusion.cloud.google.com
Nombres de dominio o host que coinciden:
  • packages.cloud.google.com
  • gcr.io
  • appengine.google.com
  • pki.goog
Usa private.googleapis.com para acceder a las API 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.
  • Si usas los Controles del servicio de VPC, pero también debes acceder a las API y a los servicios de Google que no son compatibles con los Controles del servicio de VPC.
restricted.googleapis.com

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

Bloquea el acceso a los servicios y a las API de Google que no son compatibles con los Controles del servicio de VPC. No es compatible con las aplicaciones web de G Suite ni con G Suite APIs.
Usa restricted.googleapis.com para acceder a las API y a los servicios de Google mediante un conjunto de direcciones IP que solo se pueden enrutar desde Google Cloud. Elige restricted.googleapis.com cuando solo necesites acceso a las API y a los servicios de Google que son compatibles con los Controles del servicio de VPC. restricted.googleapis.com no permite el acceso a las API ni a los servicios de Google que no son compatibles con los Controles del servicio de VPC.

Configuración de DNS

Si eliges private.googleapis.com o restricted.googleapis.com, debes configurar el DNS de modo que las VM de la red de VPC resuelvan las solicitudes a *.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 uno de los siguientes registros A, según el dominio elegido:

    • Un registro A para private.googleapis.com que apunte a las siguientes direcciones IP: 199.36.153.8199.36.153.9199.36.153.10199.36.153.11
    • Un registro A para restricted.googleapis.com que apunte a las siguientes direcciones IP: 199.36.153.4199.36.153.5199.36.153.6199.36.153.7

    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 registro A que creaste en el paso anterior.

Algunas API y servicios de Google se proporcionan a través de nombres de dominio adicionales, incluidos *.gcr.io, *.gstatic.com y pki.goog. Consulta la tabla de rangos de direcciones IP y dominios en Requisitos de red 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 el dominio adicional (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, haz lo siguiente:
    • Crea un registro A para el nombre de dominio (zona); por ejemplo, gcr.io. Haz que este registro A apunte a las mismas cuatro direcciones IP para el nombre de dominio personalizado que elegiste (private.googleapis.com o restricted.googleapis.com).
    • Crea un registro CNAME para todos los nombres de host posibles del dominio adicional; para ello, usa un asterisco y un punto seguidos del nombre de dominio (zona). Por ejemplo, *.gcr.io. Haz que este registro CNAME apunte al registro A en la misma zona. Por ejemplo, haz que *.gcr.io apunte hacia 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 en cualquier dominio, sin necesidad de crear rutas personalizadas. Consulta Enruta con una ruta predeterminada para obtener más detalles.

Si reemplazaste la ruta predeterminada por una ruta estática personalizada que tenga el destino 0.0.0.0/0 y un siguiente salto que no sea la puerta de enlace de Internet predeterminada, puedes cumplir con los requisitos de enrutamiento para las API y los servicios de Google mediante el enrutamiento personalizado. Se recomienda usar el enrutamiento personalizado en estos casos:

  • Si tienes una ruta estática personalizada cuyo destino es 0.0.0.0/0 y el siguiente salto es un túnel de Cloud VPN, un balanceador de cargas de TCP/UDP interno o cualquier otra instancia de VM.
  • Si usas Cloud Router para aceptar una ruta dinámica personalizada con un destino 0.0.0.0/0.

Enrutamiento con una ruta predeterminada

Cada red de VPC contiene una ruta predeterminada cuando se crea. El siguiente salto de esta ruta es la puerta de enlace de Internet predeterminada y proporciona una ruta de acceso a los dominios predeterminados, private.googleapis.com y restricted.googleapis.com.

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

Console

  1. Ve a la página Rutas en Google Cloud Console.
    Ir a la página 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 y cuyo salto siguiente 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 de reemplazo predeterminada, consulta Agrega una ruta estática.

Enrutamiento personalizado

Como alternativa a una ruta predeterminada, puedes usar rutas estáticas personalizadas; cada una tiene un destino más específico y usa el siguiente 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.

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

Console

  1. Ve a la página Rutas en Google Cloud Console.
    Ir a la página 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 siguiente salto: default internet gateway
  3. Observa la columna Rango de IP de 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.

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). 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.

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

Sigue estos pasos para determinar los rangos de direcciones IP que usan los dominios predeterminados, como *.googleapis.com y *.gcr.io.

  • Google publica la lista completa de rangos de IP que anuncia en Internet en goog.json.
  • Google también publica una lista de los rangos de direcciones IP externas globales y regionales que puede usar el cliente de Google Cloud en cloud.json.

Las direcciones IP que usan los dominios predeterminados para las API 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. En el siguiente ejemplo, se muestra cómo obtener este rango con Python.

Python

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 API y los servicios de Google:

#!/usr/bin/env python3

import json
import netaddr
import urllib.request

goog_url="www.gstatic.com/ipranges/goog.json"
cloud_url="www.gstatic.com/ipranges/cloud.json"

def read_url(url, fallback_to_http=False,attempts=2):
   if fallback_to_http:
      url = "http://" + url
   else:
      url = "https://" + url
   try:
      s = urllib.request.urlopen(url).read()
      return json.loads(s)
   except urllib.error.HTTPError:
      print("Invalid HTTP response from %s" % url)
      return {}
   except json.decoder.JSONDecodeError:
      print("Could not parse HTTP response from %s" % url)
      return {}
   except urllib.error.URLError:
      if attempts > 1:
         url = url.replace("https://","").replace("http://","")
         attempts -=1
         print("Error opening URL; trying HTTP instead of HTTPS.")
         return read_url(url,fallback_to_http=True,attempts=attempts)
      else:
         print("Error opening URL.")
         return {}

def main():
   goog_json=read_url(goog_url)
   cloud_json=read_url(cloud_url)

   if goog_json and cloud_json:
      print("{} published: {}".format(goog_url,goog_json.get('creationTime')))
      print("{} published: {}".format(cloud_url,cloud_json.get('creationTime')))
      goog_cidrs = netaddr.IPSet()
      for e in goog_json['prefixes']:
         if e.get('ipv4Prefix'):
            goog_cidrs.add(e.get('ipv4Prefix'))
      cloud_cidrs = netaddr.IPSet()
      for e in cloud_json['prefixes']:
         if e.get('ipv4Prefix'):
            cloud_cidrs.add(e.get('ipv4Prefix'))
      print("IP ranges for Google APIs and services default domains:")
      for i in goog_cidrs.difference(cloud_cidrs).iter_cidrs():
         print(i)

if __name__=='__main__':
   main()

Configuración del Acceso privado a Google

Puedes habilitar el Acceso privado a Google después de cumplir con los requisitos de red en tu red de VPC.

Habilita el Acceso privado a Google

Sigue estos pasos para habilitar el acceso privado a Google:

Console

  1. Ve a la página de redes de VPC en Google Cloud Console.
    Ir a la página Redes de VPC
  2. Haz clic en el nombre de la red que contiene la subred en la que necesitas habilitar el Acceso privado a Google.
  3. Para una subred existente, sigue estos pasos:
    1. Haz clic en el nombre de la subred. Se mostrará la página Detalles de la subred.
    2. Haz clic en Editar.
    3. En la sección Acceso privado a Google selecciona Habilitar.
    4. Haz clic en Guardar.
  4. Para una subred nueva, haz lo siguiente:
    1. Haz clic en Agregar subred.
    2. Especifica el Nombre y la Región de la subred nueva.
    3. Especifica el Rango de direcciones IP de la subred. Este rango no puede superponerse con ninguna subred de la red de VPC actual ni con ninguna red conectada mediante intercambio de tráfico entre redes de VPC o VPN.
    4. Realiza otras selecciones en la subred nueva para satisfacer tus necesidades. Por ejemplo, es posible que debas crear rangos de IP de subredes secundarios o habilitar los registros de flujo de VPC.
    5. Selecciona Habilitar en la sección Acceso privado a Google.
    6. Haz clic en Agregar.

gcloud

Para una subred existente:

  1. Determina el nombre y la región de la subred. Para ver una lista de las subredes de una red en particular, usa el siguiente comando:

    gcloud compute networks subnets list --filter=network-name
    
  2. Ejecuta el siguiente comando para habilitar el Acceso privado a Google:

    gcloud compute networks subnets update subnet-name \
    --region=region \
    --enable-private-ip-google-access
    
  3. Verifica que el Acceso privado a Google esté habilitado mediante la ejecución del siguiente comando:

    gcloud compute networks subnets describe subnet-name \
    --region=region \
    --format="get(privateIpGoogleAccess)"
    

En todos los comandos anteriores, reemplaza los siguientes por valores válidos:

  • subnet-name: El nombre de la subred
  • region: La región de la subred
  • network-name: El nombre de la red de VPC que contiene la subred

Cuando crees una subred nueva, usa la marca --enable-private-ip-google-access para habilitar el Acceso privado a Google:

gcloud compute networks subnets create subnet-name \
    --region=region \
    --network=network-name \
    --range=primary-ip-range \
    --enable-private-ip-google-access

Reemplaza los siguientes elementos por valores válidos:

  • subnet-name: El nombre de la subred
  • region: La región de la subred
  • network-name: El nombre de la red de VPC que contiene la subred
  • primary-ip-range: El rango de direcciones IP principal de la subred

Inhabilita el Acceso privado a Google

Sigue estos pasos para inhabilitar el acceso privado a Google en una subred existente:

Console

  1. Ve a la página de redes de VPC en Google Cloud Console.
    Ir a la página Redes de VPC
  2. Haz clic en el nombre de la red que contiene la subred en la que necesitas inhabilitar el Acceso privado a Google.
  3. Haz clic en el nombre de una subred existente. Se mostrará la página Detalles de la subred.
  4. Haz clic en Editar.
  5. En la sección Acceso privado a Google selecciona Inhabilitar.
  6. Haz clic en Guardar.

gcloud

  1. Determina el nombre y la región de la subred. Para ver una lista de las subredes de una red en particular, usa el siguiente comando:

    gcloud compute networks subnets list \
        --filter=network-name
    
  2. Ejecuta el siguiente comando para inhabilitar el Acceso privado a Google:

    gcloud compute networks subnets update subnet-name \
        --region=region \
        --no-enable-private-ip-google-access
    
  3. Ejecuta el siguiente comando para verificar que el Acceso privado a Google esté inhabilitado:

    gcloud compute networks subnets describe subnet-name \
        --region=region \
        --format="get(privateIpGoogleAccess)"
    

En todos los comandos anteriores, reemplaza los siguientes por valores válidos:

  • subnet-name: El nombre de la subred
  • region: La región de la subred
  • network-name: El nombre de la red de VPC que contiene la subred

Próximos pasos