Implante e gerencie os controles da AWS Control Tower usando o AWS CDK e o AWS CloudFormation - 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á.

Implante e gerencie os controles da AWS Control Tower usando o AWS CDK e o AWS CloudFormation

Criado por Iker Reina Fuente (AWS) e Ivan Girardi (AWS)

Repositório de código: aws-control-tower-controls -cdk

Ambiente: produção

Tecnologias: Segurança, identidade, conformidade; Infraestrutura CloudNative; Gestão e governança

Serviços da AWS: AWS CloudFormation; AWS Control Tower; AWS Organizations; AWS CDK

Resumo

Esse padrão descreve como usar a AWS CloudFormation e o AWS Cloud Development Kit (AWS CDK) para implementar e administrar controles preventivos, detectivos e proativos do AWS Control Tower como infraestrutura como código (IaC). Um controle (também conhecido como barreira de proteção) é uma regra de alto nível que fornece governança contínua para o ambiente geral da AWS Control Tower. Por exemplo, você pode usar controles para exigir o registro de suas contas da AWS e, em seguida, configurar notificações automáticas caso ocorram eventos específicos relacionados à segurança.

O AWS Control Tower ajuda você a implementar controles para prevenção, detecção e proativação que governam seus recursos da AWS e monitoram a conformidade em várias contas da AWS. Cada controle impõe uma única regra. Neste padrão, você usa um modelo de IaC fornecido para especificar quais controles você deseja implantar em seu ambiente.

Os controles da AWS Control Tower se aplicam a uma unidade organizacional (UO) inteira, e o controle afeta todas as contas da AWS dentro da UO. Portanto, quando os usuários realizam qualquer ação em qualquer conta em sua zona de pouso, a ação está sujeita aos controles que governam a UO.

A implementação dos controles da AWS Control Tower ajuda a estabelecer uma base sólida de segurança para sua Zona de Pouso da AWS. Ao usar esse padrão para implantar os controles como IaC CloudFormation e AWS CDK, você pode padronizar os controles em sua landing zone e implantá-los e gerenciá-los com mais eficiência. Essa solução usa cdk_nag para escanear o aplicativo AWS CDK durante a implantação. Essa ferramenta verifica a adesão do aplicativo às práticas recomendadas da AWS.

Para implantar os controles do AWS Control Tower como IaC, você também pode usar o HashiCorp Terraform em vez do AWS CDK. Para obter mais informações, consulte Implantar e gerenciar controle da AWS Control Tower usando o Terraform.

Público-alvo

Esse padrão é recomendado para usuários com experiência com o AWS Control Tower CloudFormation, o AWS CDK e o AWS Organizations.

Pré-requisitos e limitações

Pré-requisitos

Limitações

  • Este padrão fornece instruções para implantar essa solução em todas as contas da AWS, desde uma conta de implantação até a conta de gerenciamento da organização. Para fins de teste, você pode implantar essa solução diretamente na conta de gerenciamento, mas as instruções para essa configuração não são fornecidas explicitamente.

Versões do produto

  • Python, versão 3.9 ou mais recente

  • npm versão 8.9.0 ou mais recente

Arquitetura

Arquitetura de destino

Esta seção fornece uma visão geral de alto nível dessa solução e da arquitetura estabelecida pelo código de exemplo. O diagrama a seguir mostra os controles implantados nas várias contas na UO.

Diagrama de arquitetura dos controles implantados em todas as contas da AWS na unidade organizacional

Os controles do AWS Control Tower são categorizados de acordo com seu comportamento e orientação.

Há três tipos principais de comportamentos de controle:

  1. Os controles preventivos são projetados para evitar que ações ocorram. Eles são implementados com políticas de controle de serviço (SCPs) na AWS Organizations. O status de um controle preventivo é aplicado ou não habilitado. Os controles preventivos são compatíveis em todas as regiões da AWS.

  2. Os controles de detetive são projetados para detectar eventos específicos quando eles ocorrem e registrar a ação. CloudTrail Eles são implementados com as regras do AWS Config. O status de um controle detectivo é limpo, em violação, ou não habilitado. Os controles detectivos se aplicam somente às regiões da AWS cujo suporte é oferecido pelo AWS Control Tower.

  3. Os controles proativos examinam os recursos que seriam provisionados pela AWS CloudFormation e verificam se eles estão em conformidade com as políticas e os objetivos da sua empresa. Os recursos que não estão em conformidade não serão provisionados. Eles são implementados com CloudFormation ganchos da AWS. O status de um controle proativo é PASS, FAIL ou SKIP.

A orientação de controle se refere à prática recomendada de como aplicar cada controle às suas OUs. O AWS Control Tower fornece três categorias de orientações: obrigatórias, fortemente recomendadas e eletivas. A orientação de um controle é independente do comportamento dele. Para obter mais informações, consulte Controle de comportamento e orientação.

