参考AWS Cloudfront Documentation,AWS API Gateway支持TLS v1.0,v1.1,v1.2。
但我想将加密协议限制为TLS v1.1和v1.2以用于我的Gateway API。我在哪里配置? 我没有看到我的API的任何cloudfront分发。网关资源页面没有指定安全协议的选项。
我的API使用自定义域在生产中运行了2年。 知道如何仅在API网关中将API限制为TLS V1.1和V1.2协议?
答案 0 :(得分:7)
为了使具有额外云端分发的Gateway API能够正常工作,我们需要
Cloudfront设置
答案 1 :(得分:7)
我刚刚进行了广泛的研究,并且经过大量的试验和错误,我可以记录一下我认为是目前针对此问题的最佳解决方案。来自suman j的答案是2017年10月的最佳解决方案,但是它确实有局限性,并且自那时以来AWS一直在发展。
那么限制是什么?
如果您将Lambda与API网关一起使用并删除自定义域名,则手动创建CloudFront发行版并关联Lambda函数需要特定的Lambda版本号。也就是说,它不支持别名。这对于CI / CD来说是个问题,因为CI / CD的版本号可能会不断变化。但是,API网关自定义域名基本路径映射确实支持别名,因此最好继续使用它们。
AWS如何发展?
自2017年11月起,API Gateway支持在自定义域名中创建区域端点。这些端点不会创建CloudFront分发,因此可以优化将自己的CloudFront分发置于它们前面的策略,从而避免使用TLS v1.0。
那我该如何设置呢?
我过去(通过控制台)执行此操作的步骤如下。请注意,您可能需要更改某些设置以支持您的特定应用程序。就本文档而言,假设您的api名为api.example.com。
在API网关中,编辑您的“自定义域名”,添加一个“区域配置”,选择您的证书,然后单击“保存”。注意:对于区域性API,您需要使用与该API相同区域的ACM证书。此处更多信息:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-regional-api-custom-domain-migrate.html
复制新创建的区域端点的目标域名。 (例如d-abcdefg123.execute-api.us-east-1.amazonaws.com)
在Route 53或您的DNS提供程序中,将API的映射从Edge Optimized CloudFront目标域名更改为新创建的Regional Endpoint目标域名(即d-abcdefg123.execute-api.us-east -1.amazonaws.com)。
一旦DNS更改已传播,请编辑“自定义域名”并通过单击x图标删除“边缘优化端点”。然后,这应该使您能够使用API的相同CNAME创建新的CloudFront发行版,而不会被AWS阻塞。
在API网关中,创建一个新的“自定义域名”,其域名为“ regional-api.example.com”,“端点配置”为“ Regional”,然后选择ACM证书。单击保存,然后编辑,然后根据您当前的API添加基本路径映射,然后单击保存。复制新创建的区域端点的目标域名。 (例如d-xyzabcd456.execute-api.us-east-1.amazonaws.com)
在Route 53或您的DNS提供商中,创建一个新的CNAME记录,将region-api.example.com映射到新创建的Regional Endpoint目标域名。 (即d-xyzabcd456.execute-api.us-east-1.amazonaws.com)
在CloudFront中使用以下设置创建新的分发:
原始设置:
Origin Domain Name = regional-api.example.com
After entering the above the following hidden fields should then be displayed:
Origin SSL Protocols = TLSv1.2 & TLSv1.1
Origin Protocol Policy = HTTPS Only
默认缓存行为设置: (这些值是调用API的应用正常运行所需要的值)
Viewer Protocol Policy = Redirect HTTP to HTTPS
Allowed HTTP Methods = GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
Cached HTTP Methods = OPTIONS
Cache Based on Selected Request Headers = Whitelist
Whitelist Headers = Authorization
Object Caching = Customize
Minimum TTL = 0
Maximum TTL = 0
Default TTL = 0
Forward Cookies = All
Query String Forwarding and Caching = Forward all, cache based on all
Smooth Streaming = No
Restrict Viewer Access (Use Signed URLs or Signed Cookies) = No
Compress Objects Automatically = No
Lambda Function Associations = None
分布设置:
Price Class = Use All Edge Locations
AWS WAF Web ACL = None
Alternate Domain Names (CNAMEs) = test-api.example.com
SSL Certificate = Custom SSL Certificate (example.com)
Custom SSL Client Support = Only Clients that Support Server Name Indication (SNI)
Security Policy = TLSv1.1_2016 (recommended)
支持的HTTP版本= HTTP / 2,HTTP / 1.1,HTTP / 1.0
在等待CloudFront分配创建完成(平均40分钟)时,在Route 53或您的DNS提供商中创建一个新的CNAME记录,将test-api.example.com映射到新创建的CloudFront域名(例如d123abcdefg.cloudfront.net)
发行版本创建完成后,将根据test-api.example.com
如果测试一切正常,则将新CloudFront的备用域名(CNAME)更新为= api.example.com。 (请注意-这不会使其生效,为此需要在下面的DNS更改)
一旦分发更新完成(平均40分钟),然后在Route 53或您的DNS Provider中,将api.example.com的CNAME记录映射更新为新创建的CloudFront域名(即d123abcdefg.cloudfront)。净)
如果一切正常,您现在可以删除Route 53 / DNS CNA test-api.example.com记录,并删除api.example.com API网关自定义域名。
要获得奖励积分,如果使用Route 53,建议对上述Route 53步骤使用A和AAAA记录别名,而不是CNAME(我已完成)。这样可以稍微降低成本,隐藏一些潜在的CloudFront分发,还可以支持IPv6。
我希望这会有所帮助! :-)
答案 2 :(得分:1)
AWS宣布,现在可以针对边缘优化的API网关实现对其进行配置:
答案 3 :(得分:0)
您可以在CloudFront分配列表中创建API网关分发。如果您的API网关源具有HTTPS,则可以指定在Cloudfront和API网关之间使用的TLS协议类型。在查看器/客户端和cloudfront之间,您可以在“常规”部分>中指定TLS协议和套件。 CloudFront配置的安全策略。只有在SNI中使用自定义SSL时,此配置才可见。您可以选择:
答案 4 :(得分:0)
对于任何看到此消息的人,您现在都可以在API网关中为您的自定义域设置最低TLS版本1.2:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-custom-domain-tls-version.html
答案 5 :(得分:0)
截至目前,您可以通过为自定义域指定安全策略来强制实施最低 TLS 版本。支持的安全策略为 TLS1.0 和 TLS 1.2
TLS 版本 API 网关安全策略支持的最低版本为 TLSv1.0
通过自定义域名推荐的安全策略是 TLSv1.2
为了更好地控制 TLS 版本,请在您的账户中创建 CloudFront 分配并使用区域 API 网关终端节点作为源。
最低 TLS 版本 1.3 只能通过自定义 CloudFront 分配实现。
参考:https://cloudnamaste.com/minimum-tls-version-for-api-gateway/