Anexar automaticamente uma política gerenciada pela AWS para Systems Manager aos perfis de instância do EC2 usando o Cloud Custodian e o AWS CDK - 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á.

Anexar automaticamente uma política gerenciada pela AWS para Systems Manager aos perfis de instância do EC2 usando o Cloud Custodian e o AWS CDK

Criado por Ali Asfour (AWS) e Aaron Lennon (AWS)

Ambiente: PoC ou piloto

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

Workload: código aberto

Serviços da AWS: Amazon SNS; Amazon SQS; CodeBuild AWS; AWS; CodePipeline AWS Systems Manager; AWS CodeCommit

Resumo

É possível integrar instâncias do Amazon Elastic Compute Cloud (Amazon EC2) com o AWS Systems Manager para automatizar tarefas operacionais e oferecer mais visibilidade e controle. Para se integrarem ao Systems Manager, as instâncias do EC2 devem ter um AWS Systems Manager Agent (SSM Agent) instalado e uma política AmazonSSMManagedInstanceCore do AWS Identity and Access Management (IAM) anexada aos perfis de instância deles. 

No entanto, se você quiser garantir que todos os perfis de instância do EC2 tenham a política AmazonSSMManagedInstanceCore anexada, você pode enfrentar desafios ao atualizar novas instâncias do EC2 que não têm perfis de instância ou instâncias do EC2 que têm um perfil de instância, mas não têm a política AmazonSSMManagedInstanceCore. Também pode ser difícil adicionar essa política em várias contas da Amazon Web Services (AWS) e regiões da AWS.

Esse padrão ajuda a resolver esses desafios implantando três políticas de Cloud Custodian em suas contas da AWS:

  • A primeira política do Cloud Custodian verifica as instâncias do EC2 existentes que têm um perfil de instância, mas não têm a política AmazonSSMManagedInstanceCore. A política AmazonSSMManagedInstanceCore é então anexada. 

  • A segunda política do Cloud Custodian verifica as instâncias do EC2 existentes sem um perfil de instância e adiciona um perfil de instância padrão que tem a política AmazonSSMManagedInstanceCore anexada.

  • A terceira política do Cloud Custodian cria funções do AWS Lambda em suas contas para monitorar a criação de instâncias e perfis de instância do EC2. Isso garante que a política AmazonSSMManagedInstanceCore seja anexada automaticamente quando uma instância do EC2 for criada.

Esse padrão usa as DevOps ferramentas da AWS para obter uma implantação contínua e em grande escala das políticas do Cloud Custodian em um ambiente de várias contas, sem provisionar um ambiente computacional separado. 

Pré-requisitos e limitações

Pré-requisitos

  • Duas ou mais contas ativas da AWS. Uma conta é a conta de segurança e as outras são contas de membros.

  • Permissões para provisionar recursos na conta de segurança. Esse padrão usa permissões de administrador, mas você deve conceder permissões de acordo com os requisitos e as políticas da sua organização.

  • Capacidade de assumir um perfil do IAM da conta de segurança até as contas dos membros e criar os perfis do IAM necessários. Para obter mais informações, consulte Delegar acesso entre contas da AWS usando perfis do IAM na documentação do IAM.

  • AWS Command Line Interface (AWS CLI), instalada e configurada. Para fins de teste, você pode configurar a AWS CLI usando o comando aws configure ou definindo variáveis de ambiente. Importante: não é recomendado para ambientes de produção e recomendamos que essa conta somente conceda acesso com privilégio mínimo. Para obter mais informações, consulte Conceder privilégio mínimo na documentação do IAM.

  • O arquivo devops-cdk-cloudcustodian.zip (anexado), transferido por download para o computador local.

  • Familiaridade com o Python.

  • As ferramentas necessárias (Node.js, AWS Cloud Development Kit (AWS CDK) e Git), instaladas e configuradas. Você pode usar o arquivo install-prerequisites.sh no arquivo devops-cdk-cloudcustodian.zip para instalar essas ferramentas. Certifique-se de executar esse arquivo com privilégios de raiz. 

Limitações

  • Embora esse padrão possa ser usado em um ambiente de produção, certifique-se de que todas as políticas e perfis do IAM atendam aos requisitos e políticas da sua organização. 

Versões do pacote

  • Cloud Custodian versão 0.9 ou mais recente

  • TypeScript versão 3.9.7 ou posterior

  • Node.js versão 14.15.4 ou superior

  • npm versão 7.6.1 ou mais recente

  • AWS CDK versão 1.96.0 ou superior

Arquitetura

AWS CodePipeline workflow with CodeCommit, CodeBuild, and deployment to member accounts.