Ferramentas

Serviços da AWS

  • O AWS Cloud Development Kit (AWS CDK) é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar a infraestrutura da Nuvem AWS em código. O AWS CDK Toolkit é a principal ferramenta para interagir com seu aplicativo do AWS CDK.

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

  • O AWS Config oferece uma visualização de detalhes dos recursos na sua conta da AWS e como eles estão configurados. Ajuda a identificar como os recursos estão relacionados entre si e como suas configurações foram alteradas ao longo do tempo.

  • O AWS Control Tower ajuda você a configurar e governar um ambiente de várias contas da AWS, seguindo as melhores práticas prescritivas.

  • O AWS Organizations é um serviço de gerenciamento de contas que ajuda a consolidar várias contas da AWS em uma organização que você cria e gerencia de maneira centralizada.

Outras ferramentas

  • cdk_nag é uma ferramenta de código aberto que usa uma combinação de pacotes de regras para verificar se os aplicativos do AWS Cloud Development Kit (AWS CDK) estão aderindo às práticas recomendadas.

  • O npm é um registro de software executado em um ambiente Node.js e usado para compartilhar ou emprestar pacotes e gerenciar a implantação de pacotes privados.

  • Python é uma linguagem de programação de computador de uso geral.

Repositório de código

O código desse padrão está disponível nos controles GitHub Deploy AWS Control Tower usando o repositório AWS CDK. Você usa o arquivo cdk.json para interagir com o aplicativo AWS CDK e usa o arquivo package.json para instalar os pacotes npm.

Práticas recomendadas

Épicos

TarefaDescriçãoHabilidades necessárias

Crie o perfil do IAM na conta de gerenciamento.

  1. Crie uma política do IAM na conta de gerenciamento com as permissões definidas na política do IAM na seção de Informações adicionais. Para obter instruções, consulte Como criar políticas do IAM na documentação do IAM. Anote o nome do recurso da Amazon (ARN) da política. Veja um exemplo de ARN a seguir.

    arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
  2. Crie um perfil do IAM na conta de gerenciamento, anexe a política de permissão do IAM que você criou na etapa anterior e anexe a política de confiança personalizada à Política de confiança na seção Informações adicionais. Para instruções, consulte Como criar um perfil usando políticas de confiança na documentação do IAM. A seguir, um exemplo do ARN para o novo perfil.

    arn:aws:iam:: <MANAGEMENT-ACCOUNT-ID>:role/<ROLE-NAME>
DevOps engenheiro, General AWS

Inicialize o AWS CDK.

  1. Na conta de gerenciamento, assuma um perfil que tenha permissões para inicializar o AWS CDK.

  2. Insira o comando a seguir, substituindo o seguinte:

    • <MANAGEMENT-ACCOUNT-ID> é o ID da conta de gerenciamento da organização.

    • <AWS-CONTROL-TOWER-REGION> é a região da AWS onde a Control Tower está implantada. Para obter uma lista completa de códigos de região, consulte Endpoints regionais na Referência geral da AWS.

    • <DEPLOYMENT-ACCOUNT-ID> é o ID da conta de implantação.

    • <DEPLOYMENT-ROLE-NAME> é o nome do perfil do IAM que você está usando na conta de implantação.

    • <POLICY-NAME> é o nome da política que você criou na conta de gerenciamento.

    $ npx cdk bootstrap aws://<MANAGEMENT-ACCOUNT-ID>/<AWS-CONTROL-TOWER-REGION> \ --trust arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME> \ --cloudformation-execution-policies arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
DevOps engenheiro, AWS geral, Python

Clonar o repositório.

Em um shell bash, insira o comando a seguir. Isso clona os controles Deploy AWS Control Tower usando o repositório AWS CDK de. GitHub

git clone https://github.com/aws-samples/aws-control-tower-controls-cdk.git
DevOps engenheiro, General AWS

