如何配置权限限制Lambda函数仅被指定Lambda函数调用?
解决AWS Lambda跨调用权限限制问题
核心配置思路
要实现仅允许指定Lambda函数互调、拒绝跨调用的需求,需要同时配置被调用方的资源策略和调用方的执行角色权限,通过明确允许合法调用路径,让默认拒绝规则拦截所有未授权请求。
步骤1:配置被调用方的资源策略
分别为Lambda C、Lambda D添加资源策略,仅允许对应的调用方访问:
Lambda C的资源策略(仅允许Lambda A调用)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::你的账号ID:role/LambdaA的执行角色ARN" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:你的区域:你的账号ID:function:LambdaC", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:lambda:你的区域:你的账号ID:function:LambdaA" } } } ] }
Lambda D的资源策略(仅允许Lambda B调用)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::你的账号ID:role/LambdaB的执行角色ARN" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:你的区域:你的账号ID:function:LambdaD", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:lambda:你的区域:你的账号ID:function:LambdaB" } } } ] }
- 替换策略中的
你的账号ID、你的区域为实际值,同时替换执行角色ARN和函数ARN为对应资源的真实ARN。 aws:SourceArn条件确保只有指定的Lambda函数发起的调用才会被允许,避免执行角色被其他资源复用导致的权限泄漏。
步骤2:配置调用方的执行角色权限
确保Lambda A、Lambda B的执行角色仅拥有调用对应目标函数的权限:
Lambda A的执行角色权限
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:你的区域:你的账号ID:function:LambdaC" } ] }
Lambda B的执行角色权限
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:你的区域:你的账号ID:function:LambdaD" } ] }
为什么之前的拒绝策略未生效
- AWS权限评估遵循「先允许、后拒绝」的逻辑,且同一账号内的Lambda默认存在隐含允许规则(只要执行角色有权限即可调用)。
- 单纯添加拒绝所有操作的策略,无法覆盖已存在的允许规则(包括执行角色的权限和账号内隐含允许规则),因此无法生效。
- 正确的做法是通过明确允许合法调用路径,让默认拒绝规则(未匹配到允许规则的请求均被拒绝)生效,从而实现跨调用的权限拦截。
内容的提问来源于stack exchange,提问作者Shatya Kesarwani
相关产品推荐
相关产品推荐

