Como Conectar a Recursos Privados da VPC com o AWS SSM

Aprenda a usar o SSM port forwarding do AWS (Amazon Web Services) para conectar-se a recursos privados na sua VPC (Virtual Private Cloud) sem expô-los à internet. Este tutorial mostra como acessar um banco de dados RDS (Relational Database Service) privado sem precisar de um banco de dados público, uma instância bastion ou uma VPN (Virtual Private Network).

O que é AWS SSM Session Manager?

O AWS Systems Manager Session Manager é uma ferramenta gerenciada que faz parte do serviço AWS Systems Manager (SSM). Ele permite gerenciar instâncias EC2 (Elastic Compute Cloud), servidores locais e outras máquinas virtuais (VMs). Com o Session Manager, você se conecta às suas instâncias através de um shell interativo no navegador, acessível pelo console EC2 ou pela AWS CLI (Command Line Interface).

As vantagens de usar o Session Manager incluem:

  • Não é preciso abrir portas de entrada, gerenciar bastion hosts ou chaves SSH, reduzindo a superfície de ataque.
  • Suas instâncias e bancos de dados não precisam de endereços IP públicos, economizando dinheiro.
  • Todas as sessões são criptografadas de ponta a ponta por padrão e podem ser criptografadas com uma CMK personalizada para conformidade.
  • O acesso às suas instâncias é gerenciado centralmente com permissões IAM, permitindo controlar quais usuários ou grupos podem usar o Session Manager e quais instâncias gerenciadas eles podem acessar.
  • Todas as chamadas do Session Manager são registradas no CloudTrail, e os logs de conexão específicos da sessão podem ser armazenados no S3 para auditoria e conformidade adicionais.
  • Agora, o port forwarding e o tunneling para hosts remotos são suportados, o que será abordado neste tutorial.

O que é AWS SSM Port Forwarding para Hosts Remotos?

Em 27 de maio de 2022, a AWS anunciou o suporte para SSM port forwarding para hosts remotos usando o Session Manager. Essa funcionalidade permite criar um túnel seguro entre sua máquina local e um host remoto (como um banco de dados RDS ou instância EC2) sem precisar tornar sua instância ou banco de dados acessível publicamente, ou configurar uma VPN na sua rede AWS VPC.

O Session Manager é apenas um recurso do AWS Systems Manager. O AWS SSM oferece um conjunto de ferramentas que ajudam a gerenciar seus recursos AWS e otimizar suas operações, incluindo o gerenciamento automatizado de patches via Patch Manager, fluxos de trabalho de automação via Automation Documents e Run Commands, uma visão centralizada de todas as suas instâncias gerenciadas e outros nós, armazenamento seguro de parâmetros e segredos via SSM Parameter Store e, claro, a conexão às suas instâncias gerenciadas via Session Manager sem abrir portas de entrada.

Cenário: Conectando-se a um Banco de Dados RDS Privado

Imagine que você é um administrador ou engenheiro da AWS que precisa se conectar a um banco de dados RDS privado a partir da sua máquina local para executar algumas consultas. Você não quer tornar seu banco de dados RDS publicamente acessível, pois isso vai contra as melhores práticas de segurança. Além disso, você não pode configurar uma conexão VPN com sua rede AWS VPC ou iniciar uma instância bastion pública devido às políticas de segurança da sua empresa. O que fazer? A resposta é: usar o AWS SSM Session Manager.

Pré-requisitos

Antes de começar, você precisa:

Passo 1: Criar a Infraestrutura AWS

Observação: se você já configurou uma AWS VPC, instância EC2 gerenciada pelo SSM e banco de dados RDS, pode pular este passo.

Você precisará criar uma AWS VPC com 2 sub-redes públicas e 2 privadas, configuradas com um NAT gateway e tabelas de rotas apropriadas, uma instância Amazon Linux 2023 EC2 gerenciada pelo SSM em uma sub-rede privada e um banco de dados RDS nas mesmas sub-redes privadas que a instância.

Para facilitar, existe um template do Cloudformation que tem tudo o que você precisa para criar a infraestrutura deste tutorial. Você pode baixar o template ssm-port-forwarding-tutorial.yaml.

