Implementação do Account Factory for Terraform (AFT) usando um pipeline de bootstrap
Vinicius Elias e Edgar Costa Filho, Amazon Web Services
Resumo
Aviso: o AWS CodeCommit não está mais disponível para novos clientes. Os clientes atuais do AWS CodeCommit podem continuar usando o serviço normalmente. Saiba mais
Este padrão fornece um método simples e seguro para implantar o AWS Control Tower Account Factory for Terraform (AFT) pela conta gerencial do AWS Organizations. O núcleo da solução é um modelo do CloudFormation que automatiza a configuração do AFT criando um pipeline do Terraform, que é estruturado para ser facilmente adaptável à implantação inicial ou às atualizações subsequentes.
A segurança e a integridade dos dados são as principais prioridades na AWS, portanto, o arquivo de estado do Terraform, que é um componente essencial que rastreia o estado da infraestrutura e das configurações gerenciadas, é armazenado com segurança em um bucket do Amazon Simple Storage Service (Amazon S3). Esse bucket é configurado com várias medidas de segurança, incluindo criptografia do lado do servidor e políticas para bloquear o acesso público, para ajudar a garantir que seu estado do Terraform seja protegido contra acesso não autorizado e violações de dados.
A conta gerencial orquestra e supervisiona todo o ambiente, portanto, é um recurso essencial no AWS Control Tower. Este padrão segue as práticas recomendadas da AWS e garante que o processo de implantação não seja apenas eficiente, mas também esteja alinhado aos padrões de segurança e governança, para oferecer uma maneira abrangente, segura e eficiente de implantar o AFT em seu ambiente da AWS.
Para obter mais informações sobre o AFT, consulte a documentação do AWS Control Tower.
Pré-requisitos e limitações
Pré-requisitos
Um ambiente básico da AWS de várias contas com, no mínimo, as seguintes contas: conta gerencial, conta de arquivamento de logs, conta de auditoria e uma conta adicional para gerenciamento dp AFT.
Um ambiente do AWS Control Tower estabelecido. A conta gerencial deve ser configurada adequadamente, pois o modelo do CloudFormation será implantado nela.
As permissões necessárias na conta gerencial da AWS. Você precisará de permissões suficientes para criar e gerenciar recursos, como buckets do S3, funções do AWS Lambda, perfis do AWS Identity and Access Management (IAM) e projetos do AWS CodePipeline.
Familiaridade com o Terraform. Compreender os principais conceitos e o fluxo de trabalho do Terraform é importante porque a implantação envolve a geração e o gerenciamento das configurações do Terraform.
Limitações
Esteja ciente das cotas de recursos da AWS em sua conta. A implantação pode criar vários recursos, e encontrar cotas de serviço pode impedir o processo de implantação.
O modelo foi desenvolvido para versões específicas do Terraform e Serviços da AWS. A atualização ou alteração de versões pode exigir modificações no modelo.
O modelo não é compatível com serviços de sistema de controle de versão (VCS) autogerenciado, como o GitHub Enterprise.
Versões do produto
Terraform versão 1.6.6 ou superior
AFT versão 1.11 ou posterior
Arquitetura
Pilha de tecnologias de destino
CloudFormation
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
Amazon EventBridge
IAM
AWS Lambda
Amazon S3
Arquitetura de destino
O diagrama a seguir ilustra a implementação discutida neste padrão.

