Lambda 操作的资源和条件 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Lambda 操作的资源和条件

您可以通过在 IAM 策略中指定资源和条件来限制用户权限的范围。每个 API 操作都支持资源和条件类型的组合,这些类型根据操作的行为而有所不同。

每条 IAM 策略语句为对一个资源执行的一个操作授予权限。如果操作不对指定资源执行操作,或者您授予对所有资源执行操作的权限,则策略中资源的值为通配符 (*)。对于许多 API 操作,可以通过指定资源的 Amazon Resource Name (ARN) 或与多个资源匹配的 ARN 模式来限制用户可修改的资源。

要按资源限制权限,请指定资源的 ARN。

Lambda 资源 ARN 格式

  • 函数 – arn:aws:lambda:us-west-2:123456789012:function:my-function

  • 函数版本 – arn:aws:lambda:us-west-2:123456789012:function:my-function:1

  • 函数别名 – arn:aws:lambda:us-west-2:123456789012:function:my-function:TEST

  • 事件源映射 – arn:aws:lambda:us-west-2:123456789012:event-source-mapping:fa123456-14a1-4fd2-9fec-83de64ad683de6d47

  • 层 – arn:aws:lambda:us-west-2:123456789012:layer:my-layer

  • 层版本 – arn:aws:lambda:us-west-2:123456789012:layer:my-layer:1

例如,以下策略允许账户 123456789012 中的用户调用美国西部(俄勒冈)区域中名为 my-function 的函数。

例 调用函数策略

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Invoke", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function" } ] }

这是一种特殊情形,其中,操作标识符 (lambda:InvokeFunction) 不同于 API 操作 (Invoke)。对于其他操作,操作标识符为操作名称加上 lambda: 前缀。

策略条件

条件是可选的策略元素,它应用其他逻辑来确定是否允许执行操作。除了所有操作支持的公用条件之外,Lambda 定义了一些条件类型,您可以用来限制某些操作的额外参数的值。

例如,lambda:Principal 条件允许您限制用户可以在函数的基于资源的策略上为其授予调用权限的服务或账户。以下策略允许用户授予对 SNS 主题的权限,以调用名为 test 的函数。

例 管理函数策略权限

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageFunctionPolicy", "Effect": "Allow", "Action": [ "lambda:AddPermission", "lambda:RemovePermission" ], "Resource": "arn:aws:lambda:us-west-2:123456789012:function:test:*", "Condition": { "StringEquals": { "lambda:Principal": "sns.amazonaws.com" } } } ] }

该条件要求委托人是 Amazon SNS 而不是其他服务或账户。资源模式要求函数名称为 test 并包含版本号或别名。例如:test:v1

有关 Lambda 和其他Amazon服务的资源和条件的更多信息,请参阅 IAM 用户指南中的操作、资源和条件键

函数资源名称

您可以使用 Amazon Resource Name(ARN)在策略语句中引用 Lambda 函数。函数 ARN 的格式取决于您是要引用整个函数(无限定)、某个函数版本,还是别名(限定)。

调用 Lambda API 时,用户可以通过在 GetFunction FunctionName 参数中传递版本 ARN 或别名 ARN,或者通过在 GetFunction Qualifier 参数中设置值,来指定一个版本或别名。Lambda 通过比较 IAM 策略中的资源元素与在 API 调用中传递的 FunctionNameQualifier 来做出授权决策。如果不一致,Lambda 将拒绝该请求。

无论您是允许还是拒绝某个函数操作,都必须在策略声明中使用正确的函数 ARN 类型才能获得预期的结果。例如,假设您的策略引用了非限定 ARN,Lambda 会接受引用非限定 ARN 的请求,但拒绝引用限定 ARN 的请求。

注意

不能使用通配符匹配账户 ID。有关可接受语法的更多信息,请参阅 IAM JSON 策略参考

例 允许调用非限定 arn

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction" } ] }

如果您的策略引用了特定的限定 ARN,Lambda 会接受引用该 ARN 的请求,但拒绝引用非限定 ARN 的请求(例如 myFunction:2)。

例 允许调用特定的限定 arn

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction:1" } ] }

如果您的策略引用了任何限定 ARN:*,Lambda 会接受任何限定 ARN,但拒绝引用非限定 ARN 的请求。

例 允许调用任何限定 arn

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction:*" } ] }

如果您的策略引用了任何使用 * 的 ARN,Lambda 会接受任何限定或非限定 ARN。

例 允许调用任何限定或非限定 arn

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction*" } ] }

函数操作

对函数进行的操作可以通过函数、版本或别名 ARN 限制为特定函数,如下表中所述。只能为所有资源 (*) 授予不支持资源限制的操作。

函数
操作 资源 Condition

AddPermission

RemovePermission

函数

函数版本

函数别名

lambda:Principal

调用

权限:lambda:InvokeFunction

函数

函数版本

函数别名

CreateFunction

UpdateFunctionConfiguration

函数

lambda:CodeSigningConfigArn

lambda:Layer

lambda:VpcIds

lambda:SubnetIds

lambda:SecurityGroupIds

CreateAlias

DeleteAlias

DeleteFunction

DeleteFunctionConcurrency

GetAlias

GetFunction

GetFunctionConfiguration

GetPolicy

ListAliases

ListVersionsByFunction

PublishVersion

PutFunctionConcurrency

UpdateAlias

UpdateFunctionCode

函数

GetAccountSettings

ListFunctions

ListTags

TagResource

UntagResource

*

事件源映射操作

对于事件源映射,可以将删除和更新权限限制为特定事件源。lambda:FunctionArn 条件允许您限制用户可配置事件源以调用的函数。

对于这些操作,资源是事件源映射,因此 Lambda 提供了一个条件,允许您根据事件源映射调用的函数来限制权限。

事件源映射
操作 资源 Condition

DeleteEventSourceMapping

UpdateEventSourceMapping

事件源映射

lambda:FunctionArn

CreateEventSourceMapping

*

lambda:FunctionArn

GetEventSourceMapping

ListEventSourceMappings

*

层操作

通过层操作,您可以限制用户可通过函数管理或使用的层。与层使用和权限相关的操作作用于层的版本,而 PublishLayerVersion 作用于层名称。两者都可以与通配符一起使用,以通过名称限制用户可以使用的层。

注意

注意:GetLayerVersion 操作还涵盖 GetLayerVersionByArn。Lambda 不支持 GetLayerVersionByArn 作为 IAM 操作。