Depois de salvar o arquivo .yml, siga as instruções neste documento para criar a Cloudformation Stack na conta AWS que você usará para este tutorial. Criar Cloudformation Stack via Console AWS.

O template Cloudformation criará os seguintes recursos na sua conta AWS:

  • VPC e Recursos de Rede

    • VPC com bloco CIDR 10.200.0.0/24
    • 2 Sub-redes Públicas (10.200.0.0/26 e 10.200.0.64/26)
    • 2 Sub-redes Privadas (10.200.0.128/26 e 10.200.0.192/26)
    • Internet Gateway para acesso à internet da sub-rede pública
    • NAT Gateway para acesso à internet da sub-rede privada
    • Tabelas de Rotas para sub-redes públicas e privadas
  • Instância EC2 Bastion com Agente SSM pré-instalado

    • Instância EC2 t4g.nano executando Amazon Linux 2023 (ARM64) em sub-rede privada
    • Agente SSM pré-instalado e configurado via perfil de instância
    • IAM Role e Perfil de Instância para acesso SSM
    • Grupo de Segurança para o host bastion sem regras de entrada e todo o acesso de rede de saída permitido para 0.0.0.0/0
  • Banco de Dados

    • Um cluster de banco de dados Aurora Postgres RDS nas mesmas sub-redes privadas
    • Grupo de Sub-rede de Banco de Dados para o cluster Aurora
    • Segredo do Secrets Manager contendo nome de usuário e senha do banco de dados
    • Grupo de Segurança para o banco de dados RDS permitindo acesso de entrada do host bastion na porta 5432 (a porta padrão do PostgreSQL)

AWS SSM Port Forwarding Architecture
Figura 1: Arquitetura do Tutorial AWS SSM Port Forwarding

🚨 Anote o ID da instância EC2 bastion e o endpoint do cluster RDS Aurora, pois você precisará deles no próximo passo.

Se você usou o template Cloudformation fornecido anteriormente no Passo 1, essas informações estarão disponíveis no console AWS, na aba de saídas da stack Cloudformation.

Passo 2: Estabelecer o Túnel de Port Forwarding do Session Manager

Com os pré-requisitos cumpridos e a infraestrutura AWS necessária configurada, podemos criar o túnel de SSM port forwarding para permitir o tunneling da sua máquina local para o banco de dados RDS privado. Isso será feito usando a AWS CLI e o comando aws ssm start-session com o documento de automação SSM gerenciado pela AWS StartPortForwardingSessionToRemoteHost.

Abra um terminal na sua máquina local e certifique-se de que a sessão da AWS CLI esteja configurada para a mesma conta e região AWS em que sua instância bastion e banco de dados estão.

Execute o seguinte comando para estabelecer a sessão de port forwarding do SSM para o endpoint do banco de dados RDS, que pode ser encontrado no console AWS ou nas saídas da stack Cloudformation.

🚨 Substitua os marcadores <ssm-managed-instance-id> e <rds-database-endpoint> pelo ID real da sua instância EC2 bastion e pelo endpoint do banco de dados RDS (seja o endpoint de leitura ou gravação).

aws ssm start-session \
  --target <ssm-managed-instance-id> \
  --document-name AWS-StartPortForwardingSessionToRemoteHost \
  --parameters '{"host":["<rds-database-endpoint>"],"portNumber":["5432"], "localPortNumber":["5432"]}' \
  --region us-east-1 #change if not using us-east-1

# If you also happen to have a Postgres instance running locally, port 5432 may be in use. 
# You can use a different local port number if needed, such as 5433 or 5434.

Se o comando for executado com sucesso, você verá uma saída semelhante à seguinte (com seu próprio ID de instância, endpoint de banco de dados e SessionId):

aws ssm start-session \
  --target i-08f8da02ef86a9019 \
  --document-name AWS-StartPortForwardingSessionToRemoteHost \
  --parameters '{"host":["ssm-tutorial-auroradbinstance-xgbvrzhiwkl9.cxi22kwuecp7.us-east-1.rds.amazonaws.com"],"portNumber":["5432"], "localPortNumber":["5432"]}' \
  --region us-east-1

