AWS API Gateway 自定义域的 Cname

Posted

技术标签:

【中文标题】AWS API Gateway 自定义域的 Cname【英文标题】:Cname for AWS API Gateway custom domain 【发布时间】:2018-12-26 16:17:52 【问题描述】:

这个概念很简单。

通过 AWS API Gateway 创建一个指向蓝/绿部署通道的 Cname 开关。 API 有两个阶段,将蓝色和绿色映射回环境变量,然后再映射回与其专用版本关联的 Lambda 别名。因此,现在有两个单独的通道用于进行部署。所有这些都可以正常工作。

当在 Route53 中创建 Cname 以指向 API 网关的蓝色或绿色自定义域时,就会出现问题。 SSL 证书保存在 AWS Certificate Manager 中。

当我们通过 Cname 调用蓝色端点时,我们会收到 SSL 错误

curl -Il -H "Host:blue-api.example.com" -H "x-api-key:xxxxxxxxx" 
-X GET https://cname-api.example.com/questions/health

curl: (35) SSL 对等握手失败,服务器很可能需要客户端证书才能连接

而当我们直接调用自定义域时它可以工作

curl -Il -H "Host:blue-api.example.com" -H "x-api-key:xxxxxxxxx" 
-X GET https://blue-api.example.com/questions/health

HTTP/1.1 200 正常

任何指针或建议将不胜感激?

对第一条评论的回应

感谢 Michael - 是的,我们已将 SSL 证书从 eu-west-1 导出到 us-east-1 的 AWS 证书管理器中,因为我们正在运行边缘优化的自定义域名。 API Gateway 生成的 Cloudfront 与 costom 域和 cname 一起托管在 us-east-1 中,但根域托管在 eu-west-1 中。可能是这个问题?

我们正在尝试围绕启用以下标头进行进一步测试,并将报告回来 -

ResponseParameters:
method.response.header.Access-Control-Allow-Headers: true
method.response.header.Access-Control-Allow-Methods: true
method.response.header.Access-Control-Allow-Origin: true

我意识到我们可以使用一个自定义域,并使用映射到路径的阶段来划分通道,但上述是首选解决方案。

我们还向 AWS 开了一张票,因为这也让他们感到困惑,并已上报给他们的内部服务团队。

:)

【问题讨论】:

您不能随意将 CNAME 指向 API 网关端点,这听起来像是您正在做的事情。您指向的端点必须是配置为在 Host 标头和 SNI 中预期该值的 one 端点。目前尚不清楚您是如何(或是否)尝试将自定义主机名与 API Gateway 中的部署相关联,或将 ACM 证书与其关联。 【参考方案1】:

因此,在与 Amazon Support 反复讨论数周后,我们得到了一个可行的解决方案,但可能不像早期解决方案中提到的那样最具成本效益。

工作流程 -

1.创建 API GW,每个阶段都有自己的自定义域。

例如blue-stage > blue-api.example.com 和 green-stage > green-api.example.com

2.然后在创建 API GW 的同一 AWS 区域中创建一个 Cname。 例如。 cname-api.example.com

3.使用与 Cname (cname-api.example.com) 相同的 DNS 条目(重复)创建一个 Web Edge Cloudfront 实例,并将此 Cloudfront 实例指向任意 S3 存储桶。

现在提出请求

curl -Il -H "Host:blue-api.example.com" -H "x-api-key:xxxxxxxxx" 
-X GET https://cname-api.example.com/questions/health

HTTP/1.1 200 正常

是的,这对于我们需要实现的目标来说太过分了,也不是最具成本效益的,我们也没有做 KISS(保持简单愚蠢)。所以是的 - 很高兴听到其他人如何构建类似的基础设施!

【讨论】:

以上是关于AWS API Gateway 自定义域的 Cname的主要内容,如果未能解决你的问题,请参考以下文章

AWS API Gateway 自定义域的 Cname

AWS API Gateway 自定义授权方有用吗?

Terraformed AWS API Gateway 自定义域名抛出 403 Forbidden

AWS API Gateway 自定义授权方给予例外

API 创新不会触发 AWS API Gateway 的基于自定义请求的 lambda 授权方

如何为 AWS API Gateway 自定义授权方配置 CORS?