O blog da AWS

Contas de Experimentação – Como implantar uma solução sem servidor para recursos efêmeros

Os clientes desejam seguir as melhores práticas documentadas pela AWS, especialmente quando estão nos estágios iniciais de sua jornada na nuvem. Destes, podemos considerar tanto aqueles que pretendem migrar seus workloads pra a nuvem da AWS quanto aqueles que nascem com uma abordagem já direcionada para nuvem.

O AWS Control Tower foi criado para endereçar essa requisição dos nossos clientes. Trata-se da maneira mais fácil para configurar e controlar um ambiente AWS novo, seguro e multicontas. Ele é baseado nas melhores práticas estabelecidas pela experiência da AWS em trabalhar com milhares de companhias que migraram para a nuvem. O AWS Control Tower confere conformidade validando políticas detectivas e preventivas ao novo ambiente e proporciona monitoramento em tempo real por meio de um painel de controle.

Ao organizar o ambiente, aplicando uma baseline de segurança e governança um fator importante não pode ser esquecido: a possibilidade de experimentação. Permitir que os times experimentem, testem é chave para inovação. Então como permitir esta flexibilidade ao mesmo tempo que os controles de segurança e gastos aconteçam?

Considerando este cenário, aliado à necessidade de um período de testes para os serviços AWS, este blog post apresenta uma solução para gerenciar o ciclo de vida de uma conta AWS separada que fica dedicada para experimentação. Este tipo de conta contém recursos que serão automaticamente apagados após um determinado período de tempo. Após a limpeza dos recursos da conta AWS, apenas as configurações de rede permanecem prontas para o próximo ciclo de uso. Além disso, a solução também faz uso do serviço AWS Budgets para promover ainda mais o controle sobre os gastos que sua empresa vai permitir para a experimentação.

Neste blog post, vamos aprofundar nas contas Sandbox que são uma estrutura adicional à implementação padrão da estrutura multicontas com AWS Control Tower.

Obs: essa estrutura é um exemplo para estratégia de múltiplas contas, para efeito dessa solução, não foi utilizado uma ou especifica para a conta de experimentação, contudo isso não impede de fazê-la.

Visão Geral

Na figura abaixo está representada a máquina de estado para essa conta que será transformada em conta de experimentação:

  • Nova Conta: conta nova AWS, completamente funcional, criada com o propósito de experimentação.
  • Nova conta de Experimentação: após provisionar um produto usando o catalogo de serviços, essa nova conta passa a ser uma solução que gerencia o tempo de vida dos recursos nela utilizados. É na configuração deste produto que escolhemos a quantidade de dias que a conta leva para apagar os seus recursos.
  • Expirando: A solução tem um mecanismo de contagem regressiva (countdown) para controle dos dias que faltam até a expiração dos recursos. Um dia antes da expiração dos recursos um email é enviado com o extrato do quê será apagado.
  • Apaga Recursos: quando a contagem regressiva finaliza (countdown), os recursos da conta são apagados e conta volta ao estado inicial como Nova conta de Experimentação. Ela inicia o contador de dias usando a mesma configuração usada na sua criação.
  • Desinstalação: processo de remoção do mecanismo de controle da conta de experimentação. A conta AWS volta a ser uma conta completamente funcional. Detalhes no final deste post.

A solução proposta é uma extensão às funcionalidades do serviço AWS Control Tower e também pode ser usada para casos em que a gestão de contas é feita somente com o serviço AWS Organizations ou com a solução Automated Landing Zone. Neste post, vamos focar na configuração para o serviço AWS Control Tower. O Control Tower automatiza a criação de uma fundação e estabelece um arcabouço para um ambiente multiconta usando o serviço AWS Organizations. Você pode se aprofundar neste assunto acessando o blog post Governance, Risk, and compliance when establishing your cloud presence.

Arquitetura

A imagem abaixo apresenta a arquitetura da solução:

  • Na conta Master, é feito o deploy de uma stack usando AWS Cloudformation e que criará um portfólio no AWS Service Catalog.
  • Esse portfólio contém um produto chamado Sandbox Account, a partir do provisionamento desse produto com todos os parâmetros preenchidos temos o lançamento de duas stacks:

1) Stack na conta Master cria um Budget para essa conta de experimentação. Além disso, criará duas políticas de conformidade, usando Service Control Policies (SCPs), e anexará as politicas na conta de experimentação. São elas:

    • SandboxRegions – SCP para restringir que qualquer recurso não seja criado fora de N.Virginia (us-east-1) e São Paulo (sa-east-1).[CCS1]
    • SandboxGuardrails – SCP que protege, na conta de experimentação, os recursos que foram implementados. Com isso, nem mesmo um administrador da conta de experimentação, consegue alterar a pilha de controle desta solução.

2) Stack na conta de experimentação cria através de AWS Lambda uma requisição no Service Quotas para aumento do limite de CPUs para máquinas EC2. Além disso, cria configurações para os serviços Amazon CloudWatch Events, AWS Step Functions, AWS Systems Manager, AWS Lambda, Amazon SNS e AWS CodeBuild. O objetivo é a implementação de um timer, notificações por email e uma rotina de limpeza da conta, implementada com AWS CodeBuild e AWS Nuke.

