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á.
Permissões e o AWS CDK
A AWS Construct Library usa alguns idiomas comuns e amplamente implementados para gerenciar o acesso e as permissões. O módulo IAM fornece as ferramentas necessárias para usar essas linguagens.
AWS O CDK usa AWS CloudFormation para implantar mudanças. Cada implantação envolve um ator (um desenvolvedor ou um sistema automatizado) que inicia uma AWS CloudFormation implantação. Ao fazer isso, o ator assumirá uma ou mais identidades do IAM (usuário ou funções) e, opcionalmente, passará uma função para. AWS CloudFormation
Se você usa o AWS IAM Identity Center para se autenticar como usuário, o provedor de login único fornece credenciais de sessão de curta duração que autorizam você a atuar como uma função predefinida do IAM. Para saber como o AWS CDK obtém AWS credenciais da autenticação do IAM Identity Center, consulte Entenda a autenticação do IAM Identity Center no Guia de referência AWS SDKs de ferramentas.
Entidades principais
Um principal do IAM é uma AWS entidade autenticada que representa um usuário, serviço ou aplicativo que pode chamar AWS APIs. A AWS Construct Library suporta a especificação de diretores de várias maneiras flexíveis para permitir que eles acessem seus AWS recursos.
Em contextos de segurança, o termo “entidade principal” se refere especificamente a entidades autenticadas, como usuários. Objetos como grupos e perfis não representam usuários (e outras entidades autenticadas), mas os identificam indiretamente com o objetivo de conceder permissões.
Por exemplo, se você criar um grupo do IAM, poderá conceder ao grupo (e, portanto, a seus membros) acesso de gravação a uma tabela do Amazon RDS. No entanto, o grupo em si não é uma entidade principal porque não representa uma única entidade (além disso, você não pode fazer login em um grupo).
Na biblioteca do IAM do CDK, classes que identificam direta ou indiretamente as entidades principais implementam a interface IPrincipal, permitindo que esses objetos sejam usados de forma intercambiável nas políticas de acesso. No entanto, nem todos são entidades principais no sentido de segurança. Esses objetos incluem:
-
Entidades principais de serviço (
new iam.ServicePrincipal('service.amazonaws.com')) -
Entidades principais federadas (
new iam.FederatedPrincipal('cognito-identity.amazonaws.com')) -
Diretores da conta ()
new iam.AccountPrincipal('0123456789012') -
Entidades principais de usuários canônicos (
new iam.CanonicalUserPrincipal('79a59d[…]7ef2be')) -
AWS Diretores de organizações ()
new iam.OrganizationPrincipal('org-id') -
Entidades principais arbitrárias do ARN (
new iam.ArnPrincipal(res.arn)) -
Um
iam.CompositePrincipal(principal1, principal2, …)para confiar em várias entidades principais
Concessões
Muitas construções representam recursos que podem ser acessados, como um bucket do Amazon S3 ou uma tabela do Amazon DynamoDB. Para eles, você pode conceder acesso a outra entidade. Há duas maneiras de fazer isso, dependendo da construção específica: usando a classe Grants correspondente (por exemplo, BucketGrants para buckets do Amazon S3) ou usando métodos na própria construção, que têm nomes começando com grant. O primeiro é preferido porque pode ser usado para conceder acesso aos recursos L1 e L2 da mesma forma. Para criar uma instância de uma classe Grants, use seu método de fábrica:
As classes Grants fornecem métodos para conceder permissões específicas para acessar seus recursos. Por exemplo, BucketGrants tem métodos read e readWrite (Python:read,read_write) para permitir a leitura e o read/write acesso, respectivamente, de uma entidade ao bucket. A entidade não precisa saber exatamente quais permissões do Amazon S3 IAM são necessárias para realizar essas operações.
O primeiro argumento dos métodos em uma classe Grants (ou dos métodos de concessão nos próprios recursos) é sempre do tipo IGrantable. Essa interface representa entidades que podem receber permissões. Ou seja, ela representa recursos com perfis, como os objetos do IAM Role, User e Group.
Outras entidades também podem receber permissões. Por exemplo, mais adiante neste tópico, mostraremos como conceder a um CodeBuild projeto acesso a um bucket do Amazon S3. Geralmente, o perfil associado é obtido por meio de uma propriedade role na entidade que está recebendo acesso.
Recursos que usam perfis de execução, como o lambda.Function, também implementam IGrantable, para que você possa conceder acesso direto a eles em vez de conceder acesso ao perfil deles. Por exemplo, se bucket for um bucket do Amazon S3 e function for uma função do Lambda, o código a seguir concede à função acesso de leitura ao bucket.
Por conveniência, as construções L2 também oferecem uma grants propriedade que retorna uma instância da classe Grants correspondente.
Às vezes, as permissões precisam ser aplicadas enquanto sua pilha está sendo implantada. Um desses casos é quando você concede a um recurso AWS CloudFormation personalizado acesso a algum outro recurso. O recurso personalizado será invocado durante a implantação, portanto, ele deve ter as permissões especificadas no momento da implantação.
Outro caso é quando um serviço verifica se o perfil que você passa para ele tem as políticas corretas aplicadas. (Vários AWS serviços fazem isso para garantir que você não se esqueça de definir as políticas.) Nesses casos, a implantação pode falhar se as permissões forem aplicadas tarde demais.
Para forçar a aplicação das permissões da concessão antes da criação de outro recurso, é possível adicionar uma dependência da concessão em si, conforme mostrado aqui. Embora o valor de retorno dos métodos de concessão seja geralmente descartado, todo método de concessão na verdade retorna um objeto iam.Grant.
Perfis
O pacote do IAM contém um constructo Role que representa os perfis do IAM. O código a seguir cria uma nova função, confiando no EC2 serviço da Amazon.
É possível adicionar permissões a um perfil chamando o método addToPolicy do perfil (Python: add_to_policy), passando um PolicyStatement que define a regra a ser adicionada. A declaração será adicionada à política padrão do perfil. Se não houver nenhuma, uma será criada.
O exemplo a seguir adiciona uma declaração de política Deny ao perfis para as ações ec2:SomeAction e s3:AnotherAction dos recursos bucket e otherRole (Python: other_role), sob a condição de que o serviço autorizado seja AWS CodeBuild.
No exemplo anterior, criamos uma nova linha PolicyStatement com a chamada addToPolicy (Python: add_to_policy). Você também pode passar uma declaração de política existente ou uma que você tenha modificado. O objeto PolicyStatement possui vários métodos para adicionar entidades principais, recursos, condições e ações.
Se você estiver usando um constructo que requer um perfil para funcionar corretamente, é possível executar uma das ações a seguir:
-
Passar um perfil existente ao instanciar o objeto de constructo.
-
Deixar que o constructo crie um novo perfil para você, confiando na entidade principal de serviço apropriada. O exemplo a seguir usa essa construção: um CodeBuild projeto.
Depois que o objeto é criado, o perfil (seja o perfil passado ou o padrão criado pelo constructo) fica disponível como a propriedade role. No entanto, essa propriedade não está disponível em recursos externos. Portanto, esses constructos têm um método addToRolePolicy (Python: add_to_role_policy).
O método não faz nada se o constructo for um recurso externo e, caso contrário, chama o método addToPolicy (Python: add_to_policy) da propriedade role. Isso evita que você precise lidar com o caso indefinido de forma explícita.
O exemplo a seguir demonstra:
Políticas de recursos
Alguns recursos AWS, como buckets do Amazon S3 e funções do IAM, também têm uma política de recursos. Esses constructos possuem um método addToResourcePolicy (Python: add_to_resource_policy), que usa uma PolicyStatement como argumento. Cada declaração de política adicionada a uma política de recursos deve especificar pelo menos uma entidade principal.
No exemplo a seguir, o bucket do Amazon S3 concede ao bucket um perfil com a permissão s3:SomeAction para si mesmo.
Usando objetos externos do IAM
Se você definiu um usuário, diretor, grupo ou função do IAM fora do seu aplicativo AWS CDK, você pode usar esse objeto do IAM em seu aplicativo AWS CDK. Para fazer isso, crie uma referência a ele usando seu ARN ou seu nome. (Use o nome para usuários, grupos e perfis.) A referência retornada pode então ser usada para conceder permissões ou criar declarações de política, conforme explicado anteriormente.
-
Para usuários, chame
User.fromUserArn()ouUser.fromUserName().User.fromUserAttributes()também está disponível, mas atualmente fornece a mesma funcionalidade queUser.fromUserArn(). -
Para as entidades principais, instancie um objeto
ArnPrincipal. -
Para grupos, chame
Group.fromGroupArn()ouGroup.fromGroupName(). -
Para perfis, chame
Role.fromRoleArn()ouRole.fromRoleName().
As políticas (incluindo políticas gerenciadas) podem ser usadas de forma semelhante usando os métodos a seguir. É possível usar referências a esses objetos em qualquer lugar em que uma política do IAM seja necessária.
nota
Como acontece com todas as referências a AWS recursos externos, você não pode modificar objetos externos do IAM em seu aplicativo CDK.