Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Além das conexões SSH via bastion na AWS

By Javier CarreraJan 5, 20249 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

Um panorama atualizado das diferentes formas de se conectar com segurança a instâncias EC2 privadas

Acessar instâncias EC2 privadas é uma necessidade recorrente para usuários específicos dentro das organizações, normalmente administradores e alguns desenvolvedores autorizados. Tradicionalmente, os usuários da AWS recorrem a bastions (jump boxes), VPNs (Virtual Private Connections) ou ao AWS Direct Connect para resolver essa demanda. Apesar de o AWS EC2 já oferecer há algum tempo alternativas modernas a essas soluções da "velha guarda", uma melhoria recente em uma dessas abordagens, lançada em junho de 2023, justifica uma atualização. Este artigo apresenta essas opções alternativas para se conectar a instâncias EC2 privadas, com suas vantagens, desvantagens e como utilizá-las.

Observação: neste contexto, instância privada é uma instância EC2 sem endereço IPv4 público ou que não foi lançada em uma sub-rede pública de uma VPC. Por definição, sub-rede pública é qualquer sub-rede cuja tabela de rotas direciona o tráfego para a Internet por meio de um Internet Gateway.

Um resumo da conexão SSH "tradicional".

Há duas formas "tradicionais" típicas de se conectar com segurança a uma instância EC2 privada: 1) estabelecer um túnel criptografado e seguro usando uma Client-VPN ou Site-to-Site VPN (e vamos incluir aqui também o AWS Direct Connect, embora tecnicamente não seja um túnel) e 2) usar uma instância EC2 pública como "jump box" (comumente chamada de host "bastion") para abrir uma nova conexão com a instância privada. As duas opções têm custo e (em determinados casos) exigem um trabalho de configuração nada trivial. Vamos olhar de perto:

  • AWS Client-VPN, AWS Site-to-Site VPN (ou soluções de VPN similares) ou AWS Direct Connect

Essa abordagem foi (e continua sendo) uma maneira popular de permitir conectividade a partir de qualquer rede até uma rede privada, estabelecendo um túnel criptografado (no caso das VPNs) ou um link privado dedicado (no caso do AWS Direct Connect). Ela tem um custo, no entanto: você vai precisar de pelo menos uma instância ou serviço gerenciado como ponto de terminação para a conexão VPN e, em alguns casos, há custos por tempo de conexão e graus variados de complexidade.

  • Jump box ou Bastion

Uma opção ainda mais popular, com custo e complexidade menores do que configurar VPN/Direct Connect, essa abordagem usa uma instância EC2 pública que recebe a conexão do cliente e, então, abre uma nova conexão com a instância EC2 privada (veja o diagrama abaixo). Você pode usar essa opção tanto para SSH (normalmente com SSH Agent Forwarding) quanto para RDP (com o Remote Desktop Gateway). A desvantagem é que (além de pagar pela instância bastion) você amplia a superfície de ataque ao expor publicamente essa instância. Claro, é preciso aplicar todas as medidas de segurança disponíveis para proteger seus hosts bastion, como controlar o acesso às credenciais da máquina (ou seja, chaves privadas), restringir a rede via security groups e Network Access Control Lists (NACL) e manter o sistema operacional sempre atualizado. Tudo isso gera uma sobrecarga operacional para sua infraestrutura.

Conexão baseada em Bastion

Embora as opções acima sejam tecnicamente válidas, a AWS oferece dois métodos modernos, mais fáceis de gerenciar e mais econômicos para entregar o mesmo acesso que essas duas abordagens proporcionam no gerenciamento das suas instâncias privadas. Vamos analisá-los.

MÉTODO DE ACESSO 1: o Session Manager permite dispensar o SSH por completo (se você quiser).

O AWS Session Manager, lançado em 2018, é um recurso do AWS Systems Manager que permite gerenciar de forma interativa suas instâncias EC2, dispositivos de borda e servidores e máquinas virtuais (VMs) on-premise.

Ao usar o Session Manager, não é necessário ter SSH ou RDP (não precisam estar instalados, configurados nem em execução) na instância EC2 privada de destino. Mesmo assim, você ainda pode usar os protocolos SSH ou RDP para se conectar à instância EC2 privada por meio do Session Manager (veja abaixo).