AWS Nuke não é um serviço da AWS, porém um projeto open source utilizado na implementação desta solução. Ele foi configurado de forma a preservar configurações do Control Tower e recursos de rede, como VPC, subnet, VPN etc na conta de experimentação.

Instalação

Após ter executado o setup do AWS Control Tower, o seguinte dashboard será apresentado:

Um dos recursos do AWS Control Tower, é o Account Factory, que automatiza o provisionamento de novas contas em sua organização. Para a criação de conta, clique em Account Factory, e em seguida uma tela como a da figura abaixo será apresentada:

Em Network configuration é possível editar as opções para deploy da Amazon VPC e subnets nas contas criadas a partir do Account Factory, bem como as regiões onde serão lançados tais recursos. Em nosso exemplo optamos por não escolher nenhuma região para deploy da VPC. Use o botão Enroll account, (figura acima) para criar uma nova conta. Uma nova tela, como a da figura abaixo, será apresentada.

Após preencher os valores solicitados e submeter o formulário (imagem acima), uma nova conta será criada. Fique atento ao e-mail cadastrado, nele você receberá um link para autenticação ao AWS SSO, para então navegar na console de gerencia da nova conta. Criada a nova conta, passamos para a conversão desta em uma conta de experimentação.

A solução de contas de experimentação requer a criação de um produto no serviço AWS Service Catalog. O AWS Service Catalog é um diretório de produtos prontos para a instalação e vamos adicionar um novo produto que transforma uma conta AWS em uma conta de experimentação. Para isto, é preciso executar um script de infraestrutura como código usando o serviço AWS CloudFormation. Ao clicar neste link você será direcionado para a tela de configuração do AWS CloudFormation.

Antes de iniciar a configuração dos parâmetros é importante dizer que, para adicionar um novo produto no Service Catalog, é necessário que o usuário da conta master (onde será feita toda a configuração) tenha acesso à policy arn:aws:iam::aws:policy/AWSServiceCatalogEndUserFullAccess.

No serviço Control Tower, os usuários, por padrão, já vêm com esta policy e outras policies criadas.

Conforme a figura abaixo, você será direcionado para a tela de configuração do AWS CloudFormation e precisará informar dois parâmetros: ArnRoleAdmin e ArnRoleServiceCatalogSSO. Ambas são IAM Roles já provisionadas pelo AWS ControlTower e pertencem ao AWS SSO.

  • ARN IAM Role ServiceCatalogEndUser: basta ir na console da AWS e acessar o serviço IAM. Uma vez na tela de serviço basta procurar por Roles e anotar o ARN da role cujo nome segue o padrão: arn:aws:iam::XXXXXXXXXXXX:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_AWSServiceCatalogEndUserAccess_XXXXXXXXXXXXXXXX. Caso queira criar a sua própria role basta que ela tenha a política de nome AWSServiceCatalogEndUserFullAccess associada.
  • ARN IAM Role Administrator Access: basta ir na console da AWS e acessar o serviço IAM. Uma vez na tela de serviço basta procurar por Roles e anotar o ARN da role cujo nome segue o padrão arn:aws:iam::XXXXXXXXXXXX:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_AWSAdministratorAccess_XXXXXXXXXXXXXXXX. Caso queira criar a sua própria role basta que ela tenha a política de nome AdministratorAccess associada.

Uma vez configurados os parâmetros basta executar o script clicando em next, next, selecionar a caixa de opção conforme figura abaixo e apertar create stack.

Este script demora alguns segundos para terminar de executar. No caso, uma vez terminada a execução, um novo produto foi adicionado ao Catálogo de Produtos. Para executarmos o produto e transformarmos uma conta existente (criada com o Control Tower / Account Factory) basta acessar o serviço AWS Service Catalog pela console AWS.

Uma vez no serviço AWS Service Catalog, o usuário é direcionado para a tela de Portfolios e será possível verificar a existência de um novo Portfólio de produtos chamado SandboxAccount. De acordo com a imagem abaixo, basta selecionar no menu esquerdo a opção Products para que seja acessada a tela de instalação do produto.

Uma vez na tela de produtos, basta lançar um novo produto, conforme imagem abaixo, e configurar os seguintes parâmetros:

Escolha um nome para o produto. No exemplo abaixo usamos ContaEfemera-TimeInovacao. Aperte NEXT.

O proximo passo é preencher as informações requisitadas abaixo. Logo abaixo estão detalhadas informações sobre os parâmetros disponíveis que foram separadas em grupos.

Ao terminar, aperte NEXT até o fim, e depois CREATE.

  • Email address: endereço de e-mail que receberá notificações. Notificações passam a ser enviadas 5 dias antes da limpeza dos recursos da conta. Um dia antes da limpeza, o administrador receberá uma notificação contendo um extrato do quê será removido da conta no dia seguinte. Logo após a criação da conta de experimentação um e-mail será enviado contendo um pedido de confirmação para subscrição ao tópico de notificações (imagem abaixo). É importante que seja feita a subscrição usando o link de confirmação dentro deste e-mail.

