000: Pré-requisitos da Main Account
No ARGLabs queremos fazer tudo como código, mas no primeiro momento não conseguimos nem rodar pipelines. Não existe role IAM para o Bitbucket assumir, nem bucket S3 para guardar o state do Terraform, nem políticas para autorizar qualquer coisa. Este projeto quebra esse ciclo do ovo e da galinha provisionando as peças de que todos os outros projetos do ARGLabs dependem.
O que ele provisiona
- Provedor OIDC do Bitbucket no AWS IAM, confiando apenas em tokens emitidos para o workspace
arglabsdo Bitbucket. - Role
bitbucket-openid, assumida pelo Bitbucket Pipelines viasts:AssumeRoleWithWebIdentity. Suas únicas permissões são assumir outras roles:deployerem qualquer conta eOrganizationAccountAccessRolenas contas membro. A política do bucket de state também permite que ela leia e grave o state do Terraform diretamente. - Role
deployer, assumida pelabitbucket-openide pelo usuário de bootstrap descrito abaixo. Ela tem as permissões de deploy da Main Account, agrupadas aqui pelo que servem:- organização e identidade:
organizations:*,account:*,iam:*,sso:*,identitystore:*,ram:* - DNS:
route53:*,route53domains:* - state e buckets:
s3:* - auditoria e busca:
cloudtrail:*,athena:*,glue:*,resource-explorer-2:* - custos e quotas: três ações
cepara as tags de alocação de custo,servicequotas:* - monitoramento e este site:
cloudwatch:*,logs:*,cloudfront:*,acm:*,lambda:*
- organização e identidade:
- Bucket
arglabs-terraform-states, o backend de remote state de todos os projetos Terraform do ARGLabs.
Como fazer o bootstrap
O primeiro apply precisa de um usuário IAM temporário com duas políticas: IAMReadOnlyAccess (gerenciada pela AWS) e iamuser-mainaccount-iac-prereqs (gerenciada pelo cliente, com privilégio mínimo para os recursos deste repositório).
Exporte as chaves do usuário, execute terraform init, plan e apply a partir de terraform/, e depois desative as chaves. A partir daí, todos os outros projetos rodam pelo Bitbucket Pipelines com OIDC, sem credenciais AWS de longa duração.
Este projeto em si continua manual: não tem pipeline, e seu state é um arquivo local. Uma mudança posterior, como uma nova permissão para o deployer, é aplicada do mesmo jeito, reativando as chaves do usuário de bootstrap só para aquela execução.
Repositório: bitbucket.org/arglabs/arglabs-mainaccount-prereqs