O diagrama mostra o seguinte fluxo de trabalho:

  1. As políticas do Cloud Custodian são enviadas para um CodeCommit repositório da AWS na conta de segurança. Uma regra da Amazon CloudWatch Events inicia automaticamente o CodePipeline pipeline da AWS.

  2. O pipeline busca o código mais recente CodeCommit e o envia para a parte de integração contínua do pipeline de integração contínua e entrega contínua (CI/CD) gerenciado pela AWS. CodeBuild

  3. CodeBuild executa as DevSecOps ações completas, incluindo a validação da sintaxe da política nas políticas do Cloud Custodian, e executa essas políticas no --dryrun modo de verificar quais recursos foram identificados.

  4. Se não houver erros, a próxima tarefa alertará o administrador para revisar as alterações e aprovar a implantação nas contas dos membros.

Pilha de tecnologia

  • AWS CDK

  • CodeBuild

  • CodeCommit

  • CodePipeline

  • IAM

  • Cloud Custodian 

Automação e escala

O módulo de pipelines do AWS CDK provisiona um pipeline de CI/CD que é usado CodePipeline para orquestrar a criação e o teste do código-fonte CodeBuild, além da implantação de recursos da AWS com pilhas da AWS. CloudFormation É possível usar esse padrão para todas as contas-membro e regiões da organização. Você também pode estender a pilha Roles creation para implantar outros perfis do IAM em suas contas de membros. 

Ferramentas

  • O AWS Cloud Development Kit (AWS CDK) é uma estrutura de desenvolvimento de software para definir a infraestrutura de nuvem em código e provisioná-la por meio da AWS. CloudFormation

  • O AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.

  • CodeBuildA AWS é um serviço de construção totalmente gerenciado na nuvem.

  • CodeCommitA AWS é um serviço de controle de versão que você pode usar para armazenar e gerenciar ativos de forma privada.

  • CodePipelineA AWS é um serviço de entrega contínua que você pode usar para modelar, visualizar e automatizar as etapas necessárias para lançar seu software.

  • O AWS Identity and Access Management  é um serviço da web que ajuda você a controlar o acesso aos recursos da AWS com segurança.

  • O Cloud Custodian é uma ferramenta que unifica dezenas de ferramentas e os scripts que muitas organizações usam para gerenciar suas contas de nuvem pública em uma ferramenta de código aberto.

  • O Node.js é um JavaScript tempo de execução criado no JavaScript motor V8 do Google Chrome.

Código

Para obter uma lista detalhada dos módulos, perfis da conta, arquivos e comandos de implantação usados nesse padrão, consulte o arquivo README no arquivo devops-cdk-cloudcustodian.zip (em anexo).

Épicos

TarefaDescriçãoHabilidades necessárias

Configure o CodeCommit repositório.

  1. Descompacte o arquivo devops-cdk-cloudcustodian.zip (anexado) no diretório de trabalho do computador local.

  2. Faça login no AWS Management Console para obter sua conta de segurança, abra o CodeCommit console e crie um novo devops-cdk-cloudcustodian repositório.

  3. Vá para o diretório do projeto e configure o CodeCommit repositório como origem, confirme as alterações e, em seguida, envie-as para a ramificação de origem executando os seguintes comandos:

  • cd devops-cdk-cloudcustodian 

  • git init --initial-branch=main

  • git add . git commit -m 'initial commit' 

  • git remote add origin https://git-codecommit.us-east-1.amazonaws.com/v1/devops-cdk-cloudcustodian 

  • git push origin main

Para obter mais informações sobre isso, consulte Criação de um CodeCommit repositório na CodeCommit documentação da AWS.

Desenvolvedor

Instale as ferramentas necessárias

Use o arquivo install-prerequisites.sh para instalar todas as ferramentas necessárias no Amazon Linux. Não inclui a AWS CLI porque ela vem pré-instalada.

Para obter mais informações, consulte Pré-requisitos na seção de Conceitos básicos do AWS CDK na documentação do AWS CDK.

Desenvolvedor

Instale os pacotes AWS CDK obrigatórios.

  1. Configure seu ambiente virtual executando o seguinte comando na AWS CLI: $ python3 -m venv .env

  2. No ambiente virtual, a executar o comando a seguir: $ source .env/bin/activate

  3. Depois que o ambiente virtual for ativado, instale as dependências, execute o seguinte comando: $ pip install -r requirements.txt

  4. Para adicionar dependências adicionais (por exemplo, outras bibliotecas do AWS CDK), adicione-as ao arquivo requirements.txt e execute o seguinte comando: pip install -r requirements.txt

Os pacotes a seguir são exigidos pelo AWS CDK e estão incluídos no arquivo requirements.txt:

  • aws-cdk.aws-cloudwatch

  • aws-cdk.aws-codebuild

  • aws-cdk.aws-codecommit

  • aws-cdk.aws-codedeploy

  • aws-cdk.aws-codepipeline

  • aws-cdk.aws-codepipeline-actions

  • aws-cdk.aws-events

  • aws-cdk.aws-events-targets

  • aws-cdk.aws-iam

  • aws-cdk.aws-logs

  • aws-cdk.aws-s3

  • aws-cdk.aws-sns

  • aws-cdk.aws-sns-subscriptions

  • aws-cdk.aws-sqs

  • aws-cdk.core

