Implementação de comunicação privada em ambiente MultiCloud (AWS e GCP)
Implementação de comunicação privada em ambiente MultiCloud (AWS e GCP) de forma 100% automatizada usando o Terraform
Em outro projeto baseado em um cenário do mundo real, atuando como Especialista Cloud em uma empresa que utilizava os serviços Google Cloud e AWS em arquiteturas separadas.
A empresa decidiu interligar as duas arquiteturas, de forma totalmente privada, utilizando o Virtual Private Gateway, Customer Gateway, Cloud Router, Cloud VPN, entre outros serviços.
No entanto, eles precisavam dele em produção em uma semana. Assim que as contas GCP e AWS foram criadas, para economizar tempo, decidi implementar de forma 100% automatizada utilizando o Terraform.
Ao final da implementação o cliente ficou vontade de conectar seu datacenter (estrutura on premisse / nuvem privada) a uma nuvem pública, possibilitando assim, uma infraestrutura de nuvem híbrida.
Descrição macro, de forma ordenada, das configurações e recursos utilizados:
Pré-requisito: Criação de Conta AWS e GCP.
Parte 1: Criar e Configurar Credenciais para executar o Terraform
No GCP
- Criação de um projeto novo na GCP associando-o a uma Conta de Faturamento.
- Habilitar API Compute Engine e Network Management API.
- Abrir o Cloud Shell no novo projeto criado.
- Efetuei a limpeza de tudo que tinha no meu /home.
- O Terraform já vem instalado, caso queira pode instalar novamente.
- Configurar arquivos do Terraform necessários para a infra definida, acima.
Projeto com os arquivos do Terraform
- Criação de uma JSON Key da Service Account (SA) Default Compute Engine ou uma conta de serviço ¹.
- Adicionar a JSON Key para o Terraform: ./gcp_set_credentials.sh ~/file-json-key-gcp.json vai gerar uma entrada no arquivo terraform.tfvars
- Os detalhes podem ser encontrados aqui: passo a passo
Observação: ¹ Service Account Compute Engine Default é uma conta de serviço que é automaticamente atribuída a todas as instâncias do Google Compute Engine (GCE) quando elas são criadas, a menos que uma conta de serviço diferente seja especificada explicitamente durante a criação da instância. Essa conta de serviço é usada para autenticar a instância do GCE com outros serviços da GCP. É uma prática recomendada usar contas de serviço com permissões mínimas necessárias para reduzir o risco de segurança.
Na AWS
Faça login na sua conta AWS, selecione a Região de Oregon (us-west-2) devido a configuração que coloquei no arquivo aws_variables.tf
Crie um usuário pelo AIM
Adicionei acesso ao AWS Management Console
Adicionei policy para AdministratorAccess
Estando no usuário e na aba Security credentials: Access keys > Create access key, permitir usar o Command Line Interface (CLI), baixe o arquivo *.csv desta chave.
Faça upload deste arquivo para o cloud shell GCP e execute: ./aws_set_credentials.sh ~/accessKeys.csv será criado uma nova entrada no arquivo terraform.tfvars.
Parte 2: Criar ‘SSH Keys’, Executar Terraform e Testar Conexão
Verificar instalação do terraform : digite o comando terraform se já tiver basta entrar na pasta dos arquivos do terraform e dar um terraform init e depois terraform validate. Caso não tenha instalado ele, basta instalar pelo arquivo ./get_terraform.sh
Configurar o projeto_id GCP para terraform.tfvars: estando no Google cloud shell ou localmente via seu client cloud sdk.
Execute gcloud config set project PROJECT_ID
Coloque seu id de projeto ao invés de usar: PROJECT_ID, rodar ./gcp_set_project.sh. O resultado esperado é ter adicionado o project_id no arquivo terraform.tfvars
Criação de um par de chaves SSH via cloud shell: ssh-keygen -t rsa -f ~/.ssh/vm-ssh-key -C $USER
Importar chave pública para GCP: gcloud compute config-ssh — ssh-key-file=~/.ssh/vm-ssh-key. A chave pode ser consultada em: Compute Engine | Settings | Metadata | SSH KEYS. Em alguns casos é necessário realizar novo login: gcloud auth login
Importar Chave Pública para AWS: fazer o download do arquivo da chave pública:
AWS | EC2 Dashboard | Network & Security | Key Pairs
Actions: Import Key Pair
Name: vm-ssh-key
Browse: vm-ssh-key-pub
Import key pair
No GCP dentro do diretório terraform: vamos executar os seguintes comandos:
terraform init (inicializa os arquivos do terraform e instala providers/plugins)
terraform validate: valida a sintaxe dos arquivos do terraform.
terraform plan: revisa e te mostra o que vai criar nas clouds.
terraform apply: inicia o provisionamento dos recursos na cloud
terraform apply: inicia o provisionamento dos recursos na cloud
Parte 3: Teste de Conectividade entre as Clouds
Indico verificar os recursos criados pelo console tanto da AWS quanto GCP e realizar um teste de conectividade do GCP para AWS e vice versa.
Listando a criação dos recursos de forma visual em cada cloud, procure pelos recursos abaixo:
VPC(AWS e GCP)
EC2(AWS)/ GCE (GCP)
AWS - VPC / VPN: Virtual private gateways e Customer Gateways (AWS)
GCP - Network Connectivity: VPN (Cloud VPN Tunnels/Gateways) e Cloud Routers
Testando conectividade via SSH
GCP Virtual machines / VM Instances / SSH
A avaliação da latência é feita pelos valores de tempo (`time`) apresentados após cada sequência de ping.
No resultado acima, a latência média é de aproximadamente 13 milissegundos (ms).
Este valor representa o tempo que os pacotes ICMP levou para ir da GCP/GCE para o endereço IP 172.16.0.100 (AWS/EC2) e voltar.
Quanto menor o valor, melhor é a latência da conexão.
Em geral, latências abaixo de 100 ms são consideradas boas para a maioria das aplicações.
AWS CloudShell
GCP via Connectivity Tests
Menu Network Intelligence | Connectivity Tests
Test name: con-test-aws-gcp
Source: vm-instance | tcb-gcp-vm01
Destination: 172.16.0.100
Create/View
Parte 4: Exclusão dos recursos
terraform destroy
Destroy complete! Resources: 41 destroye