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

Puedes usar los Controles del servicio de VPC para controlar el acceso a los servicios y las API de Google desde 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 dentro de un perímetro de servicio solo a los servicios y las API de Google compatibles con los Controles del servicio de VPC, los hosts deben enviar sus solicitudes al nombre de dominio restricted.googleapis.com en lugar de *.googleapis.com. El dominio restricted.googleapis.com se resuelve en un rango de VIP (dirección IP virtual) 199.36.153.4/30. Este rango de direcciones IP no se anuncia a Internet.

En las siguientes secciones, se describe cómo configurar la conectividad privada para hosts en una red de VPC o una red local. Para obtener una descripción general y diagramas de topología de ejemplo, consulta Acceso privado a Google con los Controles del 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 requieren una red de VPC. Se admiten las redes de VPC en modo automático y personalizado. No se admiten las redes heredadas.
  • Para las instancias de VM en una red de VPC, estas deben tener solo una dirección IP privada (sin dirección IP pública) y estar en la subred con el Acceso privado a Google habilitado.
  • Para los hosts locales, debes tener un túnel de Cloud VPN existente o una conexión de Cloud Interconnect a la red de VPC.

Descripción general del procedimiento

Para configurar la conectividad privada, completa las siguientes tareas:

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

Configura una ruta a restricted.googleapis.com

En el Acceso privado a Google y el Acceso privado a Google para hosts locales, la red de VPC debe incluir una ruta con un destino a 199.36.153.4/30 cuyo siguiente salto sea la puerta de enlace de Internet predeterminada. Aunque el salto siguiente es una puerta de enlace de Internet predeterminada, el tráfico que se envía a 199.36.153.4/30 permanece dentro de la red de Google. Es posible que la red de VPC ya tenga una ruta predeterminada cuyo salto siguiente sea 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 salto siguiente 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 a fin de que los hosts en la red local puedan obtener información sobre la VIP restringida. Puedes crear una ruta dinámica personalizada mediante Cloud Router para anunciar la VIP restringida.

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

Configura 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 compatibles con los Controles del servicio de VPC.

  • Agrega una ruta personalizada que permita el acceso solo a los servicios administrados de Google protegidos por los Controles del 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
    

    Reemplaza lo siguiente:

    • ROUTE_NAME: Un nombre para la ruta personalizada
    • NETWORK_NAME: El nombre de tu red de VPC

Anuncia la ruta restringida a los hosts en una red local

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

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

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.
    • Fuente: Selecciona Rango de IP personalizado para especificar un rango de IP personalizado.
    • Rango de direcciones IP: Especifica 199.36.153.4/30.
    • Descripción: Agrega una descripción de Restricted Google APIs IPs.
  9. Cuando termines de agregar las rutas, selecciona Guardar.

gcloud


Ejecuta el comando update y usa 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. En el siguiente ejemplo, se actualiza el Cloud Router my-router para anunciar todas las subredes y el rango de IP 199.36.153.4/30 de las API de Google restringidas:

    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 de las 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.
    • Fuente: Selecciona Rango de IP personalizado para especificar un rango de IP personalizado.
    • Rango de direcciones IP: Especifica 199.36.153.4/30.
    • Descripción: Agrega una descripción de Restricted Google APIs IPs.
  9. Cuando termines de agregar las rutas, selecciona Guardar.

gcloud


Ejecuta el comando update-bgp-peer mediante 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. Con el siguiente ejemplo, puedes actualizar la sesión de BGP my-bgp-session en el Cloud Router my-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 de las API de Google restringidas, 199.36.153.4/30, 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.

Configura reglas de firewall

En el Acceso privado a Google, las instancias de VM usan direcciones IP internas y no requieren direcciones IP externas para alcanzar los recursos protegidos de la API de Google. Sin embargo, es posible que las instancias de VM tengan direcciones IP externas o que cumplan con los requisitos de acceso a Internet. Además de las rutas personalizadas, puedes restringir el tráfico de salida desde las instancias de VM en la red de VPC mediante la creación de reglas de firewall para denegar el tráfico de salida.

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

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

Reglas de firewall en redes locales

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

Configura DNS

Para el uso general de los Controles del servicio de VPC, te recomendamos que uses las políticas de respuesta de Cloud DNS a fin de configurar DNS para tus redes de VPC. Esto te permite configurar DNS sin tener que crear una zona privada administrada. Una política de respuesta usa el comportamiento passthru para permitir que los nombres, como www.googleapis.com, pasen por el nombre comodín en el ejemplo *.googleapis.com. Para obtener más información, consulta Administra políticas y reglas de respuesta.

