Como usar APIs de uma rede externa

Neste tutorial, demonstramos como usar APIs para serviços do Google Cloud por uma rede externa, como sua rede particular local ou a rede de outro provedor de nuvem. Com essa abordagem, os servidores locais conectados à sua rede particular podem acessar os serviços do Google Cloud sem usar endereços IP públicos. Neste tutorial, apresentamos um exemplo em que você usa uma rede particular na Amazon Virtual Private Cloud (Amazon VPC) para emular uma rede particular no local.

Arquitetura

O diagrama a seguir resume a arquitetura geral criada neste tutorial.

  • Conecte uma rede particular na Amazon VPC a uma rede virtual em seu projeto do Google Cloud por meio de VPN com IPsec. Caso usasse uma rede particular no local em vez da Amazon VPC, você usaria o Cloud Interconnect para ter uma conexão de rede particular com seu projeto do Google Cloud.

  • O Acesso privado do Google é usado em projetos do Google Cloud. Os servidores que estão sendo executados fora dos projetos do Google Cloud não podem acessar as APIs do Google Cloud, como o Cloud Translation, usando um endereço IP interno, mesmo quando o Acesso privado do Google está ativado. Portanto, você usa um proxy HTTP ou HTTPS no projeto do Google Cloud para transferir solicitações de API de servidores externos para serviços e APIs do Google Cloud usando endereços IP internos.

arquitetura geral

Objetivos

  • Ativar o Acesso privado do Google para permitir que as instâncias de VM do Compute Engine acessem as APIs do Google Cloud sem usar endereços IP públicos.

  • Configurar um proxy HTTP ou HTTPS usando uma instância do Compute Engine para permitir que os servidores na Amazon VPC acessem as APIs do Google Cloud sem usar endereços IP públicos.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem ser qualificados para uma avaliação gratuita.

Além disso, é possível que você receba cobranças pelos serviços da Amazon Web Services (AWS), como instâncias da Amazon VPC, da VPN e do Amazon Elastic Compute Cloud (Amazon EC2).

Antes de começar

Antes de começar este tutorial, use o Console do Cloud para criar um projeto do Google Cloud e ativar o faturamento. Não use um projeto atual porque, quando terminar, você precisará excluí-lo para evitar custos extras.

  1. No Console do Google Cloud, acesse a página do seletor de projetos.

    Acessar a página do seletor de projetos

  2. Selecione ou crie um projeto do Google Cloud.

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative a API Translation.

    Ative a API

  5. Acesse a página Credenciais.
    Acessar "Credenciais"
  6. Em Criar credenciais, selecione Chave de API e clique em Fechar. Anote a string da chave de API exibida.

Como conectar a Amazon VPC à sua rede virtual do Google Cloud

Neste tutorial, você usa a Amazon VPC para emular seu data center local. Para estabelecer a Amazon VPC, siga as instruções em Como usar o Cloud VPN com a Amazon Web Services, nas seções "VPN IPsec com base em política: configuração - AWS" e "VPN IPsec com base em política: configuração - IU do GCP".

  • Use a VPC padrão com o endereço de rede 172.31.0.0/16 CIDR.
  • Use a sub-rede padrão com o endereço de rede 172.31.0.0/16 CIDR.
  • Crie uma conexão VPN com a AWS usando o endereço IP estático aws-vpn como um gateway de VPN do Compute Engine.

Use a VPN com IPsec para conectar a Amazon VPC à rede virtual do Google Cloud criada no Google Cloud.

gcloud

  1. Abra o Cloud Shell:

    ATIVAR o Cloud Shell

  2. Crie uma rede virtual do Google Cloud:

    gcloud compute networks create "aws-vpn" --subnet-mode "auto"
    gcloud compute addresses create "aws-vpn" --region "asia-east1"
    
  3. Siga as instruções em Como usar o Cloud VPN com a Amazon Web Services.

  4. Para mostrar a configuração da VPN no Console do Cloud, abra a página VPN:

    ABRIR "VPN"

    Sua configuração de VPN no Console do Cloud terá uma aparência semelhante à imagem a seguir. A marca de seleção verde indica que o endereço IP do peering remoto para aws-vpn está configurado corretamente.

    Configuração de VPN no Console do Cloud

