Este é o Guia do Desenvolvedor AWS CDK v2. A versão CDK 1 mais antiga 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 IAM módulo fornece as ferramentas necessárias para usar esses idiomas.
AWS 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 IAM identidades (usuário ou funções) e, opcionalmente, passará uma função para. AWS CloudFormation
Se você usa 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. IAM Para saber como o AWS CDK obtém AWS credenciais da autenticação do IAM Identity Center, consulte Compreender a autenticação do IAM Identity Center no Guia de referência de ferramentas AWS SDKs e ferramentas.
Entidades principais
Um IAM principal é uma AWS entidade autenticada que representa um usuário, serviço ou aplicativo que pode ligar 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 “principal” se refere especificamente a entidades autenticadas, como usuários. Objetos como grupos e funções 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 IAM grupo, poderá conceder ao grupo (e, portanto, a seus membros) acesso de gravação a uma RDS tabela da Amazon. No entanto, o grupo em si não é um principal porque não representa uma única entidade (além disso, você não pode fazer login em um grupo).
Na IAM biblioteca CDK do, classes que identificam direta ou indiretamente os principais implementam a IPrincipal
interface, permitindo que esses objetos sejam usados de forma intercambiável nas políticas de acesso. No entanto, nem todos são diretores no sentido de segurança. Esses objetos incluem:
-
Diretores de serviço ()
new iam.ServicePrincipal('service.amazonaws.com')
-
Diretores federados ()
new iam.FederatedPrincipal('cognito-identity.amazonaws.com')
-
Diretores de contas (
new iam.AccountPrincipal('0123456789012'))
-
Principais usuários canônicos ()
new iam.CanonicalUserPrincipal('79a59d[...]7ef2be')
-
AWS Organizations diretores ()
new iam.OrganizationPrincipal('org-id')
-
ARNPrincípios arbitrários ()
new iam.ArnPrincipal(res.arn)
-
E
iam.CompositePrincipal(principal1, principal2, ...)
confiar em vários diretores
Concessões
Cada construção que representa um recurso que pode ser acessado, como um bucket do Amazon S3 ou uma tabela do Amazon DynamoDB, tem métodos que concedem acesso a outra entidade. Todos esses métodos têm nomes que começam com grant.
Por exemplo, os buckets do Amazon S3 têm os métodos e grantRead
(grantReadWrite
Python:grant_read
,grant_read_write
) para permitir o acesso de leitura e leitura/gravação, respectivamente, de uma entidade ao bucket. A entidade não precisa saber exatamente quais IAM permissões do Amazon S3 são necessárias para realizar essas operações.
O primeiro argumento de um método de concessão é sempre do tipo IGrantable. Essa interface representa entidades que podem receber permissões. Ou seja, ele representa recursos com funções, como IAM objetos Role
User
, Group
e.
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, a função associada é obtida por meio de uma role
propriedade na entidade que está recebendo acesso.
Recursos que usam funções de execução, comolambda.Function
, também são implementadosIGrantable
, para que você possa conceder acesso direto a eles em vez de conceder acesso à função deles. Por exemplo, se bucket
for um bucket do Amazon S3 e function
for uma função Lambda, o código a seguir concede à função acesso de leitura ao bucket.
À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 a função 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, você pode 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 iam.Grant
objeto.
Funções
O IAM pacote contém uma Role
construção que representa IAM funções. O código a seguir cria uma nova função, confiando no EC2 serviço da Amazon.
Você pode adicionar permissões a uma função chamando o addToPolicy
método da função (Python:add_to_policy
), passando um PolicyStatement
que define a regra a ser adicionada. A declaração é adicionada à política padrão da função; se não tiver nenhuma, uma será criada.
O exemplo a seguir adiciona uma declaração de Deny
política à função das 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 PolicyStatement
linha com a chamada (addToPolicy
Python:). add_to_policy
Você também pode transmitir uma declaração de política existente ou uma que você tenha modificado. O PolicyStatementobjeto tem vários métodos para adicionar princípios, recursos, condições e ações.
Se você estiver usando uma construção que exige uma função para funcionar corretamente, você pode fazer o seguinte:
-
Passe uma função existente ao instanciar o objeto de construção.
-
Deixe que a construção crie uma nova função para você, confiando no diretor de serviço apropriado. O exemplo a seguir usa essa construção: um CodeBuild projeto.
Depois que o objeto é criado, a função (seja a função passada ou a padrão criada pela construção) fica disponível como propriedaderole
. No entanto, essa propriedade não está disponível em recursos externos. Portanto, essas construções têm um método addToRolePolicy
(Pythonadd_to_role_policy
:).
O método não faz nada se a construção for um recurso externo e, caso contrário, chama o método addToPolicy
(Python:add_to_policy
) da role
propriedade. Isso evita o trabalho de lidar explicitamente com o caso indefinido.
O exemplo a seguir demonstra:
Políticas de recursos
Alguns recursos AWS, como buckets e IAM funções do Amazon S3, também têm uma política de recursos. Essas construções têm um addToResourcePolicy
método (Pythonadd_to_resource_policy
:), que usa a PolicyStatement
como argumento. Cada declaração de política adicionada a uma política de recursos deve especificar pelo menos um principal.
No exemplo a seguir, o bucket do Amazon S3 bucket
concede uma função com a s3:SomeAction
permissão para si mesmo.
Usando IAM objetos externos
Se você definiu um IAM usuário, diretor, grupo ou função fora do seu AWS CDK aplicativo, você pode usar esse IAM objeto em seu AWS CDK aplicativo. Para fazer isso, crie uma referência a ele usando seu nome ARN ou seu nome. (Use o nome para usuários, grupos e funções.) 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, ligue
User.fromUserArn()
ouUser.fromUserName()
.User.fromUserAttributes()
também está disponível, mas atualmente fornece a mesma funcionalidade queUser.fromUserArn()
. -
Para os principais, instancie um objeto.
ArnPrincipal
-
Para grupos, ligue
Group.fromGroupArn()
ouGroup.fromGroupName()
. -
Para funções, ligue para
Role.fromRoleArn()
ouRole.fromRoleName()
.
As políticas (incluindo políticas gerenciadas) podem ser usadas de forma semelhante usando os métodos a seguir. Você pode usar referências a esses objetos em qualquer lugar em que uma IAM política seja necessária.
nota
Como acontece com todas as referências a AWS recursos externos, você não pode modificar IAM objetos externos no seu CDK aplicativo.