Pular para o conteúdo
000: Pré-requisitos da Main Account

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 arglabs do Bitbucket.
  • Role bitbucket-openid, assumida pelo Bitbucket Pipelines via sts:AssumeRoleWithWebIdentity. Suas únicas permissões são assumir outras roles: deployer em qualquer conta e OrganizationAccountAccessRole nas 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 pela bitbucket-openid e 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 ce para as tags de alocação de custo, servicequotas:*
    • monitoramento e este site: cloudwatch:*, logs:*, cloudfront:*, acm:*, lambda:*
  • 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

Última atualização em