授予 Lambda 函数访问 AWS 服务的权限
当您使用 AWS 服务调用您的函数时,可以用基于资源的策略语句授权。您可以将语句应用于整个函数,也可以将语句限制为单个版本或别名。
注意
当您通过 Lambda 控制台向函数添加触发器时,该控制台会更新函数的基于资源的策略以允许服务调用它。要向 Lambda 控制台中不可用的其他账户或服务授予权限,可以使用 AWS CLI。
使用 add-permissionmy-function
的函数的权限。
aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id sns \ --principal sns.amazonaws.com \ --output text
您应看到以下输出:
{"Sid":"sns","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function"}
这允许 Amazon SNS 在函数上调用 Invoke API 操作,但不会限制触发调用的 Amazon SNS 主题。为确保您的函数只被特定资源调用,请使用 source-arn
选项指定资源的 Amazon Resource Name (ARN)。以下命令只允许 Amazon SNS 调用名为 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
有些服务可以调用其他账户中的函数。如果您指定的一个源 ARN 中包含您的账户 ID,这不是问题。但对于 Amazon S3 来说,源是其 ARN 中不包含账户 ID 的存储桶。有可能是您删除了该存储桶,而另一个账户用同样的名称创建了这样一个存储桶。使用 source-account
选项以及您的账户 ID 以确保只有您账户中的资源可以调用该函数。
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