View a markdown version of this page

向其他账户授予 Lambda 函数访问权限 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

向其他账户授予 Lambda 函数访问权限

要与其他 Amazon Web Services 账户 共享函数,请在该函数的基于资源的策略中添加跨账户权限语句。建议使用 put-resource-policy 创建完整 JSON 策略。借助 put-resource-policy,可指定多个主体、添加条件并创建拒绝语句。add-permission 也适用于简单使用案例。

重要

使用 put-resource-policy 将替换该资源上所有现有的基于资源的策略。若资源已通过 add-permission 定义了权限,则 put-resource-policy 会覆盖这些权限。进行修改前,请使用 get-resource-policy 获取现有策略。

使用完整 JSON 策略(推荐)

以下示例策略授予两个 Amazon Web Services 账户调用函数的权限,其中一条权限限定为特定 IAM 角色:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-account-invoke", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root", "arn:aws:iam::444455556666:role/cross-account-role" ] }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function" } ] }

将策略保存至名为 policy.json 的文件,然后应用该策略。resource-arn 可用于指定函数、版本或别名:

aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function \ --policy file://policy.json

您还可通过别名,将跨账户访问限定至特定版本。以下策略仅允许通过 prod 别名授予调用权限:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-account-prod-alias", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function:prod" } ] }

将此策略保存至名为 alias-policy.json 的文件,并应用到该别名:

aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function:prod \ --policy file://alias-policy.json

基于资源的策略向另一个账户授予访问此函数的权限,但不允许该账户中的用户超出其权限。另一个账户中的用户必须具有相应的用户权限才能使用 Lambda API。

您可以授予对作用于现有函数的大多数 API 操作的跨账户访问权。例如,您可以授予 lambda:ListAliases 权限,以允许一个账户获得别名列表,或授予 lambda:GetFunction 权限,以让它们下载您的函数代码。

要授予其他账户对多个函数的权限,或不对某个函数执行的操作的权限,请使用 IAM 角色

使用 add-permission

对于简单使用案例,您可借助 add-permission 添加单独语句。以下示例授予账户 111122223333 使用 prod 别名调用 my-function 的权限:

aws lambda add-permission \ --function-name my-function:prod \ --statement-id xaccount \ --action lambda:InvokeFunction \ --principal 111122223333 \ --output text

您应看到以下输出:

{"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-1:123456789012:function:my-function"}
注意

若在 put-resource-policy 之后调用 add-permission,新语句将附加至现有 JSON 策略。

要限制对另一个账户中用户或角色的访问,请将身份的完整 ARN 指定为主体。例如:arn:aws:iam::123456789012:user/developer