Conceder a outras contas acesso à função do Lambda
Para compartilhar uma função com outra Conta da AWS, adicione uma instrução de permissões entre contas à política baseada no recurso da função. Recomendamos usar put-resource-policy para criar uma política JSON completa. Com put-resource-policy, você pode especificar várias entidades principais, adicionar condições e criar instruções de negação. Você também pode usar add-permission 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 a duas Contas da AWS permissões para invocar uma função, sendo uma delas restrita a um perfil do IAM específico:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-account-invoke", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root", "arn:aws:iam::444455556666:role/cross-account-role" ] }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function" } ] }
Salve a política em um arquivo chamado policy.json e aplique-a. O resource-arn pode especificar uma função, versão ou alias:
aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function\ --policy file://policy.json
Você também pode restringir o acesso entre contas a versões específicas usando um alias. A política a seguir concede acesso de invocação somente por meio do alias prod:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-account-prod-alias", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function:prod" } ] }
Salve essa política em um arquivo chamado alias-policy.json e aplique-a ao alias:
aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function:prod\ --policy file://alias-policy.json
A política baseada em recursos concede permissão para a outra conta acessar a função, mas não permite que os usuários nessa conta excedam suas permissões. Os usuários na outra conta devem ter as permissões de usuário correspondentes para usar a API do Lambda.
Conceda acesso entre contas para a maioria das ações de API que operam em uma função existente. Por exemplo, é possível conceder acesso a lambda:ListAliases para obter uma lista de aliases ou a lambda:GetFunction para permitir que eles façam download do código da função.
Para conceder permissão a outras contas para várias funções ou para ações que não operem em uma função, recomendamos usar as funções do IAM.
Uso de add-permission
Para casos de uso simples, você pode usar add-permission para adicionar instruções individuais. O exemplo a seguir concede permissão à conta 111122223333 para invocar my-function com o alias prod:
aws lambda add-permission \ --function-name my-function:prod\ --statement-id xaccount \ --action lambda:InvokeFunction \ --principal111122223333\ --output text
A seguinte saída deverá ser mostrada:
{"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-1: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 limitar o acesso a um usuário ou função em outra conta, especifique o ARN completo da identidade como o principal. Por exemplo, arn:aws:iam::123456789012:user/developer.