View a markdown version of this page

Concessão de acesso da função do Lambda a Serviços da AWS - AWS Lambda

Concessão de acesso da função do Lambda a Serviços da AWS

Ao usar um serviço da AWS para invocar a função, você concede permissão em uma instrução em uma política baseada em recursos. É possível aplicar a instrução à função toda ou limitar a instrução a uma única versão ou alias.

nota

Quando você adiciona um acionador à função com o console do Lambda, este atualiza a política baseada em recursos da função para permitir que o serviço a invoque. Para conceder permissões a outras contas ou serviços que não estejam disponíveis no console do Lambda, é possível usar a AWS CLI.

Recomendamos usar put-resource-policy para definir uma política JSON completa. Com put-resource-policy, você pode adicionar instruções de negação, usar toda a gama de chaves de condição do IAM e gerenciar todas as permissões em um único documento. Você também pode usar add-permission para adicionar instruções individuais para casos de uso simples.

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.

Uso de uma política JSON completa (recomendado)

O exemplo de política a seguir concede ao Amazon Simple Notification Service permissão para invocar uma função denominada my-function, mas somente para um tópico específico. Ela também nega invocações a partir de um tópico específico.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-sns-my-topic", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:my-topic" } } }, { "Sid": "deny-sns-other-topic", "Effect": "Deny", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-east-2:123456789012:function:my-function", "arn:aws:lambda:us-east-2:123456789012:function:my-function:*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:restricted-topic" } } } ] }

Salve a política em um arquivo chamado policy.json e aplique-a com put-resource-policy:

aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function \ --policy file://policy.json

Para o Amazon S3, a fonte é um bucket cujo ARN não tem um ID da conta. É possível que você consiga excluir um bucket e outra conta consiga criar um bucket com o mesmo nome. Use a chave de condição aws:SourceAccount para garantir que apenas os recursos na sua conta possam invocar a função:

{ "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:123456789012:function:my-function", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "aws:SourceArn": "arn:aws:s3:::my-bucket" } } } ] }

Uso de add-permission

Para casos de uso simples, você pode usar add-permission para adicionar instruções individuais. O comando a seguir concede ao Amazon Simple Notification Service permissão para invocar uma função denominada my-function:

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id sns \ --principal sns.amazonaws.com \ --output text

A seguinte saída deverá ser mostrada:

{"Sid":"sns","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function"}
nota

Se você chamar add-permission depois de put-resource-policy, a nova instrução será vinculada à política JSON existente.

Para restringir as invocações a um recurso específico, use a opção source-arn:

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id sns-my-topic \ --principal sns.amazonaws.com \ --source-arn arn:aws:sns:us-east-2:123456789012:my-topic

Para o Amazon S3, use a opção source-account com o ID da sua conta:

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id s3-account \ --principal s3.amazonaws.com \ --source-arn arn:aws:s3:::amzn-s3-demo-bucket \ --source-account 123456789012