002: Conta Shared Network
A conta Shared Network pertence ao Cloud Team e faz uma única coisa: fornecer a rede que o resto da organização ARGLabs usa. Em vez de cada conta construir e manter a sua própria rede, esta conta a constrói uma vez por ambiente e a compartilha por meio do AWS Resource Access Manager (RAM).
O que ela provisiona
O repositório tem duas raízes Terraform, sempre aplicadas em ordem, porque a segunda lê o remote state da primeira.
- terraform-account-creation: a conta AWS sob a OU
Shared, o permission set do time, a hosted zone do subdomíniosharednetworke sua delegação NS na zona apex, e os índices do Resource Explorer da conta. Roda apenas no workspacedefaulte nunca é destruída junto com um ambiente. - terraform-account-configuration: a rede de cada ambiente, construída com o módulo Terraform bigbang-network, mais o resource share do RAM e suas associações de sub-redes, e a zona DNS de cada ambiente com sua delegação. Roda nos workspaces
dev,stgeprd.
A rede de um ambiente
- Uma VPC por região (
us-east-1eus-east-2), com duas zonas de disponibilidade cada, conectadas por VPC peering. - Dual stack: a AWS atribui a cada VPC um IPv6 /56, e cada sub-rede recebe um /64 dele.
- Três camadas de sub-redes:
- public: load balancers e outros serviços de borda, com rota para o internet gateway.
- apps: containers e instâncias. Os NAT gateways ficam desligados, então o tráfego de saída sai apenas por IPv6, por um egress-only internet gateway que não custa nada. Um NAT gateway regional por região está a um interruptor de distância.
- data: bancos de dados, caches e filas. Sem rota para a internet em nenhuma direção, e uma network ACL que admite apenas as camadas apps e public de todas as regiões.
- Route 53 Resolver DNS Firewall em todas as VPCs, bloqueando os domínios da lista de ameaças gerenciada pela AWS.
Como é feito o deploy
Como o resto do ARGLabs, tudo roda pelo Bitbucket Pipelines. O pipeline assume a role bitbucket-openid via OIDC, que então assume a role deployer para alterar a AWS. Nenhuma credencial de longa duração em lugar nenhum.
Na branch main, o pipeline faz o plan e o apply da criação da conta (com uma aprovação manual), remove as VPCs default da nova conta, executa uma estimativa de custo com o Infracost e depois aplica a configuração em dev, stg e prd, nessa ordem.
Repositório: bitbucket.org/arglabs/arglabs-account-sharednetwork
Módulo de rede: bitbucket.org/arglabs/arglabs-tfmod-bigbang-network