AWS Lambda
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

AWS Lambda 权限模型

要让基于 AWS Lambda 的端到端应用程序工作,您需要管理各种权限。例如:

  • 对于事件源,除了基于流的服务(Amazon Kinesis Streams 和 DynamoDB 流)之外,您必须向事件源授予调用您的 AWS Lambda 函数的权限。

     

  • 对基于流的事件源(Amazon Kinesis Streams 和 DynamoDB 流)而言,AWS Lambda 代表您轮询流并读取流上的新记录,因此您需要为相关流操作授予 AWS Lambda 权限。

     

  • 当您的 Lambda 函数执行之后,您可以访问账户中的 AWS 资源(例如,从 S3 存储桶读取对象)。AWS Lambda 通过代入您在创建 Lambda 函数时提供的角色,代表您执行 Lambda 函数。因此,您需要授予角色您的 Lambda 函数所需的权限,例如 Amazon S3 操作读取对象的权限。

下面几节介绍了权限管理。

管理权限:使用 IAM 角色(执行角色)

每个 Lambda 函数具有与之关联的 IAM 角色(执行角色)。您将在创建 Lambda 函数时指定 IAM 角色。您授予此角色的权限确定了 AWS Lambda 在代入该角色时可以执行的操作。您可以将两种类型的权限授予 IAM 角色:

  • 如果您的 Lambda 函数代码访问其他 AWS 资源,例如从 S3 存储桶读取对象或者写入日志到 CloudWatch Logs,则您需要将相关 Amazon S3 和 CloudWatch 操作的权限授予角色。

     

  • 如果事件源基于流(Amazon Kinesis Streams 和 DynamoDB 流),AWS Lambda 代表您轮询这些流。AWS Lambda 需要权限轮询流和读取流上的新记录,因此您需要将相关权限授予此角色。

有关 IAM 角色的更多信息,请参阅 IAM 用户指南 中的角色(委托和联合)

重要

创建 IAM 角色的用户实际上将权限传递到 AWS Lambda 以代入此角色,这需要用户具有 iam:PassRole 操作的权限。如果管理员用户创建此角色,则除了授予 iam:PassRole 操作权限之外,您无需执行任何操作,因为管理员用户具有完整权限,包括 iam:PassRole 操作。

为了简化创建执行角色的过程,AWS Lambda 提供了以下您可以使用的 AWS 托管(预定义)权限策略。这些策略包括特定情景的常用权限:

  • AWSLambdaBasicExecutionRole - 仅为写入日志的 Amazon CloudWatch Logs 操作授予权限。如果您的 Lambda 函数除了写入日志之外不访问任何其他 AWS 资源,您可以使用此策略。

     

  • AWSLambdaKinesisExecutionRole - 授予 Amazon Kinesis Streams 操作和 CloudWatch Logs 操作权限。如果您在编写 Lambda 函数来处理 Kinesis 流事件,您可以附加此权限策略。

     

  • AWSLambdaDynamoDBExecutionRole - 授予 DynamoDB 流操作和 CloudWatch Logs 操作的权限。如果您在编写 Lambda 函数来处理 DynamoDB 流事件,您可以附加此权限策略。

     

  • AWSLambdaVPCAccessExecutionRole - 授予 Amazon Elastic Compute Cloud (Amazon EC2) 操作管理弹性网络接口 (ENI) 的权限。如果您正在编写 Lambda 函数来访问 Amazon Virtual Private Cloud (Amazon VPC) 服务中 VPC 的资源,则您可以附加此权限策略。该策略还授予 CloudWatch Logs 操作写入日志的权限。

    您可以在 IAM 控制台中查找这些 AWS 托管权限策略。搜索这些策略,您可以看到其中每个策略授予的权限。

管理权限:使用 Lambda 函数策略

所有支持的事件源,除了基于流的服务之外 (Kinesis 和 DynamoDB 流),只要您授予了必需的权限就可以调用您的 Lambda 函数 (推模型)。例如,如果您希望在存储桶中创建对象时 Amazon S3 调用您的 Lambda 函数,则 Amazon S3 需要权限来调用您的 Lambda 函数。

您可以通过函数策略授予这些权限。AWS Lambda 为您提供 API 来管理函数策略中的权限。有关示例请查看 AddPermission

您还可以使用函数策略授予跨账户权限。例如,如果用户定义的应用程序与其调用的 Lambda 函数隶属同一个 AWS 账户,则无需授予显式权限。否则,在与 Lambda 函数关联的权限策略中,拥有 Lambda 函数的 AWS 账户必须具有跨账户权限。

注意

您可以创建另一个 IAM 角色来向事件源(例如 Amazon S3 或 DynamoDB)授予调用 Lambda 函数的权限,而不是使用 Lambda 函数策略。但是,您可能会发现资源策略更易于设置,并且它们使您能够更轻松地跟踪有权限调用您的 Lambda 函数的事件源。

有关 Lambda 函数策略的更多信息,请参阅对 AWS Lambda 使用基于资源的策略(Lambda 函数策略)。有关 Lambda 权限的更多信息,请参阅AWS Lambda 的身份验证和访问控制

建议阅读材料

如果您是首次接触 AWS Lambda,我们建议您通读“工作原理”部分中的主题以熟悉 Lambda。下一个主题为Lambda 执行环境和可用库

在您阅读了“工作原理”部分中的所有主题之后,我们建议您查看 构建 Lambda 函数,尝试入门练习,然后探讨使用案例。每个使用情形都提供了设置端到端体验的分步说明。