如何限制AWS Lambda仅允许指定Lambda函数调用
限制AWS Lambda仅允许指定Lambda函数调用
核心思路
通过Lambda的资源策略精准控制调用权限,只放行指定Lambda的调用请求,拒绝所有其他来源的调用。
操作步骤
获取允许调用的Lambda的ARN
登录AWS控制台,打开允许发起调用的Lambda函数页面,在「配置 > 常规配置」中复制它的ARN,格式类似:arn:aws:lambda:us-east-1:123456789012:function:allowed-invoker-lambda编辑被保护Lambda的资源策略
- 进入需要保护的Lambda函数控制台,切换到「配置 > 权限」标签
- 找到「资源策略」模块,点击「添加权限」
- 在弹窗中按以下配置填写:
- 实体类型:选择「AWS账户」,输入自己的AWS账号ID(同账号下的Lambda用这个)
- 操作:勾选
lambda:InvokeFunction - 资源:保持默认的当前Lambda ARN即可
- 条件:点击「添加条件」,选择
ArnEquals,条件键选aws:SourceArn,值填入第一步复制的允许调用的Lambda的ARN
- 保存配置,此时系统会自动生成对应的资源策略。你也可以直接替换成以下自定义策略(记得替换占位符):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:protected-lambda", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:lambda:us-east-1:123456789012:function:allowed-invoker-lambda" } } }, { "Effect": "Deny", "Principal": "*", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:protected-lambda", "Condition": { "ArnNotEquals": { "aws:SourceArn": "arn:aws:lambda:us-east-1:123456789012:function:allowed-invoker-lambda" } } } ] }
验证权限配置
- 用其他Lambda、本地AWS CLI或其他AWS资源尝试调用被保护的Lambda,应该会返回
AccessDeniedException错误 - 用指定的Lambda函数发起调用,确认能正常执行
- 用其他Lambda、本地AWS CLI或其他AWS资源尝试调用被保护的Lambda,应该会返回
注意事项
- 如果两个Lambda属于不同AWS账号,需要将
Principal设置为对方账号的ARN,同时确保允许调用的Lambda的IAM角色拥有lambda:InvokeFunction权限 - 资源策略的优先级高于IAM角色权限,只要资源策略限制了,即使IAM角色有调用权限也无法执行
内容的提问来源于stack exchange,提问作者Shatya Kesarwani
相关产品推荐
相关产品推荐

