Práticas recomendadas de segurança do AWS CDK - AWS Kit de desenvolvimento em nuvem (AWS CDK) v2

Este é o Guia do desenvolvedor do AWS CDK v2. O CDK v1 antigo entrou em manutenção em 1º de junho de 2022 e encerrou o suporte em 1º de junho de 2023.

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á.

Práticas recomendadas de segurança do AWS CDK

O kit de desenvolvimento em nuvem da AWS (CDK da AWS) é uma ferramenta poderosa que os desenvolvedores podem usar para configurar os serviços da AWS e provisionar a infraestrutura da AWS. Com qualquer ferramenta que forneça esse controle e recursos, as organizações precisarão estabelecer políticas e práticas para garantir que a ferramenta seja usada de forma segura e protegida. Por exemplo, as organizações podem querer restringir o acesso do desenvolvedor a serviços específicos para garantir que não possam alterar as medidas de conformidade ou controle de custos configuradas na conta.

Muitas vezes, pode haver uma tensão entre segurança e produtividade, e cada organização precisa estabelecer o equilíbrio adequado para si mesma. Este tópico oferece práticas recomendadas de segurança para o AWS CDK que podem ser consideradas ao criar e implementar suas próprias políticas de segurança. As práticas recomendadas a seguir são diretrizes gerais e não representam uma solução completa de segurança. Como essas práticas recomendadas podem não ser adequadas ou suficientes para o seu ambiente, trate-as como considerações úteis em vez de prescrições.

Seguir práticas recomendadas de segurança do IAM

AWS O Identity and Access Management (IAM) é um serviço da web que ajuda controlar o acesso aos recursos da AWS com segurança. Organizações, indivíduos e o AWS CDK usam o IAM para gerenciar permissões que determinam as ações que podem ser executadas nos recursos da AWS. Ao usar o IAM, siga as práticas recomendadas de segurança do IAM. Para obter mais informações, consulte Práticas recomendadas de segurança e casos de uso no AWS Identity and Access Management no Guia do usuário do IAM.

Gerenciamento de permissões para o AWS CDK

Ao usar o AWS CDK em toda a organização para desenvolver e gerenciar sua infraestrutura, considere os cenários a seguir em que o gerenciamento de permissões será importante:

  • Permissões para implantações do AWS CDK: essas permissões determinam quem pode fazer alterações em seus recursos da AWS e quais mudanças podem ser feitas.

  • Permissões entre recursos: essas são as permissões que permitem interações entre os recursos da AWS que você cria e gerencia com o AWS CDK.

Gerenciamento de permissões para implantações do AWS CDK

Os desenvolvedores usam o AWS CDK para definir a infraestrutura localmente em suas máquinas de desenvolvimento. Essa infraestrutura é implementada em ambientes da AWS por meio de implantações que normalmente envolvem o uso da interface de linha de comandos do AWS CDK (CLI do AWS CDK). Com as implantações, talvez você queira controlar quais mudanças os desenvolvedores podem fazer em seus ambientes. Por exemplo, você pode ter um recurso da Amazon Virtual Private Cloud (Amazon VPC) que você não quer que os desenvolvedores modifiquem.

Por padrão, a CLI do CDK usa uma combinação das credenciais de segurança do ator e dos perfis do IAM que são criados durante o bootstrapping para receber permissões para implantações. As credenciais de segurança do ator são usadas primeiro para autenticação e, em seguida, presume-se que os perfis do IAM realizem várias ações durante a implantação, como usar o serviço do AWS CloudFormation para criar recursos. Para obter mais informações sobre como as implantações do CDK funcionam, incluindo os perfis do IAM que são usados, consulte Implantação de aplicações do AWS CDK.

