Trabalhar com políticas baseadas em recursos no Lambda
Com as políticas de permissões baseadas em recursos, você pode conceder acesso às suas funções do Lambda a outras Contas da AWS, usuários, organizações e Serviços da AWS. Uma política baseada em recursos é um documento JSON que contém uma ou mais instruções. Cada instrução define o seguinte:
-
Principal: a entidade para a qual você deseja conceder permissões (outra AWS service (Serviço da AWS), um perfil ou usuário do IAM ou outra Conta da AWS) -
Action: uma lista das ações de API que você deseja permitir ou negar para a entidade principal especificada -
Effect: se você deseja permitir ou negar à entidade principal a capacidade de usar as ações de API escolhidas -
Resource: a função, versão ou alias do Lambda à qual você deseja que a instrução se aplique (você também pode usar um caractere curinga para especificar todas as versões e aliases da sua função)
Você também pode usar elementos opcionais, como Sid (um identificador de instrução) e Condition (condições lógicas para um controle de acesso mais detalhado). Para ver a lista completa dos elementos da política compatíveis, consulte a Referência de elemento de política JSON do IAM no Guia do usuário do AWS Identity and Access Management.
Adicionar permissões baseadas em recursos a uma função do Lambda
Você pode adicionar permissões baseadas em recursos à sua função do Lambda usando dois métodos:
-
Política JSON completa: use o console do Lambda, AWS CLI ou a ação da API PutResourcePolicy para adicionar um documento com a política JSON completa. Com uma política JSON completa, você pode usar a gama completa de chaves de condição globais do IAM, adicionar várias instruções com várias entidades principais e criar instruções explícitas de
Deny. O tamanho máximo para uma política JSON baseada em recursos é de 20 KB. -
Permissões individuais: use o console ou a ação da API AddPermission para adicionar instruções
Allowúnicas. As permissões individuais oferecem suporte somente a um conjunto limitado de chaves de condição (aws:SourceArn,aws:SourceAccounteaws:PrincipalOrgID).
Recomendamos que você defina políticas JSON completas para adicionar permissões baseadas em recursos à sua função. A criação de uma política JSON completa oferece mais flexibilidade e controle detalhado sobre suas permissões.
Importante
O uso de put-resource-policy substitui qualquer política existente baseada em recursos no recurso. Se o recurso já tiver as permissões definidas com add-permission, put-resource-policy as substituirá. Use get-resource-policy para recuperar a política existente antes de fazer alterações.
Permissões obrigatórias
Para usar as ações de API PutResourcePolicy, GetResourcePolicy e DeleteResourcePolicy, você precisa das seguintes permissões do IAM:
| Ação da API | Permissões obrigatórias |
|---|---|
| PutResourcePolicy | lambda:PutResourcePolicy, lambda:AddPermission, e lambda:RemovePermission |
| GetResourcePolicy | lambda:GetResourcePolicy e da lambda:GetPolicy |
| DeleteResourcePolicy | lambda:DeleteResourcePolicy e da lambda:RemovePermission |
Como visualizar a política baseada em recursos de uma função
Exclusão da política baseada em recursos de uma função
Atualização das políticas existentes
Quando você atualiza as permissões atuais baseadas em recursos de uma função, o comportamento depende do método usado:
-
put-resource-policy/ PutResourcePolicy: substitui toda a política existente. Todas as permissões individuais adicionadas anteriormente são substituídas. -
add-permission/ AddPermission: adiciona uma instrução à política atual sem substituí-la. Se você chamaradd-permissiondepois deput-resource-policy, a nova instrução será vinculada à política JSON existente.
Para evitar a substituição involuntária das permissões existentes durante o uso de put-resource-policy, primeiro recupere a política atual da sua função. O resultado get-resource-policy inclui um campo RevisionId.
aws lambda get-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function
Ao vincular uma nova política, forneça o valor RevisionId com o parâmetro --revision-id para garantir que você esteja atualizando a versão mais recente. Se você fornecer um ID de revisão mais antigo, o Lambda não atualizará a política da função.
aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function\ --policy file://policy.json \ --revision-ida1b2c3d4-5678-90ab-cdef-EXAMPLE11111
nota
As políticas atuais baseadas em recursos criadas com AddPermission continuam funcionando sem modificação. Nenhuma alteração no código da função é necessária para usar a nova API PutResourcePolicy.
Práticas recomendadas de segurança
Com as políticas JSON baseadas em recursos, você pode seguir padrões de acesso com privilégios mínimos. Você também pode atender aos requisitos regulamentares para negações explícitas. Com políticas JSON completas, você pode:
-
Criar instruções
Denyexplícitas para bloquear entidades principais ou condições específicas. -
Usar as condições organizacionais (
aws:PrincipalOrgID,aws:PrincipalOrgPaths) para restringir o acesso às suas Organizações sem enumerar contas individuais. -
Definir o escopo das permissões para contas ou ARNs de origens específicas usando toda a gama de chaves de condição globais do IAM.
Exemplos de políticas baseadas em recursos
exemplo Concessão de permissão ao Amazon S3 com uma instrução de negação
A política a seguir concede a todos os buckets do Amazon S3 em uma conta permissão para invocar uma função, exceto para um bucket que é explicitamente negado.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-s3", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" } } }, { "Sid": "deny-s3-bucket", "Effect": "Deny", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-east-2:111122223333:function:my-function", "arn:aws:lambda:us-east-2:111122223333:function:my-function:*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket" } } } ] }
exemplo Conceder permissão a contas em uma organização
A política a seguir concede acesso de invocação a todas as Contas da AWS em uma organização.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "org-access", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-a1b2c3d4e5f" } } } ] }
exemplo Conceder permissões a vários perfis do IAM com condições
A política a seguir concede permissão a dois perfis do IAM para o uso da ação CreateAlias a partir de um endereço IP especificado.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-roles", "Effect": "Allow", "Action": "lambda:CreateAlias", "Principal": { "AWS": [ "arn:aws:iam::444455556666:role/role-name", "arn:aws:iam::444455556666:role/role-name2" ] }, "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "IpAddress": { "aws:SourceIp": "192.0.2.0" } } } ] }
exemplo Negar acesso, a menos que o chamador faça parte de uma organização específica
{ "Version": "2012-10-17", "Statement": [ { "Sid": "deny-access", "Effect": "Deny", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "ForAllValues:StringNotLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*" ] } } }, { "Sid": "allow-access", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "ForAnyValue:StringLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*" ] } } } ] }
Ações da API com suporte
As seguintes ações de API do Lambda são compatíveis com as políticas baseadas em recursos:
-
InvokeFunctionUrl (somente permissão)