Console

  1. No Console do Cloud, acesse a página Redes VPC.

    ABRIR "REDES VPC"

  2. Clique em Criar rede VPC.

  3. Defina as opções a seguir, deixando as outras como padrão:

    • Nome: aws-vpn
    • Sub-redes: Automatic
  4. Clique em Criar.

  5. Acesse a página Endereços IP externos:

    ABRIR "ENDEREÇOS IP EXTERNOS"

  6. Clique em Reservar endereços estáticos.

  7. Defina as opções a seguir, deixando as outras como padrão:

    • Nome: aws-vpn
    • Região: asia-east1
  8. Clique em Reservar.

  9. Siga as instruções em Como usar o Cloud VPN com a Amazon Web Services.

  10. Para mostrar a configuração da VPN no Console do Cloud, abra a página VPN:

    ABRIR "VPN"

    Sua configuração de VPN no Console do Cloud terá uma aparência semelhante à imagem a seguir. A marca de seleção verde indica que o endereço IP do peering remoto para aws-vpn está configurado corretamente.

    Configuração de VPN no Console do Cloud

Como configurar a tabela de roteamento da Amazon VPC

Para permitir que as instâncias do Amazon EC2 acessem a rede virtual do Google Cloud em seu projeto, siga estas etapas:

  1. No Console de Gerenciamento da AWS, clique na guia Tabela de rotas.

  2. Selecione Propagação de rotas e clique em Editar.

  3. Selecione Propagar em seu intervalo de IP particular de rede VPC e clique em Salvar.

Como ativar o Acesso privado do Google

Você ativa o Acesso privado do Google na sub-rede conectada à Amazon VPC.

gcloud

  1. Execute o comando a seguir no Cloud Shell:

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

Console

  1. No Console do Cloud, acesse a página Redes VPC.

    ABRIR "REDES VPC"

  2. Selecione a sub-rede aws vpn na região asia-east1.

  3. Clique em Editar.

  4. Na caixa Acesso particular do Google, selecione Ativado e clique em Salvar.

Como configurar regras de firewall

A próxima etapa é adicionar regras de firewall que permitam a conexão de proxy da Amazon VPC e uma conexão SSH de todas as redes externas. A conexão SSH é usada apenas para configurar a instância do proxy HTTP ou HTTPS. Para configurar o proxy sem fazer login manualmente na instância, você pode usar um script de inicialização. Nesse caso, não será necessário criar a regra de firewall da conexão SSH.

gcloud

  1. No Cloud Shell, adicione uma regra de firewall para o 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"
    

    Quando a regra de firewall é criada, a saída a seguir é exibida:

    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. Se você não estiver usando um script de inicialização, adicione uma regra de firewall para a conexão 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"
    

    Quando a regra de firewall é criada, a saída a seguir é exibida:

    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. No Console do Cloud, acesse a página Regras de firewall:

    ABRIR "REGRAS DE FIREWALL"

  2. Clique em Criar regra de firewall.

  3. Defina as opções a seguir, deixando as outras como padrão:

    • Nome: aws-vpn-allow-proxy
    • Descrição: Allow Google Private Access from Amazon VPC
    • Rede: aws-vpn
    • Tags de meta: api-proxy
    • Intervalos de IP de origem: 172.31.0.0/16
    • Protocolos e portas: tcp:8118
  4. Clique em Criar.

  5. Clique em Criar regra de firewall.

  6. Defina as opções a seguir, deixando as outras como padrão:

    • Nome: aws-vpn-allow-ssh
    • Descrição: Allow SSH from anywhere
    • Rede: aws-vpn
    • Tags de meta: api-proxy
    • Intervalos de IP de origem: 0.0.0.0/0
    • Protocolos e portas: tcp:22
  7. Clique em Criar.

Como criar uma instância de proxy HTTP ou HTTPS

Em seguida, você precisa criar uma instância do Compute Engine, configurá-la como um proxy HTTP ou HTTPS e fazer login.