Para restringir quem pode realizar implantações e as ações que podem ser executadas durante a implantação, considere o seguinte:

  • As credenciais de segurança do ator são o primeiro conjunto de credenciais usado para autenticação na AWS. A partir daqui, as permissões usadas para realizar ações durante a implantação são concedidas aos perfis do IAM que são assumidos durante o fluxo de trabalho de implantação. É possível restringir quem pode realizar implantações limitando quem pode assumir esses perfis. Também é possível restringir as ações que podem ser realizadas durante a implantação substituindo esses perfis do IAM pelos seus.

  • As permissões para realizar implantações são concedidas ao DeploymentActionRole. É possível controlar as permissões de quem pode realizar implantações limitando quem pode assumir esse perfil. Ao usar um perfil para implantações, você pode realizar implantações em várias contas, pois o perfil pode ser assumido por identidades da AWS em uma conta diferente. Por padrão, todas as identidades na mesma conta da AWS com a política AssumeRole apropriada podem assumir esse perfil.

  • As permissões para criar e modificar recursos por meio do AWS CloudFormation são concedidas ao CloudFormationExecutionRole. Esse perfil também requer permissão para ler os recursos de bootstrap. Você controla as permissões para as implantações do CDK usando uma política gerenciada para o CloudFormationExecutionRole e, opcionalmente, configurando um limite de permissões. Por padrão, esse perfil tem permissões de AdministratorAccess sem limite de permissões.

  • As permissões para interagir com os recursos de bootstrapping são concedidas a FilePublishingRole e ImagePublishingRole. O ator que executa as implantações deve ter permissão para assumir esses perfis. Por padrão, todas as identidades na mesma conta da AWS com a política AssumeRole apropriada podem assumir esse perfil.

  • As permissões para acessar recursos de bootstrapping para realizar pesquisas são concedidas a LookupRole. O ator que executa as implantações deve ter permissão para assumir esse perfil. Por padrão, esse perfil tem acesso readOnly aos recursos de bootstrap. Por padrão, todas as identidades na mesma conta da AWS com a política AssumeRole apropriada podem assumir esse perfil.

Para configurar as identidades do IAM em sua conta da AWS com permissão para assumir esses perfis, adicione uma política com a declaração de política a seguir às identidades:

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AssumeCDKRoles", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "*", "Condition": { "StringEquals": { "iam:ResourceTag/aws-cdk:bootstrap-role": [ "image-publishing", "file-publishing", "deploy", "lookup" ] } } }] }

Modifique as permissões para os perfis assumidos durante a implantação

Ao modificar as permissões para os perfis assumidos durante a implantação, você pode gerenciar as ações que podem ser executadas durante a implantação. Para modificar as permissões, você cria seus próprios perfis do IAM e os especifica ao realizar bootstrapping em seu ambiente. Ao personalizar o bootstrapping, você terá que personalizar a síntese. Para obter instruções gerais, consulte Personalização do bootstrapping do AWS CDK.

Modifique as credenciais e os perfis de segurança usados durante a implantação

Os perfis e os recursos de bootstrapping usados durante as implantações são determinados pelo sintetizador de pilha do CDK que você usa. Para modificar esse comportamento, você pode personalizar a síntese. Para obter mais informações, consulte Configuração e realização da síntese de pilhas do CDK.

Considerações para conceder o acesso de privilégio mínimo

Conceder acesso com privilégio mínimo é uma prática recomendada de segurança que sugerimos que você considere ao desenvolver sua estratégia de segurança. Para obter mais informações, consulte SEC03-BP02 Concessão de acesso com privilégio mínimo no Guia do AWS Well-Architected Framework.

Geralmente, conceder acesso com privilégio mínimo envolve restringir as políticas do IAM ao acesso mínimo necessário para realizar uma determinada tarefa. Tentar conceder acesso com privilégio mínimo por meio de permissões refinadas com o CDK usando essa abordagem pode afetar as implantações do CDK e fazer com que você precise criar permissões com escopo mais amplo do que gostaria. Ao usar essa abordagem, leve em consideração o seguinte:

  • Determinar uma lista exaustiva de permissões que permitam que os desenvolvedores usem o AWS CDK para provisionar por meio do CloudFormation é difícil e complexo.

  • Se você quiser refinar, as permissões podem se tornar muito longas para caber no tamanho máximo dos documentos de política do IAM.

  • Fornecer um conjunto incompleto de permissões pode afetar gravemente a produtividade e as implantações dos desenvolvedores.

Com o CDK, as implantações são realizadas usando o CloudFormation. O CloudFormation inicia um conjunto de chamadas de API da AWS em ordem usando as permissões fornecidas. As permissões necessárias a qualquer momento dependem de muitos fatores:

  • Os serviços da AWS que estão sendo modificados. Especificamente, os recursos e propriedades que estão sendo usados e alterados.

  • O estado atual da pilha do CloudFormation.

  • Problemas que podem ocorrer durante as implantações e se forem necessárias reversões, que também exigirão permissões Delete além de Create.

