O blog da AWS
Estabelecendo controles granulares de rede com VPC Endpoint e API Gateway
Quando clientes iniciam sua jornada para nuvem é muito comum tentarem replicar o mesmo modelo operacional do ambiente on-premises inclusive o de gestão de rede, contudo trazer esta governança exatamente como ela foi concebida no ambiente on-premises pode trazer dificuldades.
Empresas que seguem as recomendações da AWS para o uso de ambientes com várias contas precisam gerenciar muitos pontos de conexões entre o ambiente on-premises e as contas da AWS o que pode levar muito tempo. A disponibilidade de blocos de IP livres acaba sendo um desafio para seguir essa boa prática.
Visão geral da solução
Você pode definir como regra utilizar o Amazon API Gateway como forma de expor as API’s dos diversos produtos da sua empresa para o seu ambiente on-premises. Utilizando o VPC Endpoint centralizado você passa a ter um ponto único de conexão com o ambiente on-premises e também de manutenção das políticas de controle de acesso.
O ambiente on-premises vai se conectar com a AWS através de uma conexão dedicada usando AWS Direct Connect ou AWS Site-to-Site VPN.
Nesta arquitetura a VPC onde vai estar o endpoint para o API Gateway não pode ter um conflito de IP com o ambiente on-premises. Porém todas as outras VPC’s onde vão rodar os workloads dos produtos da sua empresa podem usar qualquer range de IP da RFC1918 e RFC6598, podendo assim ter Overlapping de IP com sua rede local e todas as VPC’s.
Imagem 1: Arquitetura de VPC Endpoint.
Segregação de conexão
Um requisito bastante comum em empresas é a segregação da comunicação entre os diversos ambientes das aplicações. É comum as empresas implementarem Virtual routing and forwarding (VRF) para criar segmentações no ambiente on-premises. Com isso, por exemplo, uma aplicação no ambiente de desenvolvimento não pode se comunicar com outra aplicação no ambiente de produção, e vice-versa.
Imagem 2: Segmentação de conexões usando VPC Endpoint.
Utilizando um VPC Endpoint para cada tipo de ambiente, teremos uma segmentação das conexões conforme os requisitos de segurança. Você pode fazer uma associação de um para um entre a quantidade de endpoints e a quantidade de VRF’s.
Políticas de perímetro
Em ambientes on-premises tradicionais, uma rede confiável e uma autenticação forte são a base da segurança. Onde estabelecem um perímetro de alto nível para impedir a entrada de entidades não confiáveis e a saída de dados. Esse perímetro fornece um limite claro de confiança e propriedade.
Você pode estabelecer um perímetro de dados usando guardrails que restringem o acesso fora dos limites de uma organização. Isso é obtido usando três recursos principais da AWS, políticas de controle de serviço (SCP) do AWS Organizations, políticas baseadas em recursos e políticas de VPC endpoint.
Aplicando as políticas do AWS Identity and Access Management (IAM) podemos estabelecer perímetros em três principais níveis: VPC Endpoint, API Gateway e Organizational Unit (OU) da Organização.
Política para ser aplicada no VPC Endpoint.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceOrgID": "o-1a2b3c4d5e" }, "ForAnyValue:StringLike": { "aws:ResourceOrgPaths": [ "o-1a2b3c4d5e/r-ab12/ou-ab12-1111/*" ] }, "IpAddress": { "aws:VpcSourceIp": "10.10.10.0/24" } } } ] }
Nas condições da política aplicada no VPC Endpoint podemos observar o uso de uma condição com várias chaves ou valores “aws:ResourceOrgID” que indica o ID da organização da AWS do recurso que está sendo acessado. Além da segunda condição “aws:ResourceOrgPaths” que indica o caminho da organização do recurso que está sendo acessado, além da condição “aws:VpcSourceIp” para restringir o IP de origem, onde o bloco 10.10.10.0/24 representa o nosso ambiente on-premises, Dev ou Prod. Cada VPC Endpoint terá a sua própria política onde a Organizational Unit (OU) será diferente e o bloco de IP de origem também será diferente.
Política para ser aplicada no API Gateway.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:sa-east-1:12341234:1a2b3c/*", "Condition": { "StringNotEquals": { "aws:SourceVpce": "vpce-12345abcde" } } }, { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:sa-east-1: 12341234:1a2b3c/*" } ] }
Nas condições da política aplicada no API Gateway podemos observar o uso da condição “aws:SourceVpce” que indica o ID do VPC Endpoint da conta central de Network. Cada ambiente da sua organização terá um VPC Endpoint específico, portanto a política aplicada no API Gateway deve utilizar o VPC Endpoint ID específico do seu ambiente.
Política para ser aplicada na OU da Organização.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "execute-api:Invoke", "Resource": "*", "Condition": { "StringNotEquals": { "aws:SourceVpce": "vpce-12345abcde" } } } ] }
Nas condições da política aplicada na OU podemos observar o uso da chave de condição “aws:SourceVpce” que indica o ID do VPC Endpoint da conta central de Network, aonde cada OU terá sua própria política restringindo qual VPC Endpoint pode ser utilizado.
Dessa maneira conseguimos restringir o perímetro em diferentes pontos, conforme os diagramas abaixo:
Imagem 3: Conta externa sem permissão de conexão usando o VPC Endpoint através da política plicada.
Qualquer entidade externa a sua organização não terá permissão para consumir e se conectar com as API’s do API Gateway que pertencem as suas contas AWS.
Usuários dentro do seu ambiente on-premises que forem utilizar o VPC Endpoint do API Gateway só poderão acessar o endpoint do mesmo ambiente, se tentarem utilizar o endpoint de um outro ambiente esse acesso será negado, pois o bloco de IP será diferente. No lado on-premises esse acesso pode ser bloqueado no firewall de borda, assim a conexão não chega ao endpoint do API Gateway.
Imagem 4: Através da política aplicada na OU, ambientes diferentes dentro da mesma organização não se comunicam.
Conclusão
Neste blog post explicamos como centralizar a comunicação de rede entre ambientes on-premises e AWS utilizando o VPC Endpoint, e como podemos estabelecer controles de acesso granulares em diferentes níveis de perímetros utilizando políticas do IAM.
Sobre os autores
Pedro Henrique Oliveira é Arquiteto de Soluções atendendo clientes de todo o Brasil com foco em pequenas e médias empresas em sua jornada para nuvem, com mais de 6 anos de experiencia, em seu inicio de carreira Pedro atuou como Engenheiro de Software full stack para diversos clientes do setor bancário e financeiro, além de projetos de sustentação de infraestrutura. É entusiasta de Containers, App Modernization e apaixonado por andar de skate e viajar
Leonardo Azize Martins é Arquiteto de Infraestrutura Cloud em Professional Services para o Setor Público. Tendo trabalhado com desenvolvimento e infraestrutura de aplicações web em multinacionais. Quando não está trabalhando, Leonardo gosta de passar o tempo com a família e brincar com a filha