gcloud

  1. Inicie uma instância do 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"
    

    Especifique o endereço IP particular da instância que você quer usar como um endereço de proxy.

  2. Faça login na instância:

    gcloud compute ssh "api-proxy" --zone "asia-east1-a"
  3. Na sessão SSH, instale o serviço privoxy:

    sudo apt-get -y install privoxy
  4. Configure o serviço 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. Confirme se o serviço está configurado para aceitar conexões com o endereço IP 10.140.0.2 pela porta 8118:

    sudo netstat -nlt

    A saída será assim:

    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. No Console do Cloud, acesse a página Instâncias de VM:

    ABRIR "INSTÂNCIAS DE VM"

  2. Clique em Criar.

  3. Na página Criar uma instância, defina as opções a seguir, deixando as outras como padrão:

    • Nome: api-proxy
    • Zona: asia-east1-a
  4. Abra Gerenciamento, segurança, discos, redes, locação única e selecione Rede.

  5. Defina as opções a seguir, deixando as outras como padrão:

    • Tags de rede: api-proxy
    • Interface de rede > Rede: aws-vpn
    • Interface de rede > Sub-rede: aws-vpn(10.140.0.0/20)
    • Interface de rede > IP interno primário: Custom
    • Interface de rede > Endereço IP temporário e personalizado: 10.140.0.2
  6. Clique em Concluído.

  7. Clique em Criar.

  8. Selecione a instância api-proxy e clique em SSH para abrir um terminal SSH.

  9. Na sessão SSH, instale o serviço privoxy:

    sudo apt-get -y install privoxy
  10. Configure o serviço 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. Confirme se o serviço está configurado para aceitar conexões com o endereço IP 10.140.0.2 pela porta 8118:

    sudo netstat -nlt

    A saída será assim:

    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. Saia da instância:

    exit
    

Neste ponto, você não precisa mais da conexão SSH com a instância. Se os padrões de segurança exigirem que você remova a regra de firewall que permite a conexão SSH, faça a seguinte operação:

gcloud

  1. Exclua a regra do firewall:

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

Console

  1. No Console do Cloud, acesse a página Regras de firewall:

    ABRIR "REGRAS DE FIREWALL"

  2. Selecione aws-vpn-allow-ssh.

  3. Clique em Excluir.

Como remover um endereço IP externo da instância do proxy

Você precisa impedir que a instância do proxy use acidentalmente um endereço IP público para acessar as APIs do Google Cloud. Veja nesta seção como remover o endereço IP externo da instância do proxy.

gcloud

  1. Determine o nome da configuração:

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

    Na saída de exemplo a seguir, o nome da configuração do endereço IP externo é external-nat.

    - accessConfigs:
    - kind: compute#accessConfig
        name: external-nat
        natIP: 104.199.157.31
        type: ONE_TO_ONE_NAT
    kind: compute#networkInterface
    
  2. Remova o endereço IP externo, especificando o nome da configuração da etapa anterior.

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

Console

  1. No Console do Cloud, acesse a página Instâncias de VM.

    ABRIR "INSTÂNCIAS DE VM"

  2. Clique em api-proxy.

  3. Clique em Editar.

  4. Clique em nic0: aws-vpn.

  5. Defina as opções a seguir, deixando as outras como padrão:

    • IP externo: None
  6. Clique em Concluído.

  7. Clique em Salvar.

Como usar uma API do Google da Amazon VPC

Nesta seção, você usa o Cloud Translation para verificar se é possível usar uma API do Google Cloud de uma instância do Amazon EC2 em execução na Amazon VPC.

  1. Inicie uma instância do Amazon EC2 na Amazon VPC que você criou.

  2. Conecte-se à instância do Amazon EC2 usando o terminal SSH.

  3. Crie um arquivo de mensagens de solicitação de API:

    echo '{"q": ["this is a test translation via proxy"], "target": "it"}' >/tmp/translation.json
  4. Poste uma solicitação que especifique o endereço do proxy. Substitua [YOUR_API_KEY] pela string de chave da API criada 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}
    

    O serviço de tradução responde da seguinte maneira:

    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"
          }
        ]
      }
    }
    

Limpeza

Quando você concluir este tutorial, exclua seu projeto para evitar custos adicionais.

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar a página "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir