Jie*_*eng 9 https amazon-web-services node.js amazon-elb aws-api-gateway
我的设置目前看起来像:
API Gateway --- ALB --- ECS Cluster --- NodeJS Applications
|
-- Lambda
Run Code Online (Sandbox Code Playgroud)
我还在API网关上设置了自定义域名(更新:我使用了默认的API网关链接并遇到了同样的问题,我认为这不是自定义域名问题)
当ECS集群中的1个服务通过API网关调用另一个服务时,我得到了
主机名/ IP与证书的altnames不匹配:"Host:someid.ap-southeast-1.elb.amazonaws.com.不在证书的altnames中:DNS:*.execute-api.ap-southeast-1.amazonaws. COM"
为什么是这样?
UPDATE
我注意到当我启动调用API网关的本地服务器时,我收到类似的错误:
{
"error": "Hostname/IP doesn't match certificate's altnames: \"Host: localhost. is not in the cert's altnames: DNS:*.execute-api.ap-southeast-1.amazonaws.com\""
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试禁用HTTPS检查:
const response = await axios({
method: req.method,
url,
baseURL,
params: req.params,
query: req.query,
data: body || req.body,
headers: req.headers,
httpsAgent: new https.Agent({
: false // <<=== HERE!
})
})
Run Code Online (Sandbox Code Playgroud)
我得到了这个......
{
"message": "Forbidden"
}
Run Code Online (Sandbox Code Playgroud)
当我直接在Postman上调用底层API网关URL时,它工作......不知何故,它让我想起了CORS,服务器似乎阻止了我的服务器localhost或ECS/ELB访问我的API网关?
它可能很令人困惑,所以我尝试的总结:
rejectUnauthorized: false,但API网关返回HTTP 403有多种变通方法会引入安全隐患,而不是提供适当的解决方案。为了修复它,您需要向DNS添加一个CNAME条目someid.ap-southeast-1.elb.amazonaws.com.(该条目可能已经存在)以及一个 SSL 证书,就像 AWS 文档中关于添加备用域名的描述一样。这可以通过CloudFront控制台和ACM来完成。关键是,对于当前证书,该备用(内部!!)主机名永远不会与证书匹配,该证书只能覆盖单个 IP - 因此它更像是一个基础设施问题,而不是一个代码问题.
再次查看它时......而不是扩展面向公众的接口的 SSL 证书 - 根据本指南,更好的解决方案可能是使用单独的 SSL 证书,用于 API 网关和 ALB 之间的通信;在这种情况下,甚至可以进行自签名,因为任何外部客户端都不会访问该证书。
至于说HTTP403该文档阅读:
您配置了一个 AWS WAF Web 访问控制列表 (Web ACL) 来监控对您的 Application Load Balancer 的请求,并且它阻止了一个请求。
我希望这有助于设置端到端加密,而只有 API 网关的一个面向公众的接口需要 CA 证书,对于任何内部通信,自签名就足够了。
这篇文章是关于ELB和之间的区别ALB- 虽然它可能值得考虑,如果确实为给定场景选择了最合适的负载平衡器。如果不需要基于内容的路由,减少无用的复杂性可能会有所帮助。这将消除定义路由规则的需要......你也应该检查一次,以防万一ALB。我的意思是,这些问题只显示了基本场景和一些失败的代码,而不是路由规则。
| 归档时间: |
|
| 查看次数: |
1705 次 |
| 最近记录: |