如何限制AWS Lambda仅允许Bitbucket Webhook访问?
限制AWS Lambda仅接受Bitbucket Webhook调用的两种解决方案
一、为Lambda Function URL配置访问限制
Lambda Function URL可通过资源策略+请求签名验证实现精准访问控制,步骤如下:
添加Function URL资源策略
给目标Lambda函数绑定资源策略,先通过Bitbucket官方出口IP范围做基础限制:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME", "Condition": { "StringLike": { "aws:SourceIp": [ "18.205.93.0/24", "18.234.32.0/24", "13.52.5.0/24", "13.53.144.0/24" ] } } } ] }注:上述IP为Bitbucket公开的Webhook出口IP段,可根据官方最新信息更新。
在Lambda代码中验证Bitbucket签名
仅靠IP限制存在风险,必须验证请求签名确保来源真实:- 从Bitbucket Webhook设置中获取专属Secret
- 在Lambda代码里,提取请求头
X-Hub-Signature-256,用HMAC-SHA256算法对请求体和Secret加密,对比加密结果与请求头签名是否一致,不一致则直接返回403拒绝请求。
二、修复API Gateway资源策略问题
你之前依赖aws:Referer的配置无效,核心原因是Bitbucket Webhook请求不会携带符合规则的Referer头。正确配置方式如下:
更新API Gateway资源策略
替换为基于Bitbucket出口IP的限制,同时确保Resource路径覆盖完整调用路径:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "GATEWAY_API_ARN/*/*/*", "Condition": { "StringLike": { "aws:SourceIp": [ "18.205.93.0/24", "18.234.32.0/24", "13.52.5.0/24", "13.53.144.0/24" ] } } } ] }注意:Resource字段需包含API Gateway的完整路径通配符(如
/*/*/*),仅写ARN前缀会导致权限范围不匹配。添加签名验证逻辑
在API Gateway集成的Lambda代码中,加入和Function URL一致的Bitbucket签名验证步骤,彻底杜绝非法请求。
排查建议:可先临时移除资源策略,测试Bitbucket Webhook能否正常调用,确认基础连通性后再逐步添加限制,排除API Gateway阶段部署、Lambda权限配置等其他潜在问题。
内容的提问来源于stack exchange,提问作者James Arnold
相关产品推荐
相关产品推荐