Desenvolvedor
TarefaDescriçãoHabilidades necessárias

Atualize as variáveis necessárias.

Abra o vars.py arquivo na pasta raiz do seu CodeCommit repositório e atualize as seguintes variáveis:

  •  Atualize var_deploy_region = ‘us-east-1’ com a região da AWS na qual você deseja que o pipeline seja implantado.

  •  Atualize var_codecommit_repo_name = “cdk-cloudcustodian” com o nome do seu CodeCommit repositório.

  •  Atualize var_codecommit_branch_name = “main” com o nome da CodeCommit filial.

  •  Atualize var_adminEmail=notifyadmin@email.com’ com o endereço de e-mail do administrador que aprova as alterações.

  • Atualize var_slackWebHookUrl = https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX com o webhook do Slack usado para enviar notificações do Cloud Custodian quando alterações são feitas.

  •  Atualize var_orgId = ‘o-yyyyyyyyyy’ com o ID da sua organização.

  • Atualize security_account = ‘123456789011’ com o ID da conta da AWS para a conta em que o pipeline está implantado.

  • Atualize member_accounts = [‘111111111111’,’111111111112’,’111111111113’] com as contas membros nas quais você deseja inicializar a pilha do AWS CDK e implantar os perfis do IAM necessários.

  • Defina cdk_bootstrap_member_accounts = True para True se você quiser que o pipeline inicialize automaticamente o AWS CDK em suas contas membros.  Se definido para True, também será necessário o nome de um perfil do IAM existente nas contas dos membros que pode ser assumido a partir da conta de segurança. Esse perfil do IAM também deve ter as permissões necessárias para inicializar o AWS CDK.

  • Atualize cdk_bootstrap_role = ‘AWSControlTowerExecution’ com o nome de um perfil do IAM existente nas contas dos membros que pode ser assumido a partir da conta de segurança. Esse perfil também deve ter permissão para inicializar o AWS CDK. Observação: isso se aplicará somente se cdk_bootstrap_member_accounts for definido como True.

Desenvolvedor

Atualize o arquivo account.yml com as informações da conta do membro.

Para executar a ferramenta c7n-org Cloud Custodian em várias contas, você deve colocar o arquivo de configuração accounts.yml na raiz do repositório. Veja a seguir um exemplo de arquivo de configuração do Cloud Custodian para AWS:

accounts: - account_id: '123123123123' name: account-1 regions: - us-east-1 - us-west-2 role: arn:aws:iam::123123123123:role/CloudCustodian vars: charge_code: xyz tags: - type:prod - division:some division - partition:us - scope:pci
Desenvolvedor
TarefaDescriçãoHabilidades necessárias

Inicialize a conta de segurança.

Inicialize deploy_account com o aplicativo cloudcustodian_stack executando o seguinte comando:

cdk bootstrap -a 'python3 cloudcustodian/cloudcustodian_stack.py
Desenvolvedor

Opção 1: inicialize automaticamente as contas dos membros.

Se a variável cdk_bootstrap_member_accounts for definida como para True no arquivo vars.py, as contas especificadas na variável member_accounts serão automaticamente inicializadas pelo pipeline.

Se necessário, é possível atualizar *cdk_bootstrap_role* com um perfil do IAM que você pode assumir a partir da conta de segurança e que tem as permissões necessárias para inicializar o AWS CDK.

Novas contas adicionadas à variável member_accounts  são inicializadas automaticamente pelo pipeline para que os perfis necessários possam ser implantados.

Desenvolvedor

Opção 2: inicialize manualmente as contas dos membros.

Embora não seja recomendável usar essa abordagem, você pode definir o valor de cdk_bootstrap_member_accounts para False e executar essa etapa manualmente executando o seguinte comando:

$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \ --trust {security_account_id} \ --context assume-role-credentials:writeIamRoleName={role_name} \ --context assume-role-credentials:readIamRoleName={role_name} \ --mode=ForWriting \ --context bootstrap=true \ --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess

Importante: certifique-se de atualizar os valores {security_account_id} e {role_name} com o nome de um perfil do IAM que você possa assumir na conta de segurança e que tenha as permissões necessárias para inicializar o AWS CDK.

Você também pode usar outras abordagens para inicializar as contas dos membros, por exemplo, com a AWS CloudFormation. Para obter mais informações, consulte Inicialização na documentação do AWS CDK.

Desenvolvedor
TarefaDescriçãoHabilidades necessárias

Crie os perfis do IAM nas contas dos membros.

Execute o seguinte comando para implantar a pilha member_account_roles_stack e criar os perfis do IAM nas contas-membro:

cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never
Desenvolvedor

Implante a pilha de pipeline do Cloud Custodian.

Execute o seguinte comando para criar o pipeline cloudcustodian_stack.py do Cloud Custodian que é implantado na conta de segurança:

cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'
Desenvolvedor

Recursos relacionados

Anexos

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: attachment.zip