Usar las API desde una red externa

En este instructivo, se muestra cómo usar las API de los servicios de Google Cloud Platform (GCP) desde una red externa, como tu red privada local o la red de otro proveedor de servicios en la nube. Este enfoque permite que tus servidores locales que están conectados a tu red privada accedan a los servicios de GCP sin usar las direcciones IP públicas. En este instructivo se presenta un ejemplo en el que se usa una red privada en Amazon Virtual Private Cloud (Amazon VPC) para emular una red privada local.

Arquitectura

En el siguiente diagrama, se resume la arquitectura general que creas en este instructivo.

  • Conectas una red privada en Amazon VPC a una red virtual en tu proyecto de GCP a través de VPN con IPsec. Si usas una red privada local en vez de Amazon VPC, usarás Cloud Interconnect para tener una conexión de red privada a tu proyecto de GCP.

  • Usas el Acceso privado a Google desde los proyectos de GCP. Los servidores que se ejecutan fuera de los proyectos de GCP no pueden alcanzar las API de GCP, como Cloud Translation, mediante una dirección IP interna, incluso cuando el acceso privado a Google está habilitado. Por lo tanto, usas un proxy HTTP o HTTPS en tu proyecto de GCP para transferir las solicitudes de API desde servidores externos hacia los servicios y las API de Google Cloud Platform mediante las direcciones IP internas.

arquitectura general

Objetivos

  • Habilitar el acceso privado a Google para permitir que las instancias de VM de Compute Engine accedan a las API de Google Cloud Platform sin utilizar direcciones IP públicas

  • Configurar un proxy HTTP o HTTPS mediante una instancia de Compute Engine para permitir que los servidores en Amazon VPC accedan a las API de Google Cloud Platform sin utilizar direcciones IP públicas

Costos

En este instructivo se usan los siguientes componentes facturables de Google Cloud Platform:

Usa la calculadora de precios a fin de generar una estimación de los costos según el uso previsto. Los usuarios nuevos de GCP pueden optar a una prueba gratuita.

Además, podrías generar costos por los servicios de Amazon Web Services (AWS), como las instancias de Amazon VPC, VPN y Amazon Elastic Compute Cloud (Amazon EC2).

Antes de comenzar

Antes de comenzar el instructivo, usa la GCP Console para crear un proyecto de GCP y habilitar la facturación. No uses un proyecto existente porque cuando termines, deberás borrar el proyecto para evitar generar mayores costos.

  1. Crea un proyecto de GCP para el instructivo.

    IR A LA PÁGINA DE ADMINISTRAR RECURSOS

  2. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  3. Habilita la traducción.

    HABILITAR LA traducción

    La API de Compute Engine se habilita automáticamente en proyectos nuevos.

  4. En la GCP Console, abre la página de Credenciales.

    IR A CREDENCIALES

  5. Para Crear credenciales, selecciona clave de API y luego haz clic en Cerrar.

  6. Toma nota de la string de la clave de API que aparece en la consola.

Conectar Amazon VPC a tu red virtual de GCP

En este instructivo, usas Amazon VPC para emular tu centro de datos local. Con el objetivo de establecer Amazon VPC, sigue las instrucciones que aparecen en Usar Cloud VPN con Amazon Web Services, en las secciones "VPN con IPsec basado en políticas: configuración - AWS" y "VPN con IPsec basado en políticas: configuración - IU de GCP".

  • Usa la VPC predeterminada con la dirección de red 172.31.0.0/16 CIDR.
  • Usa la subred predeterminada con la dirección de red 172.31.0.0/16 CIDR.
  • Crea una conexión de VPN con AWS usando la dirección IP estática aws-vpn como una puerta de enlace de VPN de Compute Engine.

Usas VPN con IPsec para conectar Amazon VPC a la red virtual de GCP que creas en GCP.

gcloud

  1. Abre Cloud Shell.

    ACTIVAR Cloud Shell

  2. Crea una red virtual de GCP:

    gcloud compute networks create "aws-vpn" --subnet-mode "auto"
    gcloud compute addresses create "aws-vpn" --region "asia-east1"
    
  3. Sigue las instrucciones que aparecen en Usar Cloud VPN con Amazon Web Services.

  4. Para mostrar la configuración de VPN en la GCP Console, abre la página de VPN:

    ABRIR VPN

    Tu configuración de VPN en la GCP Console es similar a la siguiente imagen. La marca de verificación verde indica que la dirección IP de par remoto para que aws-vpn está configurada correctamente.

    Configuración de VPN en la GCP Console

