Como posso me conectar a uma instância privada de banco de dados do Amazon RDS de uma máquina local usando uma instância do Amazon EC2 como host bastion?

8 minuto de leitura
0

Desejo usar uma instância do Amazon Elastic Compute Cloud (Amazon EC2) como um host bastion (servidor de salto). Em seguida, quero usar essa instância para conexão com uma instância de banco de dados privada do Amazon Relational Database Service (Amazon RDS) de uma máquina local.

Breve descrição

Para usar uma instância do Amazon EC2 como um servidor de salto para se conectar a uma instância de banco de dados privada do Amazon RDS a partir de uma máquina local, siga estas etapas:

1.    Execute e configure sua instância do EC2 e defina a configuração de rede da instância.

2.    Configure os grupos de segurança da instância de banco de dados do RDS.

3.    Conecte-se à instância de banco de dados do RDS por meio de sua máquina local.

Importante: para se conectar a uma instância de banco de dados privada do Amazon RDS ou do Amazon Aurora, uma prática recomendada é usar uma VPN ou o AWS Direct Connect. Se você não puder usar essas opções, use um bastion host. O exemplo de configuração a seguir usa grupos de segurança para restringir o acesso. No entanto, você pode restringir a lista de controle de acesso à rede (ACL da rede) das sub-redes para tornar a conexão mais segura. Você também pode restringir o escopo da rota do seu gateway da Internet para usar um intervalo menor em vez de 0.0.0.0/0. Por exemplo, ao adicionar o gateway da Internet, adicione somente o intervalo CIDR necessário na tabela de roteamento para o destino. Para obter mais informações, consulte Exemplo de opções de roteamento.

Resolução

O exemplo de configuração a seguir se aplica a uma instância do Amazon RDS para MySQL existente na Amazon Virtual Private Cloud (Amazon VPC). A instância tem grupos de segurança configurados para uma instância do EC2.

Executar e configurar a instância do EC2

1.    Abra o console do Amazon EC2 e escolha Launch instance (Iniciar instância).

2.    Selecione uma imagem de máquina da Amazon (AMI).

3.    Escolha um tipo de instância e selecione Next: Configure Instance Details (Próximo: Configurar detalhes da instância).

4.    Para Network (Rede), escolha a VPC usada pela instância de banco de dados do RDS.

5.    Para Subnet (Sub-rede), selecione a sub-rede que tem um gateway da Internet em sua tabela de roteamento. Se você ainda não tiver um gateway da Internet, poderá adicioná-lo à sub-rede depois que a instância do EC2 for criada.

6.    Em Auto-assign public IP (Atribuir automaticamente o IP público), certifique-se de que a opção Enable (Habilitar) esteja selecionada.

7.    Escolha Next: Add Storage (Próximo: Adicionar armazenamento) e modifique o armazenamento conforme necessário.

8.    Escolha Next: Add Tags (Próximo: Adicionar etiquetas) e adicione etiquetas conforme necessário.

9.    Escolha Next: Configure Security Group (Próximo: Configurar grupo de segurança), escolha Add Rule (Adicionar regra) e insira o seguinte: Type (Tipo): insira Custom TCP Rule (Regra TCP personalizada). Protocol (Protocolo): insira TCP. Port Range: (Intervalo de portas): digite 22.
Source (Origem):
insira o endereço IP da sua máquina local. Por padrão, o endereço IP de origem está aberto a todos, mas é possível restringir o acesso ao seu endereço IP público local.

10.    Selecione Review and Launch (Revisar e iniciar).

11.    Escolha Launch (Iniciar).

Configure os grupos de segurança da instância de banco de dados do RDS

Observação: para conectar automaticamente uma ou mais instâncias do EC2 a um banco de dados do RDS, consulte Conectar automaticamente uma instância do EC2 e um banco de dados do RDS.

1.    Abra o console do Amazon RDS e escolha Databases (Bancos de dados) no painel de navegação.

2.    Escolha o nome da instância de banco de dados do RDS. Ou crie uma instância de banco de dados do RDS, se você ainda não tiver uma.

3.    Escolha a aba Connectivity & security (Segurança e conexão).

4.    Na seção Security (Segurança), escolha o link em VPC security groups (Grupos de segurança da VPC).

5.    Selecione o grupo de segurança, escolha Actions (Ações) e depois Edit inbound rules (Editar regras de entrada).

6.    Escolha Add rule (Adicionar regra) e insira o seguinte: Type (Tipo): insira Custom TCP Rule (Regra TCP personalizada). Protocol (Protocolo): insira TCP. Port Range (Intervalo de portas): insira a porta da instância de banco de dados do RDS. Source (Origem): insira o endereço IP privado da instância do EC2.

7.    Escolha Save (Salvar).