Edite o arquivo de configuração do AWS CDK.

  1. No repositório clonado, abra o arquivo constants.py.

  2. No parâmetro ACCOUNT_ID, insira o ID da sua conta de gerenciamento.

  3. No parâmetro <AWS-CONTROL-TOWER-REGION>, insira a região da AWS onde o AWS Control Tower está implantado.

  4. No parâmetro ROLE_ARN, insira o ARN do perfil criado na conta de gerenciamento.

  5. Na seção GUARDRAILS_CONFIGURATION, no parâmetro Enable-Control, insira os identificadores da API de controle. Insira o identificador entre aspas duplas e separe vários identificadores com vírgulas. Cada controle tem um identificador de API exclusivo para cada região na qual o AWS Control Tower está disponível. Para encontrar o identificador de controle, faça o seguinte:

    1. Em Tabelas de metadados de controle, localize o controle que você deseja ativar.

    2. Na coluna Identificadores da API de controle, por região, localize o identificador da API para a região na qual você está fazendo a chamada de API, como arn:aws:controltower:us-east-1::control/AWS-GR_ENCRYPTED_VOLUMES.

    3. Extraia o identificador de controle do identificador regional, como AWS-GR_ENCRYPTED_VOLUMES.

  6. Na seção GUARDRAILS_CONFIGURATION, no parâmetro OrganizationalUnitIds, insira o ID da unidade organizacional em que você deseja ativar o controle, como ou-1111-11111111. Insira o ID entre aspas duplas e separe vários IDs com vírgulas. Para obter mais informações sobre como recuperar IDs de UOs, consulte Visualizando os detalhes de uma OU.

  7. Salve e feche o arquivo constants.py. Para obter um exemplo de um arquivo constants.py atualizado, consulte a seção Informações adicionais deste padrão.

TarefaDescriçãoHabilidades necessárias

Assuma um perfil do IAM na conta de implantação.

Na conta de implantação, assuma o perfil do IAM que tem permissões para implantar as pilhas de CDK da AWS na conta de gerenciamento. Para obter mais informações sobre como assumir uma função do IAM na AWS CLI, consulte Uso de perfis do IAM na AWS CLI.

DevOps engenheiro, General AWS

Ative o ambiente .

Se você estiver usando Linux ou macOS:

  1. Insira o seguinte comando para criar um ambiente virtual:

    $ python3 -m venv .venv
  2. Depois que o ambiente virtual for criado, digite o seguinte comando para ativá-lo.

    $ source .venv/bin/activate

Ou, se você estiver usando o Windows:

  1. Insira o seguinte comando para ativar um ambiente virtual.

    % .venv\Scripts\activate.bat
DevOps engenheiro, General AWS

Instale as dependências.

Depois que o ambiente virtual for ativado, digite o seguinte comando para executar o script install_deps.sh Esse script instala as dependências necessárias.

$ ./scripts/install_deps.sh
DevOps engenheiro, AWS geral, Python

Implante a pilha.

Insira os comandos a seguir para sintetizar e implantar a CloudFormation pilha.

$ npx cdk synth $ npx cdk deploy
DevOps engenheiro, AWS geral, Python

Recursos relacionados

Documentação da AWS

Outros recursos

Mais informações

Exemplo de arquivo constants.py

A seguir, um exemplo de um arquivo constants.py atualizado.

ACCOUNT_ID = 111122223333 AWS_CONTROL_TOWER_REGION = us-east-2 ROLE_ARN = "arn:aws:iam::111122223333:role/CT-Controls-Role" GUARDRAILS_CONFIGURATION = [ { "Enable-Control": { "AWS-GR_ENCRYPTED_VOLUMES", ... }, "OrganizationalUnitIds": ["ou-1111-11111111", "ou-2222-22222222"...], }, { "Enable-Control": { "AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED", ... }, "OrganizationalUnitIds": ["ou-2222-22222222"...], }, ]

Política do IAM

O exemplo de política a seguir permite as ações mínimas necessárias para ativar ou desativar os controles do AWS Control Tower ao implantar pilhas de CDK da AWS de uma conta de implantação para a conta de gerenciamento.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "controltower:EnableControl", "controltower:DisableControl", "controltower:GetControlOperation", "controltower:ListEnabledControls", "organizations:AttachPolicy", "organizations:CreatePolicy", "organizations:DeletePolicy", "organizations:DescribeOrganization", "organizations:DescribeOrganizationalUnit", "organizations:DetachPolicy", "organizations:ListAccounts", "organizations:ListAWSServiceAccessForOrganization", "organizations:ListChildren", "organizations:ListOrganizationalUnitsForParent", "organizations:ListParents", "organizations:ListPoliciesForTarget", "organizations:ListRoots", "organizations:UpdatePolicy", "ssm:GetParameters" ], "Resource": "*" } ] }

Política de confiança

A política de confiança personalizada a seguir permite que um perfil do IAM específico na conta de implantação assuma o perfil do IAM na conta de gerenciamento. Substitua o seguinte:

  • <DEPLOYMENT-ACCOUNT-ID> é o ID da conta de implantação

  • <DEPLOYMENT-ROLE-NAME> é o nome do perfil na conta de implantação que tem permissão para assumir a função na conta de gerenciamento

{ “Version”: “2012-10-17”, “Statement”: [ { “Effect”: “Allow”, “Principal”: { “AWS”: “arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME>” }, “Action”: “sts:AssumeRole”, “Condition”: {} } ] }