Console

  1. En la GCP Console, ve a la página de Redes de VPC.

    ABRIR REDES DE VPC

  2. Haz clic en Crear una red de VPC.

  3. Configura las siguientes opciones y deja las demás como predeterminadas:

    • Nombre: aws-vpn
    • Subredes: Automatic
  4. Haz clic en Crear.

  5. Ve a la página de Direcciones IP externas:

    ABRIR DIRECCIONES IP EXTERNAS

  6. Haz clic en Reservar dirección estática.

  7. Configura las siguientes opciones y deja las demás como predeterminadas:

    • Nombre: aws-vpn
    • Región: asia-east1
  8. Haz clic en Reservar.

  9. Sigue las instrucciones que aparecen en Usar Cloud VPN con Amazon Web Services.

  10. Para mostrar la configuración de VPN en la GCP Console, abre la página de VPN:

    ABRIR VPN

    Tu configuración de VPN en la GCP Console es similar a la siguiente imagen. La marca de verificación verde indica que la dirección IP de par remoto para que aws-vpn está configurada correctamente.

    Configuración de VPN en la GCP Console

Configurar la tabla de enrutamiento de Amazon VPC

Para permitir que las instancias de Amazon EC2 accedan a la red virtual GCP en tu proyecto, sigue los siguientes pasos:

  1. En la consola de administración de AWS, haz clic en la pestaña Tabla de rutas.

  2. Selecciona Propagación de rutas y haz clic en Editar.

  3. Selecciona Propagar en tu rango de IP privado de red de VPC y luego haz clic en Guardar.

Habilitar el acceso privado a Google

Habilitas el acceso privado a Google en la subred conectada a Amazon VPC.

gcloud

  1. Ejecuta el siguiente comando en Cloud Shell:

    gcloud compute networks subnets update aws-vpn \
        --enable-private-ip-google-access --region asia-east1

Console

  1. En la GCP Console, ve a la página de Redes de VPC:

    ABRIR REDES DE VPC

  2. Selecciona la subred aws vpn en la región de asia-east1.

  3. Haz clic en Editar.

  4. En el cuadro de Acceso privado a Google, selecciona Habilitar y luego haz clic en Guardar.

Configurar las reglas de firewall

El próximo paso consiste en agregar reglas de firewall que permiten la conexión del proxy desde Amazon VPC y una conexión SSH desde todas las redes externas. La conexión SSH se usa solo para configurar la instancia de proxy HTTP o HTTPS. Para configurar el proxy sin acceder manualmente en la instancia, puedes usar una secuencia de comandos de inicio, en cuyo caso no necesitas crear la regla de firewall para la conexión SSH.

gcloud

  1. En Cloud Shell, agrega una regla de firewall para el proxy:

    gcloud compute firewall-rules create "aws-vpn-allow-proxy" \
      --description "Allow Google private access from AWS VPC" \
      --network "aws-vpn" --allow tcp:8118 \
      --source-ranges "172.31.0.0/16" --target-tags "api-proxy"
    

    Cuando se crea la regla de firewall, aparece el siguiente resultado:

    Creating firewall...done.
    NAME                 NETWORK  SRC_RANGES     RULES     SRC_TAGS  TARGET_TAGS
    aws-vpn-allow-proxy  aws-vpn  172.31.0.0/16  tcp:8118            api-proxy
    
  2. Si no usas una secuencia de comandos de inicio, agrega una regla de firewall para la conexión SSH:

    gcloud compute firewall-rules create "aws-vpn-allow-ssh" \
      --description "Allow SSH from anywhere" \
      --network "aws-vpn" --allow tcp:22  --source-ranges "0.0.0.0/0"
    

    Cuando se crea la regla de firewall, aparece el siguiente resultado:

    Creating firewall...done.
    NAME               NETWORK  SRC_RANGES  RULES   SRC_TAGS  TARGET_TAGS
    aws-vpn-allow-ssh  aws-vpn  0.0.0.0/0   tcp:22
    

Console

  1. En la GCP Console, ve a la página de reglas de Firewall:

    ABRIR REGLAS DE FIREWALL

  2. Haz clic en Crear regla de firewall.

  3. Configura las siguientes opciones y deja las demás como predeterminadas:

    • Nombre: aws-vpn-allow-proxy
    • Descripción: Allow Google Private Access from Amazon VPC
    • Red: aws-vpn
    • Etiquetas de destino: api-proxy
    • Rangos de IP fuente: 172.31.0.0/16
    • Protocolos y puertos: tcp:8118
  4. Haz clic en Crear.

  5. Haz clic en Crear regla de firewall.

  6. Configura las siguientes opciones y deja las demás como predeterminadas:

    • Nombre: aws-vpn-allow-ssh
    • Descripción: Allow SSH from anywhere
    • Red: aws-vpn
    • Etiquetas de destino: api-proxy
    • Rangos de IP de fuente: 0.0.0.0/0
    • Protocolos y puertos: tcp:22
  7. Haz clic en Crear.

Crear una instancia de proxy HTTP o HTTPS

Luego tienes que crear una instancia de Compute Engine, configurarla como un proxy HTTP o HTTPS y acceder.

gcloud

  1. Inicia una instancia de Compute Engine:

    gcloud compute instances create "api-proxy" \
      --zone "asia-east1-a" --machine-type "n1-standard-1" \
      --subnet "aws-vpn" --private-network-ip "10.140.0.2" \
      --tags "api-proxy"
    

    Especifica la dirección IP privada de la instancia que quieres usar como una dirección de proxy.

  2. Accede a la instancia:

    gcloud compute ssh "api-proxy" --zone "asia-east1-a"
  3. En la sesión SSH, instala el servicio privoxy:

    sudo apt-get -y install privoxy
  4. Configura el servicio privoxy:

    sudo sed -i "s/listen-address  127.0.0.1:8118/listen-address  10.140.0.2:8118/" /etc/privoxy/config
    sudo systemctl restart privoxy
    
  5. Confirma que el servicio esté configurado para aceptar conexiones a la dirección IP 10.140.0.2 a través del puerto 8118:

    sudo netstat -nlt

    El resultado es similar al siguiente:

    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State
    tcp        0      0 10.140.0.2:8118         0.0.0.0:*               LISTEN
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
    tcp6       0      0 :::22                   :::*                    LISTEN
    

Console

  1. En la GCP Console, ve a la página de VM Instances.

    ABRIR INSTANCIAS DE VM

  2. Haz clic en Crear.

  3. En la página Crear una instancia, configura las siguientes opciones y deja las demás como predeterminadas:

    • Nombre: api-proxy
    • Zona: asia-east1-a
  4. Abre Administración, seguridad, discos, herramientas de redes, un solo inquilino y selecciona Herramientas de redes.

  5. Configura las siguientes opciones y deja las demás como predeterminadas:

    • Etiquetas de red: api-proxy
    • Interfaz de red > Red: aws-vpn
    • Interfaz de red > Subred: aws-vpn(10.140.0.0/20)
    • Interfaz de red > IP interna primaria: Custom
    • Interfaz de red > Dirección IP efímera personalizada: 10.140.0.2
  6. Haz clic en Listo.

  7. Haz clic en Crear.

  8. Selecciona la instancia api-proxy y haz clic en SSH para abrir una terminal SSH.

  9. En la sesión SSH, instala el servicio privoxy:

    sudo apt-get -y install privoxy
  10. Configura el servicio privoxy:

    sudo sed -i "s/listen-address  127.0.0.1:8118/listen-address  10.140.0.2:8118/" /etc/privoxy/config
    sudo systemctl restart privoxy
    
  11. Confirma que el servicio esté configurado para aceptar conexiones a la dirección IP 10.140.0.2 a través del puerto 8118:

    sudo netstat -nlt

    El resultado es similar al siguiente:

    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State
    tcp        0      0 10.140.0.2:8118         0.0.0.0:*               LISTEN
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
    tcp6       0      0 :::22                   :::*                    LISTEN
    
  12. Sal de la instancia:

    exit
    

En este punto, ya no necesitas la conexión SSH a la instancia. Si tus estándares de seguridad requieren que quites la regla de firewall que permite la conexión SSH, realiza la siguiente operación:

gcloud

  1. Borra la regla de firewall:

    gcloud compute firewall-rules delete "aws-vpn-allow-ssh"

Console

  1. En la GCP Console, ve a la página de reglas de Firewall:

    ABRIR REGLAS DE FIREWALL

  2. Selecciona aws-vpn-allow-ssh.

  3. Haz clic en Borrar.

Quitar una dirección IP externa de la instancia de proxy

Debes evitar que la instancia de proxy use accidentalmente una dirección IP pública para alcanzar las API de GCP. En esta sección se muestra cómo quitar la dirección IP externa de la instancia de proxy.

gcloud

  1. Determina el nombre de la configuración:

    gcloud compute instances describe api-proxy | grep -A5 accessConfigs

    En el siguiente resultado de ejemplo, el nombre de la configuración para la dirección IP externa es external-nat.

    - accessConfigs:
    - kind: compute#accessConfig
        name: external-nat
        natIP: 104.199.157.31
        type: ONE_TO_ONE_NAT
    kind: compute#networkInterface
    
  2. Quita la dirección IP externa y especifica el nombre de la configuración del paso anterior.

    gcloud compute instances delete-access-config api-proxy --access-config-name "external-nat"

Console

  1. En GCP Console, ve a la página de VM Instances.

    ABRIR INSTANCIAS DE VM

  2. Haz clic en api-proxy.

  3. Haz clic en Editar.

  4. Haz clic en nic0: aws-vpn.

  5. Configura las siguientes opciones y deja las demás como predeterminadas:

    • IP externa: None
  6. Haz clic en Listo.

  7. Haz clic en Guardar.

Usar una API de Google API de Amazon VPC

En esta sección, usas Cloud Translation para verificar que puedes usar una API de Google Cloud Platform de una instancia de Amazon EC2 que se ejecuta en Amazon VPC.

  1. Inicia una instancia de Amazon EC2 en la Amazon VPC que creaste.

  2. Conéctate a la instancia de Amazon EC2 usando la terminal SSH.

  3. Crea un archivo de mensaje de solicitud de API:

    echo '{"q": ["this is a test translation via proxy"], "target": "it"}' >/tmp/translation.json
  4. Publica una solicitud que especifique la dirección proxy. Reemplaza [YOUR_API_KEY] por la string de la clave de API que creaste anteriormente.

    API_KEY=[YOUR_API_KEY]
    curl -H 'Content-Type: application/json' --dump-header - \
      --proxy http://10.140.0.2:8118 -d @/tmp/translation.json \
      -X POST https://translation.googleapis.com/language/translate/v2?key=${API_KEY}
    

    El servicio de traducción responde de la siguiente manera:

    HTTP/1.1 200 Connection established
    Proxy-Agent: Privoxy/3.0.21
    
    HTTP/1.1 200 OK
    Content-Type: application/json; charset=UTF-8
    Vary: X-Origin
    Vary: Referer
    Date: Thu, 06 Jul 2017 23:44:57 GMT
    Server: ESF
    Cache-Control: private
    X-XSS-Protection: 1; mode=block
    X-Frame-Options: SAMEORIGIN
    X-Content-Type-Options: nosniff
    Accept-Ranges: none
    Vary: Origin,Accept-Encoding
    Transfer-Encoding: chunked
    
    {
      "data": {
        "translations": [
          {
            "translatedText": "Questa è una traduzione del test tramite il proxy",
            "detectedSourceLanguage": "en"
          }
        ]
      }
    }
    

Limpiar

Una vez que completas este instructivo, borra tu proyecto para evitar generar mayores costos.

  1. In the GCP Console, go to the Projects page.

    Go to the Projects page

  2. In the project list, select the project you want to delete and click Delete delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Pasos siguientes

  • Visita la documentación de la nube privada virtual y Compute Engine para obtener información detallada sobre cómo aprovechar al máximo cada producto.
  • Para obtener más información sobre las opciones de interconexión, mira el video de soluciones de redes en la nube de Google Cloud Next ‘17.
  • Prueba otras características de Google Cloud Platform por ti mismo. Revisa nuestros instructivos.
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...