向其他账户授予 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 \ --principal111122223333\ --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。