Configurando o Session Manager:

  • A instância EC2 privada precisa estar executando o Systems Manager Agent, que vem pré-instalado em várias AMIs, mas você também pode instalá-lo manualmente (e não apenas em instâncias EC2).
  • A sub-rede onde a instância EC2 privada de destino está conectada precisa ter conectividade direta ou indireta com a Internet por meio de um Internet Gateway ou NAT Gateway. Como alternativa, você pode configurar VPC endpoints para o Session Manager e gerenciar instâncias EC2 privadas sem acesso de saída à Internet. Vamos visualizar essas duas opções:
  • Opção de configuração de rede 1: se você já tem um NAT Gateway em uma sub-rede pública (e não se importa em pagar pelo tráfego adicional do Systems Manager Agent processado pelo NAT Gateway), o diagrama a seguir mostra que o Session Manager Agent precisa de conectividade de saída para os endpoints do Session Manager para que as sessões do cliente possam ser iniciadas.

Session Manager com NAT Gateway

  • Opção de configuração de rede 2: se você prefere não usar Internet Gateway e NAT Gateway, vai precisar de um VPC Endpoint para cada serviço: Systems Manager, Session Manager Message Gateway Service e Message Delivery Service. Para mais detalhes, confira este link e este aqui. Vale lembrar que os VPC Endpoints têm seus próprios Security Groups (e Resource Policies) que podemos usar para um controle adicional de acesso à rede e à identidade.

Session Manager com VPC Endpoints

Usando o Session Manager:

  • Você pode usar o AWS Management Console ou a AWS Command Line Interface (AWS CLI) para iniciar sessões nos nós aos quais o administrador do sistema concedeu acesso por meio de políticas do AWS Identity and Access Management (IAM). Se preferir usar a AWS CLI, será preciso primeiro instalar o plugin do Session Manager para a AWS CLI.
  • O controle de acesso às instâncias é centralizado por políticas IAM, tanto na instância de destino (a role atribuída à instância precisa de permissões que autorizem o Systems Manager Agent a interagir com as APIs do Systems Manager/Session Manager) quanto na identidade que tenta acessar a instância EC2 (o IAM User ou Role precisa de permissões para iniciar uma conexão do Session Manager até a instância).
  • Você pode conceder permissões à instância no nível da conta usando uma role do AWS Identity and Access Management (IAM) ou no nível da instância usando um instance profile. Quando o caso de uso permitir, a AWS recomenda conceder o acesso no nível da conta usando o Default Host Management Configuration.
  • Você ainda pode usar os protocolos SSH ou RDP (nesse caso, é preciso ter um arquivo de credenciais no cliente).
  • Você pode até se conectar com segurança a uma instância de banco de dados Amazon RDS ou Amazon EC2 usando sua GUI preferida com port forwarding e um "Bastion" EC2 em uma sub-rede privada.

Outras considerações sobre o Session Manager:

  • O Session Manager oferece recursos de logging e auditoria. Você pode usar o AWS CloudTrail e o Amazon CloudWatch Logs (e, opcionalmente, também um bucket S3) para manter um histórico de toda a atividade da sessão. O logging não está disponível em sessões do Session Manager que se conectam por port forwarding ou SSH. Isso acontece porque o SSH criptografa todos os dados da sessão, e o Session Manager funciona apenas como um túnel para conexões SSH.
  • Não há custo adicional para acessar instâncias Amazon EC2 com o Session Manager. Aplicam-se as taxas padrão de transferência de dados. Já o uso do Session Manager para acessar instâncias on-premises de forma interativa envolve um custo.

MÉTODO DE ACESSO 2: o EC2 Instance Connect Endpoint é a forma mais recente de fazer SSH/RDP em uma máquina.

O EC2 Instance Connect Endpoint permite que você se conecte a uma instância via SSH ou RDP usando SSH baseado em chave efêmera, sem que a instância precise ter endereço IPv4 público. Antes de junho de 2023, o EC2 Instance Connect oferecia uma funcionalidade parecida, mas só permitia o acesso a instâncias EC2 públicas (essa opção continua disponível para esse tipo de máquina). O EC2 Instance Connect foi lançado em 2019.

Configurando o EC2 Instance Connect Endpoint:

  • Não é necessário nenhum agente na instância de destino. Essa abordagem permite o acesso a instâncias que talvez não suportem agentes, como appliances de terceiros.
  • Não é preciso ter conectividade direta ou indireta com a Internet por meio de um Internet Gateway ou NAT Gateway. Em compensação, você precisa configurar um endpoint em uma sub-rede da VPC que contém a instância de destino. No momento em que este artigo foi escrito (novembro de 2023), só é possível criar um EC2 Instance Connect Endpoint por VPC (veja Quotas). O Endpoint leva alguns minutos para ficar disponível.

EC2 Instance Connect Endpoint

Usando o EC2 Instance Connect Endpoint:

  • Você pode usar o AWS Management Console, sua própria chave e cliente SSH ou a AWS Command Line Interface ( AWS CLI) para se conectar aos seus nós privados. É preciso abrir um túnel pela AWS CLI antes de iniciar a conexão por um cliente RDP.
  • Se quiser, você pode usar suas próprias chaves SSH (nesse caso, é preciso ter um arquivo de credenciais no cliente). Para criar uma conexão RDP com o usuário administrador padrão, é necessário ter a chave privada do Key Pair padrão associado à EC2 para descriptografar a senha inicial do administrador, da mesma forma que ao se conectar a instâncias Windows públicas.
  • O EC2 Instance Connect Endpoint oferece controle de acesso centralizado às instâncias combinando controles baseados em identidade ( permissões IAM atribuídas ao IAM User ou Role que inicia a conexão) e controles baseados em rede ( Security Groups aplicados ao Endpoint e à instância de destino). Você pode pedir ao EC2 Instance Connect Endpoint que preserve o endereço IP do cliente. Isso pode influenciar a forma como você configura seus Security Groups e Network Access Control Lists (NACLs).

Outras considerações sobre o EC2 Instance Connect Endpoint:

  • Ele utiliza credenciais temporárias, então, mesmo que uma chave privada seja comprometida, ela não poderá ser usada além do período de validade das credenciais.
  • Você pode registrar operações de recursos e auditar conexões abertas pelo EC2 Instance Connect Endpoint com logs do AWS CloudTrail. Diferentemente do Session Manager, o registro da atividade do usuário precisa ser feito no nível do sistema operacional da instância de destino.
  • Há algumas limitações que vale ficar de olho. Para destacar duas: apenas as portas 22 e 3389 são suportadas, e o EC2 Instance Connect Endpoint não aceita conexões a uma instância usando endereços IPv6.
  • Não há custo adicional para usar EC2 Instance Connect Endpoints. Aplicam-se as taxas padrão de transferência de dados.

Conclusão

Neste artigo, apresentei quatro métodos para se conectar com segurança a instâncias EC2 privadas na AWS.

Os métodos tradicionais incluem: 1) configurar AWS Client-VPN, Site-to-Site VPN ou AWS Direct Connect (que envolvem o estabelecimento de túneis criptografados ou links dedicados, mas trazem complexidade e custo) e 2) usar uma instância EC2 pública como "jump box" (que é econômica, mas amplia a superfície de ataque).

Em seguida, o artigo apresenta duas abordagens modernas, mais simples e mais baratas:

  • Session Manager: um recurso do AWS Systems Manager que permite o gerenciamento interativo de instâncias EC2 sem precisar de SSH ou RDP (mesmo sendo opcional usá-los) na instância privada. Ele utiliza o Systems Manager Agent, exige que a sub-rede de destino tenha conectividade de saída com a Internet (por meio de um NAT Gateway ou VPC Interface Endpoint) e oferece controle de acesso centralizado por meio de políticas IAM.
  • EC2 Instance Connect Endpoint: permite acesso SSH ou RDP a instâncias sem endereços IPv4 públicos. Não exige um agente na instância de destino e dispensa conectividade direta com a Internet (basta vincular o Endpoint a uma sub-rede da VPC). O controle de acesso é feito por meio de permissões IAM e Security Groups.

Tanto o Session Manager quanto o EC2 Instance Connect Endpoint oferecem recursos de auditoria (com o Session Manager permitindo o registro opcional da atividade da sessão) e não geram cobranças adicionais para o acesso a instâncias Amazon EC2, exceto pelas taxas padrão de transferência de dados.

Recomendo que você adote essas opções aprimoradas de conexão desde já, porque elas também ajudam a mitigar o impacto do novo modelo de preços para endereços IPv4 públicos anunciado pela AWS para 1º de fevereiro de 2024. Se precisar de ajuda, nossos Customer Reliability Engineering (CRE) e Technical Account Managers (TAM) na DoiT terão prazer em apoiar você nesse processo, então é só entrar em contato com a gente!