También puedes usar zonas privadas administradas para tus redes de VPC. Las zonas de DNS privadas de Cloud DNS te permiten alojar una zona DNS a la que se puede acceder desde redes de VPC autorizadas. Para usar las direcciones IP de las API de Google restringidas, si configuras el reenvío desde ciertos servidores de nombres locales, puedes crear una zona privada para googleapis.com con un registro A para restricted.googleapis.com y registros CNAME apropiados para cada nombre de *.googleapis.com. Para obtener más información, consulta Administra zonas.

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

Configura DNS con Cloud DNS

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

Puedes configurar DNS con Cloud DNS mediante políticas de respuesta o zonas privadas.

Usa políticas de respuesta para configurar Cloud DNS

Dirige nombres específicos a las direcciones VIP restringidas

Puedes configurar una política de respuesta que tenga datos CNAME locales para cada zona a fin de traducir las solicitudes a las API de Google a las API restringidas de Google. Los nombres que no se especifican se resuelven mediante un DNS normal.

Por ejemplo, puedes crear una política de respuesta para pubsub.googleapis.com, que tiene datos CNAME locales para una zona, a fin de traducir las solicitudes a la API de Google a restricted.googleapis.com. Mientras tanto, www.googleapis.com, que no se especifica, continúa resolviéndose mediante DNS normal.

En la configuración de ejemplo siguiente, creas una política y la aplicas a una red de VPC específica.

gcloud

  1. Para crear una política de respuesta, ejecuta el comando gcloud beta dns response-policies create:

    gcloud beta dns response-policies create RESPONSE_POLICY_NAME \
        --networks=NETWORK \
        --description=DESCRIPTION
    

    Reemplaza lo siguiente:

    • RESPONSE_POLICY_NAME: el nombre o ID de la política de respuesta que deseas crear, como myresponsepolicy
    • NETWORK: una lista separada por comas de nombres de redes para asociarla con la política de respuesta, como network1,network2
    • DESCRIPTION: una descripción de la política de respuesta, como My new response policy
  2. Para agregar una regla a la política, ejecuta el comando gcloud beta dns response-policies rules create:

    gcloud beta dns response-policies rules create RESPONSE_POLICY_RULE_NAME \
        --response-policy=RESPONSE_POLICY_NAME \
        --dns-name=pubsub.googleapis.com. \
        --local-data=name="pubsub.googleapis.com.",type="A",ttl=300,rrdatas="199.36.153.4|199.36.153.5|199.36.153.6|199.36.153.7"
    

    Reemplaza lo siguiente:

    • RESPONSE_POLICY_RULE_NAME: un nombre para la regla de política de respuesta que deseas crear, como myresponsepolicyrule
    • RESPONSE_POLICY_NAME: el nombre de la política de respuesta, como myresponsepolicy

API

  1. Crea una política de respuesta por URL:

    {
      kind: "dns#responsePolicy",
      response_policy_name: RESPONSE_POLICY_NAME,
      description: RESPONSE_POLICY_DESCRIPTION,
      networks: [
        {
          network_url: URL_TO_NETWORK;
        }
      ]
    }
    

    Reemplaza lo siguiente:

    • RESPONSE_POLICY_NAME: un nombre para la política de respuesta
    • RESPONSE_POLICY_DESCRIPTION: una descripción de la política de respuesta
    • URL_TO_NETWORK: la URL para la que estás creando la política de respuesta

  2. Agrega una regla a la política:

    {
      kind: "dns#responsePolicyRules",
      rule_name: RULE_NAME,
      dns_name: DNS_NAME,
      local_data: [
        {
          name: "pubsub.googleapis.com.",
          type: "A",
          ttl: 300,
          rrdata: ["199.36.153.4", "199.36.153.5", "199.36.153.6", "199.36.153.7"]
        }
      ]
    }
    

    Reemplaza lo siguiente:

    • RULE_NAME: un nombre para la regla que estás creando, como pubsub
    • DNS_NAME: es el nombre de DNS para el que creas la regla, como pubsub.googleapis.com.. Ten en cuenta el punto final

Dirige todos los nombres, excepto algunos a las direcciones VIP restringidas

Puedes configurar reglas para eximir algunas respuestas de DNS de una regla de política que abarca un dominio completo o un bloque de direcciones IP grande. Este concepto se denomina comportamiento passthru. Si usas el comportamiento passthru, puedes permitir que los nombres que no son compatibles con los controles de servicios estén permitidos después del nombre del comodín.

Por ejemplo, puedes autorizar que www.googleapis.com esté permitido después del nombre del comodín en el ejemplo *.googleapis.com. La coincidencia exacta de www tiene prioridad sobre el comodín *.

En la siguiente configuración de ejemplo, crearás una política con un nombre específico y la aplicarás a una red de VPC específica. La regla permite que www.googleapis.com omita el comodín *.googleapis.com.