Quando as permissões fornecidas estiverem incompletas, será necessária uma intervenção manual. Veja a seguir alguns exemplos:

  • Se você descobrir permissões incompletas durante o avanço, precisará pausar a implantação e dedicar algum tempo para discutir e provisionar novas permissões antes de continuar.

  • Se a implantação for revertida e as permissões para aplicar a reversão estiverem ausentes, isso poderá deixar sua pilha do CloudFormation em um estado que exigirá muito trabalho manual para se recuperar.

Como essa abordagem pode resultar em complicações e limitar severamente a produtividade do desenvolvedor, não recomendamos segui-la. Em vez disso, recomendamos implementar barreiras de proteção e impedir desvios.

Implementação de barreiras de proteção e impedimento de desvios

É possível implementar barreiras de proteção, regras de conformidade, auditoria e monitoramento usando serviços como o AWS Control Tower, o AWS Config, o AWS CloudTrail, o AWS Security Hub e outros. Com essa abordagem, você concede permissão aos desenvolvedores para fazer tudo, exceto adulterar os mecanismos de validação existentes. Os desenvolvedores têm a liberdade de implementar mudanças rapidamente, desde que permaneçam dentro da política. Essa é a abordagem que recomendamos ao usar o AWS CDK. Para obter mais informações sobre grades de proteção, consulte Controles no Guia do ambiente de nuvem de gerenciamento e governança.

Também recomendamos o uso de limites de permissões ou políticas de controle de serviços (SCPs) como forma de implementar barreiras de proteção. Para obter mais informações sobre a implementação de limites de permissões com o AWS CDK, consulte Criação e aplicação de limites de permissões para o AWS CDK.

Se você estiver usando algum mecanismo de controle de conformidade, configure-o durante a fase de bootstrapping. Verifique se o CloudFormationExecutionRole ou as identidades acessíveis pelo desenvolvedor têm políticas ou limites de permissões anexados que evitem o desvio dos mecanismos que você implementou. As políticas apropriadas dependem dos mecanismos específicos que você usa.

Gerenciamento de permissões entre recursos provisionados pelo AWS CDK

A forma como você gerencia as permissões entre os recursos que são provisionados pelo AWS CDK depende se você permite que o CDK crie perfis e políticas.

Ao usar constructos L2 da Biblioteca de Constructos AWS para definir sua infraestrutura, você pode usar os métodos grant fornecidos para provisionar permissões entre recursos. Com os métodos grant, você especifica o tipo de acesso que deseja entre os recursos e o AWS CDK provisiona perfis do IAM com privilégio mínimo para realizar sua intenção. Essa abordagem atende aos requisitos de segurança da maioria das organizações e, ao mesmo tempo, é eficiente para desenvolvedores. Para obter mais informações, consulte Definição de permissões para constructos L2 com o CDK da AWS.

Se você quiser contornar esse atributo substituindo os perfis gerados automaticamente por outros criados manualmente, considere o seguinte:

  • Seus perfis do IAM precisarão ser criados manualmente, retardando o desenvolvimento da aplicação.

  • Quando os perfis do IAM precisam ser criados e gerenciados manualmente, as pessoas geralmente combinam vários perfis lógicos em um único perfil para facilitar o gerenciamento. Isso vai contra o princípio de privilégio mínimo.

  • Como esses perfis precisarão ser criados antes da implantação, os recursos que precisam ser referenciados ainda não existirão. Portanto, você precisará usar curingas, o que vai contra o princípio do privilégio mínimo.

  • Uma solução alternativa comum para o uso de curingas é exigir que todos os recursos recebam um nome previsível. No entanto, isso interfere na capacidade do CloudFormation de substituir recursos quando necessário e pode retardar ou impedir o desenvolvimento. Por isso, recomendamos que você permita que o CloudFormation crie nomes de recursos exclusivos para você.

  • Será impossível realizar a entrega contínua, pois as ações manuais devem ser realizadas antes de cada implantação.

Quando as organizações querem impedir que o CDK crie perfis, geralmente é para impedir que os desenvolvedores possam criar perfis do IAM. A preocupação é que, ao dar permissão aos desenvolvedores para criar perfis do IAM usando o AWS CDK, eles poderiam elevar seus próprios privilégios. Para mitigar isso, recomendamos o uso de limites de permissões ou políticas de controle de serviços (SCPs). Com os limites de permissões, você pode definir limites sobre o que os desenvolvedores e o CDK estão autorizados a fazer. Para obter mais informações sobre o uso de limites de permissões com o CDK, consulte Criação e aplicação de limites de permissões para o AWS CDK.