Implemente o Account Factory for Terraform (AFT) usando um pipeline de bootstrap - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Implemente o Account Factory for Terraform (AFT) usando um pipeline de bootstrap

Criado por Vinicius Elias (AWS) e Edgar Costa Filho () AWS

Repositório de códigos: aft-bootstrap-pipeline

Ambiente: produção

Tecnologias: Gestão e governança; Infraestrutura

Workload: código aberto

AWSserviços: AWS CodeBuild; AWS CodeCommit; AWS CodePipeline AWS Control Tower; AWS Organizations

Resumo

Aviso: não AWS CodeCommit está mais disponível para novos clientes. Os clientes existentes do AWS CodeCommit podem continuar usando o serviço normalmente. Saiba mais

Esse padrão fornece um método simples e seguro para implantar o AWS Control Tower Account Factory for Terraform (AFT) a partir da conta de gerenciamento do. AWS Organizations O núcleo da solução é um AWS CloudFormation modelo que automatiza a AFT configuração 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 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 de gerenciamento organiza e supervisiona todo o ambiente, portanto, é um recurso essencial em. AWS Control Tower Esse padrão segue as AWS melhores práticas 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 AFT em seu AWS ambiente.

Para obter mais informações sobreAFT, consulte a AWS Control Tower documentação.

Pré-requisitos e limitações

Pré-requisitos

  • Um ambiente básico de AWS várias contas com, no mínimo, as seguintes contas: conta de gerenciamento, conta de arquivamento de registros, conta de auditoria e uma conta adicional para AFT gerenciamento.

  • Um AWS Control Tower ambiente estabelecido. A conta de gerenciamento deve ser configurada adequadamente, pois o CloudFormation modelo será implantado nela.

  • As permissões necessárias na conta AWS de gerenciamento. Você precisará de permissões suficientes para criar e gerenciar recursos, como buckets, AWS Lambda funções, AWS Identity and Access Management (IAM) funções e AWS CodePipeline projetos do S3.

  • 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 AWS de recursos 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.

Versões do produto

  • Terraform versão 1.5.7 ou posterior

  • AFTversão 1.11.1 ou posterior

Arquitetura

Pilha de tecnologias de destino

  • AWS 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 nesse padrão.

Fluxo de trabalho para implementação AFT usando um pipeline de bootstrap

O fluxo de trabalho consiste em três tarefas principais: criar os recursos, gerar o conteúdo e executar o pipeline.

Criando os recursos

O CloudFormation modelo fornecido com esse padrão cria e configura todos os recursos necessários, dependendo dos parâmetros selecionados ao implantar o modelo. No mínimo, o modelo cria os seguintes recursos:

  • Um CodeCommit repositório para armazenar o código bootstrap do AFT Terraform

  • Um bucket S3 para armazenar o arquivo de estado do Terraform associado à implementação AFT

  • Um CodePipeline gasoduto

  • Dois CodeBuild projetos para implementar o plano Terraform e aplicar comandos em diferentes estágios do pipeline

  • IAMfunções CodeBuild e CodePipeline serviços

  • Um segundo bucket S3 para armazenar artefatos de tempo de execução do pipeline

  • Uma EventBridge regra para capturar alterações no CodeCommit repositório na ramificação main

  • Outro IAM papel para a EventBridge regra

Além disso, se você definir o Generate AFT Files parâmetro no CloudFormation modelo comotrue, o modelo criará esses recursos adicionais para gerar o conteúdo:

  • Um bucket S3 para armazenar o conteúdo gerado e ser usado como fonte do CodeCommit repositório

  • Uma função Lambda para processar os parâmetros fornecidos e gerar o conteúdo apropriado

  • Uma IAM função para executar a função Lambda

  • Um recurso CloudFormation personalizado que executa a função Lambda quando o modelo é implantado

Gerando o conteúdo

Para gerar os arquivos AFT bootstrap e seu conteúdo, a solução usa uma função Lambda e um bucket S3. A função cria uma pasta no bucket e, em seguida, cria dois arquivos dentro da pasta: main.tf backend.tf e. A função também processa os CloudFormation parâmetros fornecidos e preenche esses arquivos com código predefinido, substituindo os respectivos valores dos parâmetros.

Para visualizar o código usado como modelo para gerar os arquivos, consulte o GitHub repositório da solução. Basicamente, os arquivos são gerados da seguinte forma.

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>" }

backend.tf

