AWS API Gateway配置Mutual TLS后环境URL访问认证不生效问题
问题根因
- AWS API Gateway的双向TLS(mTLS)功能仅对绑定的自定义域名入口生效,你访问的Elastic Beanstalk(EB)默认环境域名没有经过API Gateway的自定义域名接入层,自然不会触发mTLS校验逻辑。
- 你当前的访问链路是:直接访问EB环境域名 → 直接打到配置的Nginx负载均衡层,完全绕过了API Gateway的mTLS校验模块,若没有在Nginx侧额外配置mTLS,这条链路本身就没有校验逻辑。
修复方案
方案1:限制直接访问EB环境域名,强制所有流量走API Gateway自定义域名
- 首先在EB的安全组中配置入站规则,仅允许API Gateway的IP段或VPC链路访问,禁止公网直接访问EB环境域名
- 配置API Gateway的集成指向EB的内部访问地址,所有公网请求仅允许通过
app.sandbox.domain.com这个自定义域名访问,此时所有公网请求都会触发mTLS校验。
方案2:如果需要保留EB域名的访问能力,在Nginx层额外配置mTLS校验
如果确实需要允许直接通过EB域名访问,就在当前的Nginx负载均衡配置中添加mTLS校验逻辑,核心配置示例:
server { listen 443 ssl; server_name app-sandbox.us-east-1.elasticbeanstalk.com; # 服务端证书配置 ssl_certificate /path/to/eb-domain/fullchain.pem; ssl_certificate_key /path/to/eb-domain/privkey.pem; # 开启客户端证书校验(mTLS) ssl_verify_client on; # 配置CA根证书,和API Gateway侧用的CA保持一致 ssl_client_certificate /path/to/your/ca-root.pem; # 校验深度按需调整 ssl_verify_depth 2; # 其他原有配置... }
注意:该方案会让EB域名的mTLS校验逻辑和API Gateway侧独立,需要两边同步更新CA证书、校验规则等配置,避免出现校验逻辑不一致的问题。
排查验证方法
- 先通过自定义域名
https://app.sandbox.domain.com访问,确认不带客户端证书时返回401/403错误,携带正确客户端证书时可以正常访问,验证API Gateway侧的mTLS配置正常生效。 - 调整访问链路后,再访问EB域名,确认此时要么无法直接访问,要么会触发和自定义域名一致的mTLS校验即可。
内容的提问来源于stack exchange,提问作者Mondly
相关产品推荐
相关产品推荐