Essa configuração para o grupo de segurança permite o tráfego do endereço IP privado da instância do EC2. Se a instância do EC2 e a instância de banco de dados do RDS usarem a mesma VPC, não será necessário modificar a tabela de rotas da instância de banco de dados do RDS. Se a VPC for diferente, crie uma conexão de emparelhamento da VPC para permitir conexões entre essas VPCs.

Observação: se você usar uma solução mais escalável, tenha cuidado. Por exemplo, se você usar o ID do grupo de segurança em uma regra desse tipo de grupo, certifique-se de que ele não restringe o acesso a uma instância. Em vez disso, configure a regra para restringir o acesso a qualquer recurso que use a ID específica do grupo de segurança.

Conectar-se à instância de banco de dados do RDS usando sua máquina local

Dependendo do cliente usado, as etapas para se conectar à instância de banco de dados do RDS podem variar. Para obter mais informações, consulte Conectar-se a uma instância de banco de dados do Amazon RDS. Se você usa o MySQL, uma prática recomendada é usar o SSL para criptografar a conexão entre a aplicação cliente e o Amazon RDS.

O exemplo a seguir usa o cliente MySQL Workbench para se conectar ao host bastion:

1.    Inicie uma nova conexão e selecione Standard TCP/IP over SSH (TCP/IP padrão sobre SSH) para o Connection Method (Método de conexão).

2.    Para configurações de SSH, insira os seguintes detalhes sobre a instância do EC2: Auto-assign public IP (Atribuir automaticamente o IP público): certifique-se de que Enable (Habilitar) esteja selecionado para a opção DNS Hostnames (Nomes de hosts do DNS). SSH Hostname (Nome do host SSH): insira o nome DNS público da instância do EC2 ou seu endereço IP público. SSH Username (Nome de usuário SSH): insira o nome de usuário para sua instância do EC2. Por exemplo, ec2-user é o nome de usuário para máquinas Linux do EC2. SSH Key File (Arquivo de chave SSH): selecione a chave privada que foi usada ao criar a instância do EC2. Observação: uma instância do EC2 iniciada com um endereço IP público tem um DNS público se a VPC em que a instância foi criada tiver DNS Hostnames (Nomes de host do DNS) ativados.

3.    Insira os seguintes detalhes para as configurações da instância MySQL: MySQL Hostname (Nome do host MySQL): insira o endpoint da instância de banco de dados do RDS. MySQL Server port (Porta do servidor MySQL): insira 3306. Ou insira o número da porta personalizada, caso a esteja utilizando. Username (Nome de usuário): insira o nome de usuário da instância de banco de dados do RDS. Password (Senha): insira a senha da instância de banco de dados do RDS.

4.    Escolha Test Connection (Testar conexão).

5.    Após a conexão bem-sucedida, insira um nome de conexão e salve-a.

Para se conectar do cliente MySQL local a uma instância privada do RDS usando um túnel SSH, consulte os seguintes comandos.

Linux ou macOS:

1.    Execute o seguinte comando para configurar um túnel SSH:

ssh -i "YOUR_EC2_KEY" -L LOCAL_PORT:RDS_ENDPOINT:REMOTE_PORT EC2_USER@EC2_HOST -N -f

Observação: substitua YOUR_EC2_KEY, LOCAL_PORT, RDS_ENDPOINT, REMOTE_PORT, EC2_USER e EC2_HOST pelas informações correspondentes.

Depois que os campos personalizados são preenchidos no comando anterior, a instrução será semelhante ao exemplo a seguir:

ssh -i "ec2Key.pem" -L 3336:rdsinstance.xxx.xxx.rds.amazonaws.com:3306 ec2-user@ec2-34-244-136-223.xxxcompute.amazonaws.com -N -f

2.    Execute os seguintes comandos para testar e confirmar se o túnel está escutando na porta local:

lsof -i4 -P | grep -i "listen" | grep LOCAL_PORT
nc -zv 127.0.0.1 LOCAL_PORT

Observação: substitua LOCAL_PORT pelo número da sua porta local.

3.    Se seu túnel estiver atendendo êxito em sua porta local, você verá uma saída semelhante à seguinte:

lsof -i4 -P | grep -i "listen" | grep 3336
ssh       17692 user    8u  IPv4 0x3bc46bcfeffce12f      0t0  TCP localhost:3336 (LISTEN)

nc -zv 127.0.0.1 3336
Connection to 127.0.0.1 port 3336 [tcp/directv-tick] succeeded!

4.    Execute o comando a seguir para se conectar à sua instância do RDS em sua máquina local usando sua instância do EC2 como um host bastion:

mysql -h 127.0.0.1 -P LOCAL_PORT -u RDS_USER -p

Observação: substitua LOCAL_PORT pelo número da sua porta local e substitua DB_USER pelo nome de usuário do seu banco de dados RDS.


Informações relacionadas

Como posso resolver problemas de conexão com minha instância de banco de dados do Amazon RDS?