Conceder aos serviços da AWS acesso à função do Lambda
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. Você pode 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.
Adicionar uma instrução com o comando add-permissionmy-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"}
Isso permite que o Amazon SNS chame a ação de API Invoke na função, mas não restringe o tópico do Amazon SNS que dispara a invocação. Para garantir que a função só seja invocada por um recurso específico, especifique o Amazon Resource Name (ARN – Nome de recurso da Amazon) do recurso com a opção source-arn
. O comando a seguir só permite que o Amazon SNS invoque a função para assinaturas de um tópico chamado my-topic
.
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
Alguns serviços podem invocar funções em outras contas. Se você especificar um ARN de origem que tenha o ID da conta, isso não será um problema. No entanto, para o Amazon S3 a origem é um bucket cujo ARN não tem um ID da conta. É possível que você consiga excluir o bucket e outra conta consiga criar um bucket com o mesmo nome. Use a opção source-account
com o ID da sua conta para garantir que apenas os recursos na conta possam invocar a função.
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-account123456789012