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

为 AWS Lambda 使用基于身份的策略(IAM 策略)

本主题提供了基于身份的策略的示例,在这些策略中,账户管理员可以向 IAM 身份 (即:用户、组和角色) 挂载权限策略。

重要

我们建议您首先阅读以下介绍性主题,这些主题讲解了管理 AWS Lambda 资源访问的基本概念和选项。有关更多信息,请参阅 管理您的 AWS Lambda 资源的访问权限概述

本主题的各个部分涵盖以下内容:

下面介绍权限策略示例。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateFunctionPermissions", "Effect": "Allow", "Action": [ "lambda:CreateFunction" ], "Resource": "*" }, { "Sid": "PermissionToPassAnyRole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-id:role/*" } ] }

该策略包含两条语句:

  • 第一个语句通过对 Lambda 函数使用 Amazon 资源名称 (ARN) 来授予对资源的 AWS Lambda 操作 (lambda:CreateFunction) 权限。目前,AWS Lambda 不支持资源级的此特定操作的权限。因此,该策略指定通配符 (*) 作为 Resource 值。

  • 第二条语句授予对 IAM 角色的 IAM 操作 (iam:PassRole) 权限。Resource 值结尾的通配符 (*) 表示该语句允许对任何 IAM 角色的 iam:PassRole 操作权限。要将此权限限制到特定角色,请使用特定角色名称替换资源 ARN 中的通配符 (*)。

该策略不指定 Principal 元素,因为在基于身份的策略中,您未指定获取权限的委托人。挂载了策略的用户是隐式委托人。向 IAM 角色挂载权限策略后,该角色的信任策略中标识的委托人将获取权限。

有关包含所有 AWS Lambda API 操作及其适用的资源和条件的表,请参阅 Lambda API 权限:操作、资源和条件参考

使用 AWS Lambda 控制台所需的权限

AWS Lambda 控制台为您提供了一个创建和管理 Lambda 函数的集成环境。此控制台提供了许多功能和工作流,通常需要创建 Lambda 函数的权限以及 Lambda API 权限:操作、资源和条件参考中记录的特定于 API 的权限。有关这些附加控制台权限的更多信息,请参阅使用 AWS Lambda 控制台所需的权限

适用于 AWS Lambda 的 AWS 托管(预定义)策略

AWS 通过提供由 AWS 创建和管理的独立 IAM 策略来解决许多常用案例。托管策略可授予常用案例的必要权限,因此,您可以免去调查都需要哪些权限的工作。有关更多信息,请参阅 IAM 用户指南 中的 AWS 托管策略

下面的 AWS 托管策略可附加到您账户中的用户,这些托管策略特定于 AWS Lambda 并且按使用案例场景进行分组:

  • AWSLambdaReadOnlyAccess - 授予对 AWS Lambda 资源的只读访问权限。请注意,此策略不授予 lambda:InvokeFunction 操作权限。如果您希望用户调用 Lambda 函数,也可以附加 AWSLambdaRole AWS 托管策略。

  • AWSLambdaFullAccess - 授予对 AWS Lambda 资源的完全访问权限。

  • AWSLambdaRole - 授予调用任何 Lambda 函数的权限。

注意

您可以通过登录到 IAM 控制台并在该控制台中搜索特定策略来查看这些权限策略。

此外,还有其他 AWS 托管策略,这些策略非常适合用于您在创建 Lambda 函数时指定的 IAM 角色(执行角色)。有关更多信息,请参阅 AWS Lambda 权限模型

此外,您还可以创建自己的自定义 IAM 策略,以授予 AWS Lambda API 操作和资源的相关权限。您可以将这些自定义策略附加到需要上述权限的 IAM 用户和组或您为 Lambda 函数创建的自定义执行角色(IAM 角色)。

客户托管策略示例

此部分中的示例提供了一组可附加到用户的示例策略。如果您是首次创建策略,建议您先在账户中创建 IAM 用户并按顺序将策略附加到用户,如此部分中的步骤所述。

在将每个策略附加到用户时,可使用控制台验证该策略的效果。最初,用户没有权限并且无法在控制台中执行任何操作。在将策略附加到用户时,可以验证用户是否能在控制台中执行各种操作。 

建议您使用两个浏览器窗口:一个浏览器窗口用于创建用户和授予权限,另一个浏览器窗口用于使用用户凭证登录 AWS 管理控制台,并在向用户授予权限时验证这些权限。

有关说明如何创建可用作 Lambda 函数的执行角色的 IAM 角色的示例,请参阅 IAM 用户指南 中的创建 IAM 角色

步骤 1:创建一个 IAM 用户

首先,您需要创建一个 IAM 用户,将该用户添加到具有管理权限的 IAM 组,然后向您创建的 IAM 用户授予管理权限。您随后便可以使用一个特殊的 URL 和该 IAM 用户的凭证访问 AWS。

有关说明,请参阅 IAM 用户指南 中的创建您的第一个 IAM 用户和管理员组

步骤 2:允许用户列出 Lambda 函数

您的账户中的 IAM 用户必须先具有 lambda:ListFunctions 操作权限,然后才能在控制台中查看任何内容。在您授予这些权限时,控制台会显示在用户所属的特定 AWS 区域中创建的 AWS 账户中的 Lambda 函数列表。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListExistingFunctions", "Effect": "Allow", "Action": [ "lambda:ListFunctions" ], "Resource": "*" } ] }

步骤 3:允许用户查看 Lambda 函数的详细信息

用户可以选择 Lambda 函数和查看该函数的详细信息(例如,别名、版本和其他配置信息),前提是用户具有以下 AWS Lambda 操作的权限:

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DisplayFunctionDetailsPermissions", "Effect": "Allow", "Action": [ "lambda:ListVersionsByFunction", "lambda:ListAliases", "lambda:GetFunction", "lambda:GetFunctionConfiguration", "lambda:ListEventSourceMapping", "lambda:GetPolicy" ], "Resource": "*" } ] }

步骤 4:允许用户调用 Lambda 函数

如果要向用户授予手动调用函数的权限,您需要授予 lambda:InvokeFunction 操作的权限,如下所示:

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "InvokePermission", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "*" } ] }

步骤 5:允许用户监控 Lambda 函数和查看 CloudWatch Logs

当用户调用 Lambda 函数时,AWS Lambda 将执行此操作并返回结果。用户需要额外权限才能监控 Lambda 函数。

要允许用户在控制台的 Monitoring 选项卡上或控制台主页的网格视图中查看 Lambda 函数的 CloudWatch 指标,您必须授予以下权限:

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchPermission", "Effect": "Allow", "Action": [ "cloudwatch:GetMetricStatistics" ], "Resource": "*" } ] }

要使用户能够在 AWS Lambda 控制台中单击指向 CloudWatch Logs 的链接并在 CloudWatch Logs 中查看日志输出,您必须授予以下权限:

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchLogsPerms", "Effect": "Allow", "Action": [ "cloudwatchlog:DescribeLogGroups", "cloudwatchlog:DescribeLogStreams", "cloudwatchlog:GetLogEvents" ], "Resource": "arn:aws:logs:region:account-id:log-group:/aws/lambda/*" } ] }

步骤 6:允许用户创建 Lambda 函数

如果您希望用户能够创建 Lambda 函数,则您必须授予以下权限。由于当用户创建 Lambda 函数时,用户需要选择 IAM 执行角色(AWS Lambda 可担任此角色来执行 Lambda 函数),因此需要与 IAM 相关的操作的权限。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListExistingRolesAndPolicies", "Effect": "Allow", "Action": [ "iam:ListRolePolicies", "iam:ListRoles" ], "Resource": "*" }, { "Sid": "CreateFunctionPermissions", "Effect": "Allow", "Action": [ "lambda:CreateFunction" ], "Resource": "*" }, { "Sid": "PermissionToPassAnyRole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-id:role/*" } ] }

如果您希望用户能够在创建 Lambda 函数时创建 IAM 角色,则用户需要执行 iam:PutRolePolicy 操作的权限,如下所示:

Copy
{ "Sid": "CreateARole", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:CreatePolicy", "iam:AttachRolePolicy" ], "Resource": "arn:aws:iam::account-id:role/*" }

重要

每个 IAM 角色均已附加一个权限策略,该策略向此角色授予了特定权限。无论用户是创建新角色还是使用现有角色,都必须拥有与角色关联的权限策略中授予的所有操作的权限。您必须相应地向用户授予其他权限。