Starting session with SessionId: esantana-2u3p56pdlverjceucba3gh3kh8
Port 5432 opened for sessionId esantana-2u3p56pdlverjceucba3gh3kh8.
Waiting for connections...

🚨 Deixe isso rodando até o final do tutorial, pois fechar essa conexão irá interromper o túnel.

Para os fins deste tutorial, o host remoto é o banco de dados RDS, mas pode ser qualquer host/endereço IP/nome DNS e porta aos quais sua instância EC2 possa se conectar, como outra instância EC2, um ALB interno ou até mesmo um servidor local.

Para mais informações sobre este passo, consulte a documentação de Iniciando uma sessão de port forwarding para host remoto.

Passo 3: Conectar-se ao Banco de Dados RDS

Agora que o túnel de SSM port forwarding está ativo, você pode se conectar ao banco de dados RDS da sua máquina local usando seu client de banco de dados favorito. Para isso, pegue o nome do seu banco de dados e suas credenciais de nome de usuário e senha do postgres.

Se você usou o template Cloudformation do Passo 1, o banco de dados será nomeado ssmPortForwardingTutorial e essas credenciais estarão localizadas no AWS Secrets Manager sob um segredo que começa com AuroraSecret-.

Em vez do endpoint do seu banco de dados, você usará localhost e o número da porta local especificado no passo anterior (por exemplo, localhost:5432 em vez de ssm-vpc-lab-auroradbcluster-4vlv20ckgp8b.cluster-cxi22kwuecp7.us-east-1.rds.amazonaws.com).

Por exemplo, se você estiver usando o pgAdmin para se conectar a um banco de dados PostgreSQL, você pode registrar um novo servidor com as configurações abaixo e clicar em salvar.

  • Nome: aws-ssm-tutorial
  • Nome do host/endereço: localhost
  • Porta: 5432
  • Banco de dados de manutenção: ssmPortForwardingTutorial
  • Nome de usuário: postgres
  • Senha:

pgAdmin New Server Registration

Confirme a conexão clicando no servidor que você acabou de registrar e você deverá ver as tabelas e esquemas do banco de dados no painel esquerdo.

Se tudo funcionou como esperado, parabéns! 🎉 Você se conectou com sucesso a um banco de dados RDS privado usando o SSM port forwarding, sem precisar expor seu banco de dados à internet pública, configurar uma VPN ou expor quaisquer portas de entrada da sua máquina local!

Passo 4: Limpeza

Quando terminar este tutorial, você pode limpar todos os recursos criados no Passo 1 acessando o console AWS Cloudformation, selecionando a stack que você criou para este tutorial e clicando no botão “Excluir”. Isso excluirá permanentemente todos os recursos criados pelo template Cloudformation, incluindo a VPC, instância EC2, banco de dados RDS e segredo do Secrets Manager.

Monitore o status de exclusão da stack para garantir que não ocorram erros. Alguns recursos, como o banco de dados RDS, podem levar alguns minutos para serem excluídos, então seja paciente.

Este guia mostrou como conectar servidores remotos dentro da sua rede AWS VPC privada usando o recurso de port forwarding para hosts remotos do AWS Systems Manager Session Manager. Embora este tutorial tenha usado um banco de dados RDS como exemplo, você pode usar a mesma técnica para se conectar remotamente a qualquer tipo de host da sua máquina local sem precisar expor seus recursos AWS à internet pública ou configurar uma VPN. Para facilitar a sua conexão, você pode usar um celular com bateria poderosa e projetor embutido.

Espero que este tutorial tenha sido útil e que você possa usar essa técnica para melhorar sua postura de segurança e facilitar a manutenção da sua infraestrutura AWS. Se você tiver alguma dúvida ou comentário, sinta-se à vontade para enviar um e-mail para [email protected].

Este conteúdo foi auxiliado por Inteligência Artificial, mas escrito e revisado por um humano.

Via Dev.to

Leave a Comment