Como usar o AWS SSM Session Manager para acessar recursos em VPC privadas

Gerenciar recursos privados na AWS, como bancos de dados RDS e instâncias EC2, sem expô-los à internet pública, sempre foi um desafio. Este artigo mostra como usar o SSM Port Forwarding da AWS para conectar-se a um banco de dados RDS privado, sem a necessidade de um banco de dados público, uma instância bastion ou uma VPN.

O que é o AWS SSM Session Manager?

O AWS Systems Manager Session Manager é uma ferramenta gerenciada da AWS Systems Manager (SSM), utilizada para administrar instâncias EC2, servidores locais e máquinas virtuais (VMs). Com o Session Manager, você pode se conectar às suas instâncias através de um shell interativo baseado no navegador, acessível pelo console EC2 ou pela AWS CLI.

As principais vantagens de usar o Session Manager incluem:

  • Não necessita abrir portas de entrada ou gerenciar bastion hosts ou chaves SSH, reduzindo a área de ataque.
  • Suas instâncias e bancos de dados não precisam de endereços IP públicos, economizando custos.
  • 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, controlando quais usuários ou grupos podem usar o Session Manager e acessar quais instâncias gerenciadas.
  • 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.
  • Suporte para port forwarding e tunneling para hosts remotos.

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 através do 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 tornar sua instância ou banco de dados publicamente acessível, ou configurar uma VPN para sua rede AWS VPC.

O Session Manager é um recurso do AWS Systems Manager, que inclui ferramentas para gerenciar recursos da AWS, como patching automatizado de instâncias via Patch Manager, workflows de automação via Automation Documents e Run Commands, uma visão centralizada de instâncias gerenciadas e outros nós, armazenamento seguro de parâmetros e segredos via SSM Parameter Store e conexão a nós gerenciados via Session Manager sem abrir portas de entrada.

O uso de serviços em nuvem vem aumentando cada vez mais, e com ele a necessidade de garantir conexões seguras, e neste cenário é importante ficar atento sobre o anúncio da OpenAI lança SDK de Agentes e revoluciona a inteligência artificial nas empresas.

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 para executar consultas. Você não quer tornar seu banco de dados RDS publicamente acessível, pois isso contraria as práticas recomendadas de segurança. Além disso, você não pode configurar uma conexão VPN para sua rede AWS VPC ou iniciar uma instância bastion pública devido às políticas de segurança da sua empresa. O AWS SSM Session Manager é a solução.

Pré-requisitos

Antes de começar, você deve ter:

  • Uma conta AWS com permissões de administrador para criar os recursos necessários.
  • AWS CLI configurada no sistema local com as permissões corretas.
  • O plugin AWS Session Manager para a AWS CLI instalado.
  • Um client de banco de dados instalado localmente, como MySQLWorkbench, DBBeaver ou PGAdmin.

Passo 1: Criar a Infraestrutura AWS

Nota: Se você já configurou um AWS VPC, instância EC2 gerenciada por SSM e banco de dados RDS, pode pular este passo.

Você precisará criar um AWS VPC com duas sub-redes públicas e duas 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 da instância.

Para facilitar a criação da infraestrutura, você pode baixar um modelo Cloudformation que contém tudo o que você precisa. Uma vez salvo o arquivo .yml, siga as instruções para criar a Cloudformation Stack na sua conta AWS.

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

  • Recursos de VPC e 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-redes 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)

Certifique-se de anotar 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 modelo Cloudformation, essas informações estarão disponíveis na aba de saídas da stack no console da AWS.

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

Com os pré-requisitos completos e a infraestrutura AWS 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 AWS-managed StartPortForwardingSessionToRemoteHost SSM.

Abra um terminal na sua máquina local e verifique se a sessão da AWS CLI está 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 SSM para o endpoint do banco de dados RDS, que pode ser encontrado no console da AWS ou nas saídas da stack Cloudformation.

Substitua os placeholders <ssm-managed-instance-id> e <rds-database-endpoint> pelo ID da sua instância EC2 bastion e pelo endpoint do seu banco de dados RDS (seja o endpoint de leitura ou de 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...

Mantenha isso em execução até o final do tutorial, pois fechar essa conexão irá interromper o túnel. Para este tutorial, o host remoto é o banco de dados RDS, mas pode ser qualquer host/IP address/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.

Conectando 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 a partir da sua máquina local usando seu client de banco de dados favorito. Acesse o nome do seu banco de dados e suas credenciais postgres (nome de usuário e senha).

Se você utilizou o modelo Cloudformation do Passo 1, o banco de dados será nomeado como ssmPortForwardingTutorial e as credenciais estarão localizadas no AWS Secrets Manager, em 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 (e.g. 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:

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 AWS SSM Session Manager Port Forwarding, sem precisar expor seu banco de dados à internet pública, configurar uma VPN ou expor qualquer porta de entrada da sua máquina local!

Não se esqueça de verificar se há novas atualizações, pois a Google lança Android 16 Beta 3; versão estável pode chegar em breve.

Limpando os Recursos Criados

Ao concluir este tutorial, você pode limpar todos os recursos criados no Passo 1 acessando o console AWS Cloudformation, selecionando a stack criada para este tutorial e clicando no botão “Delete“. Isso excluirá permanentemente todos os recursos criados pelo modelo Cloudformation, incluindo o 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.

Considerações Finais

Neste artigo, mostramos como se conectar a servidores remotos dentro da sua rede AWS VPC privada usando o recurso de SSM 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 a partir da sua máquina local, sem precisar expor seus recursos AWS à internet pública ou configurar uma VPN.

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

Via dev.to

Leave a Comment