我想了解 AWS Lambda 函数执行角色权限和调用权限之间的区别。我还想知道 Lambda 的两种 AWS Identity and Access Management (IAM) 权限有何不同。
解决方法
**重要事项:**在创建 IAM 策略时,最佳做法是仅授予执行特定任务所需的权限。
Lambda 函数执行角色权限
Lambda 执行角色权限是授予 Lambda 函数访问特定 AWS 服务和资源的权限的 IAM 权限。如果您未授予函数用于访问服务或资源的执行角色权限,则该函数将无法访问服务或资源。
授予执行角色权限
要授予 Lambda 执行角色权限,需要在 IAM 策略语句的 Action 元素中列出特定于服务的 API 操作,例如 s3:GetObject 或 sns:Publish。然后,将该策略附加到 Lambda 函数在调用时代入的 IAM 执行角色。
对于生成队列或数据流的服务,必须为 Lambda 配置事件源映射以轮询队列或数据流。事件源映射使用函数执行角色中的权限来读取和管理事件源中的项目。
**注意:**权限、事件结构、设置和轮询行为因事件源而异。有关包含 Lambda 轮询权限的 IAM 策略示例,请参阅允许 AWS Lambda 函数访问 Amazon DynamoDB 流记录的 IAM 策略。
Lambda 函数调用权限
Lambda 函数调用权限是授予特定服务或资源调用 Lambda 函数的权限的 IAM 权限。如果您没有为 Lambda 函数授予服务或资源调用权限,则该服务或资源将无法调用您的函数。
**重要事项:**必须向将事件源推送到 Lambda 函数的服务授予调用权限。例如,使用函数的基于资源的策略向 Amazon API Gateway 授予调用 Lambda 函数的权限。
授予调用权限
要授予 Lambda 调用权限,需要在 Lambda 函数基于资源的 IAM 策略语句的 Action 元素中列出 lambda:InvokeFunction API 操作。您需要分开配置 Lambda 函数基于资源的策略和该函数的执行角色。
**注意:**在这种情况下,lambda:InvokeFunction 操作标识符不同于 Invoke API 操作。对于其他操作,操作标识符是带有 lambda: 前缀的操作名称。
当您使用 Lambda 控制台向函数添加触发器时,所需的调用权限会自动添加到该函数的基于资源的策略中。要向控制台中不可用的 AWS 账户或服务授予权限,必须使用 AddPermission API 操作。
有关详细信息,请参阅授予 Lambda 函数访问 AWS 服务的权限。
相关信息
在 AWS Lambda 中管理权限
在执行角色中使用 AWS 托管策略