gcloud

  1. Para crear una política de respuesta, ejecuta el comando gcloud beta dns response-policies create:

    gcloud beta dns response-policies create RESPONSE_POLICY_NAME \
        --networks=NETWORK \
        --description=DESCRIPTION
    

    Reemplaza lo siguiente:

    • RESPONSE_POLICY_NAME: el nombre o ID de la política de respuesta que deseas crear, como myresponsepolicy
    • NETWORK: una lista separada por comas de nombres de redes para asociarla con la política de respuesta, como network1,network2
    • DESCRIPTION: una descripción de la política de respuesta, como My new response policy
  2. Para agregar una regla de omisión a la política, ejecuta el comando gcloud beta dns response-policies rules create y establece la marca --behavior en bypassResponsePolicy:

    gcloud beta dns response-policies rules create RESPONSE_POLICY_RULE_NAME \
        --response-policy=RESPONSE_POLICY_NAME \
        --dns-name=DNS_NAME \
        --behavior=bypassResponsePolicy
    

    Reemplaza lo siguiente:

    • RESPONSE_POLICY_RULE_NAME: un nombre para la regla de política de respuesta que deseas crear, como myresponsepolicyrule
    • RESPONSE_POLICY_NAME: el nombre de la política de respuesta, como myresponsepolicy
    • DNS_NAME: el nombre de dominio o de DNS, como www.googleapis.com

API

  1. Crea una política de respuesta:

    {
      kind: "dns#responsePolicy",
      response_policy_name: RESPONSE_POLICY_NAME,
      description: RESPONSE_POLICY_DESCRIPTION,
      networks: [
        {
          network_url: URL_TO_NETWORK;
        }
      ]
    }
    

    Reemplaza lo siguiente:

    • RESPONSE_POLICY_NAME: un nombre para la política de respuesta, como my-response-policy
    • RESPONSE_POLICY_DESCRIPTION: una descripción de la política de respuesta, como my response policy
    • URL_TO_NETWORK: La URL para la que estás creando la política de respuesta
  2. Agrega una regla a la política:

    {
      kind: "dns#responsePolicyRules",
      rule_name: RULE_NAME,
      dns_name: DNS_NAME,
      local_data: [
        {
          name: "*.googleapis.com.",
          type: "A",
          ttl: 300,
          rrdata: ["restricted.googleapis.com."]
        }
      ]
    }
    {
      kind: "dns#responsePolicyRules",
      rule_name: "www-passthru",
      dns_name: "www.googleapis.com.",
      behavior: BYPASS_RESPONSE_POLICY
    }
    

    Reemplaza lo siguiente:

    • RULE_NAME: un nombre para la regla que estás creando, como googleapis
    • DNS_NAME: Es el nombre del comodín DNS para el que creas la regla, como *.googleapis.com.; fíjate en el punto final

Usa zonas privadas para configurar Cloud DNS

Usa zonas privadas para configurar Cloud DNS cuando no puedas usar políticas de respuesta.

  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
    

    Reemplaza lo siguiente:

    • 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 contiene tu red de VPC.
    • NETWORK_NAME: 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
    

    Reemplaza ZONE_NAME por 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
    

    Reemplaza ZONE_NAME por 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
    

    Reemplaza ZONE_NAME por 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
    

    Reemplaza ZONE_NAME por el nombre de la zona que creaste en el primer paso.

  5. Opcional. Para permitir que los hosts locales lleguen a la VIP restringida, completa los siguientes pasos:

    1. Crea una política de DNS y habilita el reenvío de DNS entrante a fin de que los servicios de resolución de nombres de la red de VPC estén disponibles de forma externa 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
      

      Reemplaza lo siguiente:

      • POLICY_NAME es un nombre para la política que estás creando. Por ejemplo, apipolicy.
      • PROJECT_ID es el ID del proyecto que contiene 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 la red local, apunta el DNS local hacia la dirección IP de reenvío de Cloud DNS. Para encontrar la dirección IP de reenvío, usa el comando compute addresses list:

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

Configura DNS con BIND

Si usas BIND en la resolución de DNS, puedes configurarlo para resolver las solicitudes a la API de Google en las API de Google restringidas. Usa el siguiente ejemplo de configuración de BIND, que usa zonas de política 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.

Configura un DNS para casos especiales

Cuando necesites configurar el DNS en casos especiales, ten en cuenta lo siguiente:

  • No se admite BIND personalizado cuando se usa Dataflow. Para personalizar la resolución de DNS cuando usas Dataflow con los Controles del servicio de VPC, usa las zonas privadas de Cloud DNS, en lugar de los servidores BIND personalizados. Para usar tu resolución de DNS local, considera usar un método de reenvío de DNS de Google Cloud.
  • Es posible que también debas configurar el DNS para gcr.io si, por ejemplo, usas Google Kubernetes Engine (GKE). Si deseas obtener más información, consulta Configura Container Registry para clústeres privados de GKE.