如何让Route53通过API密钥认证访问API Gateway的健康检查端点?
解决方案:限制Route53健康检查端点的公众访问
Route53本身不支持在健康检查请求中携带API密钥,所以直接给端点加API密钥让Route53认证的方式走不通。不过可以通过两种可靠方法实现「仅允许Route53访问健康检查端点、禁止公众访问」的需求:
方法1:用API Gateway资源策略限制访问IP
Route53的健康检查请求来自AWS公布的固定IP段,你可以通过API Gateway的资源策略,仅开放这些IP段访问你的健康检查端点:
- 获取Route53健康检查的IP范围(AWS会定期维护更新这些公开IP段)
- 编写资源策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:你的区域:你的账号ID:你的API ID/阶段名/HTTP方法/健康检查路径", "Condition": { "IpAddress": { "aws:SourceIp": [ "Route53健康检查IP段1", "Route53健康检查IP段2" ] } } }, { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:你的区域:你的账号ID:你的API ID/阶段名/HTTP方法/健康检查路径" } ] }
- 将策略附加到API Gateway或指定的健康检查资源上,完成后只有Route53的健康检查IP能访问该端点,其他公众请求会被直接拒绝。
方法2:通过AWS WAF限制访问
如果你的API Gateway已启用WAF,可以创建针对性规则:
- 添加「IP匹配」条件,仅允许Route53健康检查的IP段通过
- 将规则关联到健康检查端点对应的API Gateway资源
- 不符合条件的公众请求会被WAF拦截,实现访问限制
补充说明
API密钥方案不可行的核心原因:Route53的健康检查配置界面没有提供添加自定义请求头(比如x-api-key)的选项,无法携带API密钥完成认证,因此IP限制是更直接有效的替代方案。
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

