如何为调用Lambda函数的AWS API Gateway添加IP白名单
Hey there! 我来给你梳理几个在AWS API Gateway上实现IP白名单的实用方案,你可以根据自己的场景挑最合适的:
方法1:使用AWS WAF(最推荐,管理省心还能兼顾安全)
这是生产环境最常用的方式,不仅能做IP白名单,还能顺带防护SQL注入、XSS这些常见攻击:
- 打开AWS WAF控制台,创建一个Web ACL,选择和你的API Gateway同区域
- 在Web ACL里添加一条IP匹配规则:动作选「允许」,然后把需要放行的IP地址/网段填进去(支持CIDR格式,比如
192.168.1.0/24) - 一定要加一条默认规则:动作设为「阻止」,这样所有不在白名单里的请求都会被拦截
- 最后回到API Gateway控制台,找到你的API,在「Web ACL」选项里关联刚才创建的Web ACL就行
方法2:使用API Gateway资源策略(适合简单场景,无额外成本)
如果你的需求很简单,不想额外启用WAF,可以直接用API Gateway自带的资源策略:
- 进入API Gateway控制台,选中你的API,切换到「资源策略」页面
- 替换成类似下面的策略(注意把占位符改成你自己的信息):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:us-east-1:123456789012:abc123/*/*/*", "Condition": { "IpAddress": { "aws:SourceIp": [ "192.168.1.1/32", "10.0.0.0/24" ] } } }, { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:us-east-1:123456789012:abc123/*/*/*" } ] }
- 关键说明:
Resource要替换成你API的ARN(可以在API Gateway的「设置」页面找到)aws:SourceIp数组里填你允许的IP或CIDR段- 策略顺序很重要:先允许符合条件的请求,再默认拒绝所有,这样逻辑才正确
- 保存策略后,记得重新部署你的API,修改才会生效
方法3:使用Lambda授权器(适合需要自定义逻辑的场景)
如果除了IP白名单,你还需要结合其他验证逻辑(比如同时校验API密钥),可以用Lambda授权器:
- 创建一个Lambda函数,在函数代码里获取请求的源IP(从
event.requestContext.identity.sourceIp字段读取) - 把允许的IP列表存在Lambda的环境变量里,或者写在代码里(推荐用环境变量,方便后续修改)
- 函数逻辑:判断请求IP是否在白名单内,在的话返回允许的IAM策略,不在则返回拒绝策略
- 回到API Gateway,给需要保护的API方法配置Lambda授权器:选择刚才创建的函数,身份来源选「请求上下文」(不需要额外的身份参数)
- 部署API后,只有白名单内的IP能通过授权调用你的API
几个注意点
- 如果你的API是私有API(绑定了VPC端点),资源策略里要改用
aws:VpcSourceIp而不是aws:SourceIp,因为此时SourceIp是VPC端点的IP,不是客户端真实IP - WAF会产生额外费用,但功能更全面,适合生产环境;资源策略完全免费,适合测试或简单场景
- 不管用哪种方法,都建议先测试一下:用不在白名单里的IP发起请求,确认会被拦截,再用白名单里的IP测试,确保能正常调用
内容的提问来源于stack exchange,提问作者ABCD
相关产品推荐
相关产品推荐