O fluxo de trabalho consiste em três tarefas principais: criar os recursos, gerar o conteúdo e executar o pipeline.
Criar os recursos
O modelo do CloudFormation fornecido com este padrão
Um pipeline do CodePipeline para implementar o AFT
Um bucket do S3 para armazenar o arquivo de estado do Terraform associado à implementação do AFT
Dois projetos do CodeBuild para implementar o plano do Terraform e aplicar comandos em diferentes estágios do pipeline
Perfis do IAM para serviços CodeBuild e CodePipeline
Um segundo bucket do S3 para armazenar artefatos do runtime do pipeline
Dependendo do provedor de VCS selecionado (CodeCommit ou VCS externo), o modelo cria os recursos a seguir.
Para o CodeCommit:
Um repositório do CodeCommit para armazenar o código de bootstrap do AFT Terraform
Uma regra do EventBridge para capturar as alterações do repositório do CodeCommit na ramificação
mainOutro perfil do IAM para a regra do EventBridge
Para qualquer outro provedor externo de VCS, como o GitHub:
Uma conexão do Conexões de código da AWS.
Além disso, quando você seleciona o CodeCommit como provedor de VCS, se você definir o parâmetro Generate AFT Files como true, o modelo cria esses recursos adicionais para gerar o conteúdo:
Um bucket do S3 para armazenar o conteúdo gerado e ser usado como fonte do repositório do CodeCommit
Uma função do Lambda para processar os parâmetros fornecidos e gerar o conteúdo apropriado
Uma função do IAM para executar a função do Lambda
Um recurso personalizado do CloudFormation que executa a função do Lambda quando o modelo é implantado
Gerar o conteúdo
Para gerar os arquivos de bootstrap do AFT e seu conteúdo, a solução usa uma função do Lambda e um bucket do S3. A função cria uma pasta no bucket e, em seguida, cria dois arquivos dentro da pasta: main.tf e backend.tf. A função também processa os parâmetros fornecidos do CloudFormation e preenche esses arquivos com código predefinido, substituindo os respectivos valores dos parâmetros.
Para ver o código usado como modelo para gerar os arquivos, consulte o repositório GitHub
main.tf
module "aft" { source = "github.com/aws-ia/terraform-aws-control_tower_account_factory?ref=<aft_version>" # Required variables ct_management_account_id = "<ct_management_account_id>" log_archive_account_id = "<log_archive_account_id>" audit_account_id = "<audit_account_id>" aft_management_account_id = "<aft_management_account_id>" ct_home_region = "<ct_home_region>" # Optional variables tf_backend_secondary_region = "<tf_backend_secondary_region>" aft_metrics_reporting = "<false|true>" # AFT Feature flags aft_feature_cloudtrail_data_events = "<false|true>" aft_feature_enterprise_support = "<false|true>" aft_feature_delete_default_vpcs_enabled = "<false|true>" # Terraform variables terraform_version = "<terraform_version>" terraform_distribution = "<terraform_distribution>" # VCS variables (if you have chosen an external VCS) vcs_provider = "<github|githubenterprise|gitlab|gitlabselfmanaged|bitbucket>" account_request_repo_name = "<org-name>/aft-account-request" account_customizations_repo_name = "<org-name>/aft-account-customizations" account_provisioning_customizations_repo_name = "<org-name>/aft-account-provisioning-customizations" global_customizations_repo_name = "<org-name>/aft-global-customizations" }
backend.tf
terraform { backend "s3" { region = "<aft-main-region>" bucket = "<s3-bucket-name>" key = "aft-setup.tfstate" } }
Durante a criação do repositório do CodeCommit, se você definir o parâmetro Generate AFT Files como true, o modelo usará o bucket do S3 com o conteúdo gerado como a origem da ramificação main para preencher automaticamente o repositório.
Execução do pipeline
Depois que os recursos foram criados e os arquivos de bootstrap foram configurados, o pipeline é executado. O primeiro estágio (Origem) busca o código-fonte da ramificação principal do repositório e o segundo estágio (Compilação) executa o comando de plano do Terraform e gera os resultados a serem revisados. No terceiro estágio (Aprovação), o pipeline aguarda uma ação manual para aprovar ou rejeitar o último estágio (Implantação). No último estágio, o pipeline executa o comando apply do Terraform usando o resultado do comando plan anterior do Terraform como entrada. Finalmente, uma função entre contas e as permissões na conta gerencial são usadas para criar os recursos do AFT na conta gerencial do AFT.
nota
Se você selecionar um provedor de VCS externo, precisará autorizar a conexão com suas credenciais de provedor de VCS. Para concluir a configuração, siga as etapas em Update a pending connection na documentação do console do AWS Developer Tools.
Ferramentas
Serviços da AWS
O CloudFormation permite configurar recursos da AWS, provisioná-los de forma rápida e consistente, e administrá-los durante todo o ciclo de vida em diferentes regiões e Contas da AWS.
O AWS CodeBuild é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.
O AWS CodeCommit é um serviço de controle de versão que ajuda no armazenamento e no gerenciamento de repositórios Git de forma privada, sem a necessidade de administrar o próprio sistema de controle de origem.
O AWS CodePipeline ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações.
O Conexões de código da AWS permite que recursos e serviços da AWS, como o CodePipeline, se conectem a repositórios de código externos, como o GitHub.
O AWS Lambda é um serviço de computação que executa seu código em resposta a eventos e gerencia automaticamente os recursos de computação, fornecendo uma maneira rápida de criar uma aplicação moderna e sem servidor para produção.
O AWS SDK para Python (Boto3)
é um kit de desenvolvimento de software que ajuda você a integrar sua aplicação, biblioteca ou script Python aos Serviços da AWS.
Outras ferramentas
O Terraform
é uma ferramenta de infraestrutura como código (IaC) que permite criar, alterar e versionar a infraestrutura com segurança e eficiência. Isso inclui componentes de baixo nível, como instâncias de computação, armazenamento e rede, e componentes de alto nível, como entradas de DNS e recursos de SaaS. O Python
é uma linguagem de programação poderosa e fácil de aprender. Ele tem estruturas de dados de alto nível eficientes e fornece uma abordagem simples, mas eficaz, à programação orientada a objetos.
Repositório de código
O código para este padrão está disponível no repositório AFT bootstrap pipeline repository
Para o repositório oficial do AFT, consulte AWS Control TowerAccount Factory for Terraform
Práticas recomendadas
Ao implantar o AFT usando o modelo fornecido do CloudFormation, recomendamos que você siga as práticas recomendadas para ajudar a garantir uma implementação segura, eficiente e bem-sucedida. As principais diretrizes e recomendações para implementar e operar o AFT incluem o seguinte.
Análise completa dos parâmetros: analise e compreenda cuidadosamente cada parâmetro no modelo do CloudFormation. A definição correta dos parâmetros é crucial para a configuração e o funcionamento corretos do AFT.
Atualizações regulares do modelo: mantenha o modelo atualizado com os recursos da AWS e as versões do Terraform mais recentes. As atualizações regulares ajudam você a aproveitar as novas funcionalidades e manter a segurança.
Versionamento: especifique a versão do módulo do AFT e, se possível, realize testes em uma implantação separada do AFT.
Escopo: use o AFT apenas para implantar barreiras de proteção e personalizações para a infraestrutura. Não o use para implantar sua aplicação.
Análise de código e validação: o pipeline do AFT exige uma configuração do Terraform que tenha passado por análise de código e validação. Execute a análise de código, a validação e os testes antes de enviar a configuração para os repositórios do AFT.
Módulos do Terraform: desenvolva código do Terraform reutilizável como módulos e sempre especifique as versões do Terraform e do provedor da AWS de acordo com os requisitos da sua organização.
Épicos
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Prepare o ambiente do AWS Control Tower. | Prepare e configure o AWS Control Tower em seu ambiente da AWS para garantir o gerenciamento centralizado e a governança das Contas da AWS. Para obter mais informações, consulte Getting started with AWS Control Tower na documentação do AWS Control Tower. | Administrador de nuvem |
Crie a conta gerencial do AFT. | Use o AWS Control Tower Account Factory para criar uma nova Conta da AWS para servir como sua conta gerencial do AFT. Para obter mais informações, consulte Provision accounts with AWS Service Catalog Account Factory na documentação do AWS Control Tower. | Administrador de nuvem |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Inicialize o modelo do CloudFormation. | Neste épico, você implanta o modelo do CloudFormation fornecido com essa solução para configurar o pipeline de bootstrap do AFT em sua conta gerencial da AWS. O pipeline implanta a solução AFT na conta gerencial do AFT que você configurou no épico anterior. Etapa 1: abrir o console do CloudFormation
Etapa 2: criar uma nova pilha
Etapa 3: configurar os parâmetros da pilha
Etapa 4: decidir sobre a geração de arquivos
Etapa 5: preencher os detalhes da conta do AFT no AWS Control Tower
Etapa 6: configurar as opções do AFT
Etapa 7: especificar as versões
Etapa 8: analisar e criar a pilha
Etapa 9: monitorar a criação da pilha
Etapa 10: verificar a implantação
| Administrador de nuvem |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Opção 1: preencher o repositório de bootstrap do AFT para um VCS externo. | Se você definir o provedor de VCS para um VCS externo (não para o CodeCommit), siga estas etapas. (Opcional) Depois de implantar o modelo do CloudFormation, você pode preencher ou validar o conteúdo no repositório de bootstrap do AFT recém-criado e testar se o pipeline foi executado com êxito. Etapa 1: atualizar a conexão
Etapa 2: preencher o repositório
Etapa 2: confirmar e enviar as alterações
| Administrador de nuvem |
Opção 2: preencher o repositório de bootstrap do AFT para o CodeCommit. | Se você definir o provedor de VCS como o CodeCommit, siga estas etapas. (Opcional) Depois de implantar o modelo do CloudFormation, você pode preencher ou validar o conteúdo no repositório de bootstrap do AFT recém-criado e testar se o pipeline foi executado com êxito. Se você definir o parâmetro Etapa 1: preencher o repositório
Etapa 2: confirmar e enviar as alterações
| Administrador de nuvem |
Valide o pipeline de bootstrap do AFT. | Etapa 1: exibir o pipeline
Etapa 2: aprovar os resultados do plano do Terraform
Etapa 3: aguardar a implantação
Etapa 4: verificar os recursos criados
| Administrador de nuvem |
Solução de problemas
| Problema | Solução |
|---|---|
A função do Lambda personalizada incluída no modelo do CloudFormation falha durante a implantação. | Verifique os logs do Amazon CloudWatch da função do Lambda para identificar o erro. Os logs fornecem informações detalhadas e podem ajudar a identificar o problema específico. Confirme se a função do Lambda tem as permissões necessárias e se as variáveis de ambiente foram definidas corretamente. |
Você recebe falhas na criação ou no gerenciamento de recursos devido a permissões insuficientes. | Analise as políticas e os perfis do IAM que estão associadas à função do Lambda, ao CodeBuild e a outros serviços envolvidos na implantação. Confirme que todos têm as permissões necessárias. Se houver problemas de permissão, ajuste as políticas do IAM para conceder o acesso necessário. |
Você está usando uma versão desatualizada do modelo do CloudFormation com Serviços da AWS ou versões do Terraform mais recentes. | Atualize regularmente o modelo do CloudFormation para que seja compatível com as versões da AWS e do Terraform mais recentes. Verifique as notas de lançamento ou a documentação para ver se há alterações ou requisitos específicos da versão. |
As cotas do AWS service (Serviço da AWS) são atingidas durante a implantação. | Antes de implantar o pipeline, verifique as cotas do AWS service (Serviço da AWS) para recursos como buckets do S3, perfis do IAM e funções do Lambda. Solicite aumentos, se necessário. Para obter mais informações, consulte AWS service (Serviço da AWS) quotas no site da AWS. |
Você encontra erros devido a parâmetros de entrada incorretos no modelo do CloudFormation. | Verifique novamente todos os parâmetros de entrada em busca de erros de digitação ou valores incorretos. Confirme se os identificadores de recursos, como IDs de conta e nomes de regiões, estão corretos. |
Recursos relacionados
Para implementar este padrão com sucesso, revise os recursos a seguir. Esses recursos fornecem informações e orientações adicionais que podem ser imprescindíveis na configuração e no gerenciamento do AFT usando o CloudFormation.
AWS Documentação do:
O Guia do usuário do AWS Control Tower oferece informações detalhadas sobre a configuração e o gerenciamento do AWS Control Tower.
A documentação do CloudFormation fornece informações sobre modelos, pilhas e gerenciamento de recursos do CloudFormation.
Práticas recomendadas e políticas do IAM:
As Práticas recomendadas de segurança no IAM explicam como ajudar a proteger os recursos da AWS usando políticas e perfis do IAM.
O Terraform na AWS:
A documentação do Terraform AWS Provider
fornece informações abrangentes sobre como usar o Terraform com a AWS.
AWS service (Serviço da AWS) Cotas do:
As Cotas de AWS service (Serviço da AWS) fornecem informações sobre como visualizar as cotas de AWS service (Serviço da AWS) e como solicitar aumentos.