AWS Budgets Name: o serviço AWS Budgets é configurado junto com a solução. Sua configuração requer um nome e um valor em US$ para o gasto a ser controlado. O AWS Budgets é um serviço que ajuda no controle de gastos e, para isto, um e-mail é enviado sempre que a conta atingir um gasto maior do que 90% do valor definido para o orçamento. Esta configuração é feita na conta master da sua organização.

Budget size in USD: orçamento da conta em dólares. Se o gasto da conta atingir 90% deste orçamento, um e-mail será enviado para o endereço informado no parâmetro e-mail. Note que, o orçamento é computado mensalmente, ao passo que, a sua conta, pode ser limpa em menos de 30 dias. Em outras palavras, note que o ciclo de vida da conta e do orçamento podem ser diferentes.

  • CPU limit increase for different EC2 families: esse parâmetro serve para automatizar o pedido de aumento de CPU disponível para a criação de VMs EC2 para as famílias de instâncias A, C, D, H, I, M, R, T e Z. Uma conta nova vem com uma quantidade padrão de CPU relativamente menor que contas mais antigas, então, a configuração deste parâmetro já abre um ticket requisitando mais CPU.
  • What is the AWS Account ID for the Sandbox Account: ID da conta de experimentação. Obs: conta AWS tem 12 digitos, sem aspas e sem espaços. Este número pode ser obtido dentro do serviço AWS Organizations usando a lista de contas existentes.
  • Solution Deployment Region: região onde será feito o deploy dos recursos que monitoram a conta, disponível para N. Virginia e São Paulo
  • Period in days: a quantidade de dias que os recursos da conta existiram antes de ser deletados. Todo o dia esse parâmetro é reduzido automaticamente.

A partir desse momento, o processo de configuração é automatizado pelo AWS Cloudformation, e duas stacks serão lançadas: uma stack na conta master para criar as políticas de conformidade usando-se Service Control Policies e uma outra stack, na conta de experimentação, para a instalação dos controles. Aguarde de 1-2 minutos para a conclusão.

A sua nova conta de experimentação executará uma limpeza automática dentro de um ciclo recorrente, um alerta será criado no serviço AWS Budgets, para controle dos gastos, um ticket será criado para aumento dos limites de CPU para famílias de EC2 e o processo de limpeza deixará para trás todos os recursos de rede, para promover o reuso dentro do próximo ciclo de uso. Uma política de restrição de uso apenas para as regiões us-east-1 e sa-east-1 também será criada. Por favor, atualize a política SandboxRegions usando o serviço AWS Organizations para controlar a disponibilidade de serviços regionais.

Desinstalação

Para desinstalar uma conta de experimentação será necessário ter em mãos o número da conta em questão (no serviço AWS Organizations é possível encontrar obter este número). Com o número da conta em mãos, entre na conta master do serviço Control Tower e acesse os seguintes serviços:

  • AWS Organizations: no menu superior selecione “Politicas” para listas as políticas existentes. Selecione as políticas SandboxRegions e SandboxGuardrails e remova a associação entre estas políticas e a conta de experimentação.
  • AWS CloudFormation: durante a criação foi adicionada uma Stack e uma StackeSet e precisamos remover estes itens. Vá em “StackSets” no menu esquerdo e na tela do meio aparecerá uma lista de registros onde um deles terá um nome no seguinte formato: “SandboxStackSet-XXXXXXXXXXXX”, onde X é o número da conta a ser desinstalada. Selecione o registro e, na próxima tela use o menu “Actions” para selecionar “Apagar Stacks da StackSet”. Na próxima tela (abaixo) você deverá informar o número da conta e a região onde você quer deletar a stackset. Preencha as informações e selecione “Próximo” a na tela de revisão selecione o botão “Submeter”. Após verificar que a stack foi removida da conta de experimentação, retorne para a mesma StackSet e a apague usando o menu “Actions → Delete StackSet”.
  • Service Catalog: ao acessar o serviço procure por um item de menu no lado esquerdo da tela chamado “Provisioned products”. Ao acessar este menu, você deverá selecionar o produto criado durante a configuração da sua conta de experimentação. Usando o botão “Actions”, deverá ser executada a opção “Terminate Product”.

Valores

Cada conta transformada em “conta de experimentação” conterá dispositivos de controle cujo consumo mensal estimado está em torno de US$5.60 (Virginia do Norte/us-east-1).

Você pode obter mais detalhes desse projeto clicando neste link.


Sobre os autores

Matheus Arrais – é Arquiteto de Soluções para Parceiros. Seu foco é em ferramentas de governanças e estratégia de múltiplas contas. Trabalha junto com parceiros de todo o Brasil ajudando-os a trilharem uma jornada de sucesso dentro da parceria da AWS e a entregar a melhor solução para seus clientes.

Luiz Henrique Decaro – é arquiteto de soluções com foco em clientes do setor financeiro e mestre em Engenharia de Software com experiência de 18 anos em desenvolvimento e arquitetura de sistemas de missão crítica na área de TI.