terraform { backend "s3" { region = "<aft-main-region>" bucket = "<s3-bucket-name>" key = "aft-setup.tfstate" } }

Durante a criação do CodeCommit repositório, se você definir o Generate AFT Files parâmetro comotrue, o modelo usará o bucket do S3 com o conteúdo gerado como a origem da main ramificação para preencher automaticamente o repositório.

Executando o pipeline

Depois que os recursos foram criados e os arquivos de bootstrap foram configurados, o pipeline é executado. O primeiro estágio (Fonte) busca o código-fonte da ramificação principal do repositório e o segundo estágio (Construçã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 apply comando do Terraform usando o resultado do comando anterior do Terraform como plan entrada. Finalmente, uma função entre contas e as permissões na conta de gerenciamento são usadas para criar os AFT recursos na conta AFT de gerenciamento.

Ferramentas

AWSserviços

  • AWS CloudFormationajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em todas AWS as contas e regiões.

  • AWS CodeBuildé um serviço de compilação totalmente gerenciado que ajuda você a compilar o código-fonte, executar testes de unidade e produzir artefatos prontos para implantação. 

  • AWS CodeCommité um serviço de controle de versão que ajuda você a armazenar e gerenciar repositórios Git de forma privada sem precisar gerenciar seu próprio sistema de controle de código-fonte.

  • AWS CodePipelineajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software e automatizar as etapas necessárias para liberar alterações de software continuamente.

  • 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 um aplicativo moderno e sem servidor para produção.

  • AWS SDK for Python (Boto3)é um kit de desenvolvimento de software que ajuda você a integrar seu aplicativo, biblioteca ou script Python aos AWS serviços.

Outras ferramentas

  • O Terraform é uma ferramenta de infraestrutura como código (IaC) que permite criar, alterar e criar versões da 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 DNS e recursos SaaS.

  • Python é uma linguagem de programação poderosa e fácil de aprender. Ele tem estruturas de dados eficientes de alto nível e fornece uma abordagem simples, mas eficaz, para a programação orientada a objetos.

Repositório de código

O código desse padrão está disponível no repositório do pipeline GitHub AFT bootstrap.

Para o AFT repositório oficial, consulte AWSControl Tower Account Factory for Terraform em. GitHub

Práticas recomendadas

AFTAo implantar usando o CloudFormation modelo fornecido, recomendamos que você siga as melhores práticas 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.

  • Revisão completa dos parâmetros: analise e compreenda cuidadosamente cada parâmetro no CloudFormation modelo. A configuração precisa dos parâmetros é crucial para a configuração e o funcionamento corretos doAFT.

  • Atualizações regulares do modelo: mantenha o modelo atualizado com os AWS recursos mais recentes e as versões do Terraform. As atualizações regulares ajudam você a aproveitar as novas funcionalidades e manter a segurança.

  • Controle de versão: fixe a versão do seu AFT módulo e use uma AFT implantação separada para testar, se possível.

  • Escopo: use AFT somente para implantar proteções e personalizações de infraestrutura. Não o use para implantar seu aplicativo.

  • Linting e validação: o AFT pipeline requer uma configuração do Terraform vinculada e validada. Execute o lint, valide e teste antes de enviar a configuração para os repositórios. AFT

  • Módulos do Terraform: crie código reutilizável do Terraform como módulos e sempre especifique as versões do Terraform e do AWS provedor de acordo com os requisitos da sua organização.

Épicos

TarefaDescriçãoHabilidades necessárias

Prepare o AWS Control Tower ambiente.

Instale e configure AWS Control Tower em seu AWS ambiente para garantir gerenciamento e governança centralizados para seu Contas da AWS. Para obter mais informações, consulte Introdução AWS Control Tower na AWS Control Tower documentação.

Administrador de nuvem

Inicie a conta AFT de gerenciamento.

Use o AWS Control Tower Account Factory para lançar uma nova Conta da AWS para servir como sua conta AFT de gerenciamento. Para obter mais informações, consulte Provisionar contas com AWS Service Catalog Account Factory na AWS Control Tower documentação.

Administrador de nuvem
TarefaDescriçãoHabilidades necessárias

Inicie o CloudFormation modelo.

Neste épico, você implanta o CloudFormation modelo fornecido com essa solução para configurar o pipeline de AFT bootstrap em sua conta AWS de gerenciamento. O pipeline implanta a AFT solução na conta AFT de gerenciamento que você configurou no épico anterior.

Etapa 1: abrir o AWS CloudFormation console

  • Faça login no AWS Management Console e abra o AWS CloudFormation console. Verifique se você está operando na região AWS Control Tower principal correta.

Etapa 2: criar uma nova pilha

  1. Escolha criar uma nova pilha.

  2. Selecione a opção de carregar um arquivo de modelo e carregar o CloudFormation modelo fornecido com esse padrão.

Etapa 3: configurar os parâmetros da pilha

  • Repository Name: especifique o nome do repositório para armazenar o módulo AFT bootstrap.

  • Branch Name: especifique a ramificação do repositório de origem.

  • CodeBuild Docker Image: escolha o arquivo a ser usado como imagem base do CodeBuild Docker.

Etapa 4: decidir sobre a geração de arquivos

  • O Generate AFT Files parâmetro controla se os arquivos de AFT implantação padrão devem ser gerados. Defina esse parâmetro como:

    • truepara criar e armazenar automaticamente arquivos AFT de implantação no repositório especificado.

    • falsese você quiser lidar manualmente com a criação do arquivo ou se já tiver os arquivos no lugar.

    Se você selecionoufalse, vá para a etapa 8; caso contrário, siga primeiro as etapas 5 a 7.

Etapa 5: preencha os AWS Control Tower detalhes AFT da conta

  • Entrada AWS Control Tower e informações AFT específicas da conta:

    • Log Archive Account ID: O ID do ID da conta do Log Archive em AWS Control Tower.

    • Audit Account ID: O ID da conta de auditoria em AWS Control Tower.

    • AFT Management Account ID: O ID da conta AFT de gerenciamento que você criou no primeiro épico.

    • AFT Main RegioneAFT Secondary Region: O principal e o secundário Regiões da AWS para AFT implantação.

Etapa 6: configurar AFT as opções

  • Configure relatórios de métricas:

    • AFT Enable Metrics Reporting: Ative ou desative os relatórios de AFT métricas. Para obter mais informações, consulte Métricas operacionais na AWS Control Tower documentação.

  • Defina as opções de AFT recursos:

    • Enable AFT CloudTrail Data Events: habilite eventos CloudTrail de dados em todas as contas AFT gerenciadas. Para obter mais informações, consulte eventos de AWS CloudTrail dados na AWS Control Tower documentação.

    • Enable AFT Enterprise Support: habilite o Enterprise Support em todas as contas AFT gerenciadas. Para obter mais informações, consulte o plano AWS Enterprise Support na AWS Control Tower documentação.

    • Enable AFT Delete Default VPC: exclua tudo somente VPCs na conta AFT de gerenciamento. Para obter mais informações, consulte Excluir o AWS padrão VPC na AWS Control Tower documentação.

Etapa 7: especificar versões

  • AFT Terraform Version: escolha a versão do Terraform para usar em AFT pipelines.

  • AFT Version: defina a AFT versão para implantação. Mantenha a configuração padrão (latest) para usar a AFT versão mais atual.

Etapa 8: revisar e criar a pilha

  • Revise todos os parâmetros e configurações. Se tudo estiver em ordem, continue criando a pilha.

Etapa 9: Monitorar a criação da pilha

  • AWS CloudFormation provisiona e configura os recursos que você definiu. Monitore o processo de criação da pilha no CloudFormation console. Esse processo pode levar alguns minutos.

Etapa 10: Verificar a implantação

  • Quando o status da pilha mostrar CREATE_ COMPLETE, verifique se todos os recursos foram criados corretamente.

  • Na seção Saídas, observe o TerraformBackendBucketName valor.

Administrador de nuvem
TarefaDescriçãoHabilidades necessárias

Preencha o repositório AFT bootstrap.

(Opcional) Depois de implantar o CloudFormation modelo, você pode preencher ou validar o conteúdo no repositório AFT bootstrap recém-criado e testar se o pipeline foi executado com êxito.

Se você definir o Generate AFT Files parâmetro comotrue, vá para a próxima história (validando o pipeline).

Etapa 1: preencher o repositório

  1. Abra o AWS CodeCommit console e selecione o repositório recém-criado. Se você mantiver o nome padrão, o repositório será chamadoaft-setup.

  2. Clone o repositório em sua máquina local usando SSHHTTPS, ou HTTPS (GRC) e abra-o em um editor.

  3. Crie uma pasta chamada terraform e dois arquivos vazios dentro dela: backend.tf main.tf e.

  4. Abra o backend.tf arquivo e adicione este trecho de código:

    terraform { backend "s3" { region = "<aft-main-region>" bucket = "<s3-bucket-name>" key = "aft-setup" } }

    No arquivo:

    • <aft-main-region>Substitua pela AFT região principal. Isso deve corresponder à região AWS Control Tower principal.

    • <s3-bucket-name>Substitua pelo nome do bucket de back-end do Terraform. Você pode encontrar isso na TerraformBackendBucketName saída gerada pelo CloudFormation modelo que você implantou anteriormente.

  5. Abra o main.tf arquivo e use um dos exemplos disponíveis no AFTrepositório para AFT implantar. Por exemplo, você pode trabalhar com seu provedor de sistema de controle de versão (VCS) preferido (CodeCommit GitHub,, ou Bitbucket) ou personalizar o. AFT VPC Para obter mais opções de AFT entrada, consulte o READMEarquivo no AFT repositório.

Etapa 2: confirme e promova suas alterações

  • Depois de criar e preencher a pasta e os arquivos, confirme suas alterações e faça o upload do código no repositório. O pipeline é iniciado automaticamente, percorre os estágios de origem e criação e, em seguida, aguarda uma ação de aprovação antes do estágio de implantação.

Administrador de nuvem

Valide o pipeline de AFT bootstrap.

Etapa 1: Visualizar o pipeline

  • Abra o CodePipeline console e verifique se o aft-bootstrap-pipeline pipeline foi iniciado com sucesso. Ele deve estar executando um plano do Terraform ou aguardando uma ação de aprovação manual.

Etapa 2: Aprovar os resultados do plano Terraform

  • Você pode revisar os resultados do plano do Terraform examinando os registros de execução do estágio de construção e, em seguida, aprovar ou rejeitar a execução no estágio de aprovação. Se você aprovar, o pipeline começará a implantar AFT recursos na conta de AFT gerenciamento fornecida.

Etapa 3: Aguarde a implantação

  • Aguarde até que o pipeline seja executado com sucesso. Isso deve levar cerca de 30 minutos. Quaisquer falhas que você possa encontrar geralmente são causadas por API cotas. Nesses casos, você pode executar novamente o pipeline para continuar a implantação.

Etapa 4: verificar os recursos criados

  • Acesse a conta AFT de gerenciamento e confirme se os recursos foram criados.

Administrador de nuvem

Solução de problemas

ProblemaSolução

A função Lambda personalizada incluída no CloudFormation modelo falha durante a implantação.

Verifique os CloudWatch registros da Amazon para a função Lambda para identificar o erro. Os registros fornecem informações detalhadas e podem ajudar a identificar o problema específico. Confirme se a função Lambda tem as permissões necessárias e se as variáveis de ambiente foram definidas corretamente.

Você encontra falhas na criação ou no gerenciamento de recursos causadas por permissões inadequadas.

Analise as IAM funções e políticas associadas à função Lambda e outros serviços envolvidos na implantação. CodeBuild Confirme se eles têm as permissões necessárias. Se houver problemas de permissão, ajuste as IAM políticas para conceder o acesso necessário.

Você está usando uma versão desatualizada do CloudFormation modelo com versões mais recentes Serviços da AWS ou do Terraform.

Atualize regularmente o CloudFormation modelo para ser compatível com as versões mais recentes AWS e do Terraform. Verifique as notas de lançamento ou a documentação para ver se há alterações ou requisitos específicos da versão.

Você atinge as AWS service (Serviço da AWS) cotas durante a implantação.

Antes de implantar o pipeline, verifique as AWS service (Serviço da AWS) cotas de recursos como buckets do S3, IAM funções e funções Lambda. A solicitação aumenta, se necessário. Para obter mais informações, consulte AWS service (Serviço da AWS) as cotas no AWS site.

Você encontra erros devido a parâmetros de entrada incorretos no CloudFormation modelo.

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 nomes de conta IDs e região, estão corretos.

Recursos relacionados

Para implementar esse padrão com sucesso, revise os recursos a seguir. Esses recursos fornecem informações e orientações adicionais que podem ser inestimáveis para configurar e gerenciar AFT usando AWS CloudFormation.

AWSdocumentação:

IAMpolíticas e melhores práticas:

Terraform em AWS:

AWS service (Serviço da AWS) cotas: