AWS API 网关应阻止使用 TLS v1
AWS API Gateway should prevent use of TLS v1
参考AWS Cloudfront Documentation,AWS API网关支持TLS v1.0、v1.1、v1.2。
但我想将网关的加密协议限制为 TLS v1.1 和 v1.2 API。我在哪里配置这个?
我的 API 没有看到任何云端分布。网关资源页面没有指定安全协议的选项。
我的 API 在过去 2 年中使用自定义域 运行 在生产中。
知道如何将我的 API 限制为仅在 API 网关中使用 TLS V1.1 和 V1.2 协议吗?
您可以在 CloudFront 分发列表中创建 API 网关分发。如果您的 API 网关源具有 HTTPS,您可以指定在云端和 API 网关之间使用哪种类型的 TLS 协议。在 viewer/client 和 cloudfront 之间,您可以在 CloudFront 配置的常规部分 > 安全策略中指定 TLS 协议和套件。此配置仅在您将自定义 SSL 与 SNI 结合使用时可见。您可以选择:
- TLSv1
- TLSv1_2016
- TLSv1.1_2016
- TLSv1.2_2018
为了让网关 API 和额外的云前端分发正常工作,我们需要
- 从 AWS 控制台,在 API 网关下转到 自定义域名 并删除映射的条目。
- 使用
创建一个新的云端分布
云端设置
- 源域名作为你的入口API端点https://abcdfefg.execute-api.us-east-1.amazonaws.com
- 仅 HTTPS 的查看器协议策略
- 源 SSL 协议为 TLSv1.2、TLSv1.1(取消选中 TLSv1)
- 在备用域名下添加 CNAME 条目以引用自定义域名
- 和其他一些默认值
完成上述更改后,访问 https 上的自定义域名将强制执行 Cloudfront distribution.
中定义的 TLS 安全设置。
我刚刚一直在广泛地研究这个问题,并且通过大量的试验和错误,我可以记录我认为是当前最佳解决方案。 suman j 的回答是 2017 年 10 月的最佳解决方案,但它确实有局限性,而且 AWS 从那时起也在不断发展。
那么限制是什么?
如果您将 Lambda 与 API 网关一起使用并删除自定义域名,则手动创建 CloudFront 分配并关联 Lambda 函数需要特定的 Lambda 版本号。也就是说,它不支持别名。这对于 CI/CD 是有问题的,因为版本号会不断变化。但是,API 网关自定义域名基本路径映射支持别名,因此最好继续使用这些别名。
那么 AWS 是如何发展的?
截至 2017 年 11 月,API Gateway 支持在自定义域名中创建区域端点。这些端点不创建 CloudFront 分配,因此优化了将您自己的 CloudFront 分配放在它们前面的策略,以防止使用 TLS v1.0。
那么我该如何设置呢?
我用来执行此操作(通过控制台)的步骤如下。请注意,您可能需要更改某些设置以支持您的特定应用程序。出于本文档的目的,假设您的 api 被命名为 api.example.com.
在 API 网关中,编辑您的自定义域名,添加区域配置,select 您的证书,然后单击保存。注意:对于区域 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 的映射从边缘优化的 CloudFront 目标域名更改为新创建的区域端点目标域名(即 d-abcdefg123.execute-api.us-东-1.amazonaws.com)。
传播 DNS 更改后,编辑自定义域名并通过单击 x 图标删除边缘优化端点。然后,这应该使您能够使用与 API 相同的 CNAME 创建一个新的 CloudFront 分配,而不会被 AWS 阻止。
在 API 网关中,创建一个新的自定义域名,域名 = regional-api.example.com,端点配置 = Regional 和 select ACM 证书。单击保存,然后根据当前 API 编辑并添加基本路径映射,然后单击保存。复制新创建的区域端点的目标域名。 (例如d-xyzabcd456.execute-api.us-east-1.amazonaws.com)
在 Route 53 或您的 DNS 提供商中,创建一个新的 CNAME 记录映射区域-api.example.com 到新创建的区域端点目标域名。 (即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 提供商中,将 api.example.com 的 CNAME 记录映射更新为新创建的 CloudFront 域名(即d123abcdefg.cloudfront.net)
如果一切正常,您现在可以删除 Route 53 / DNS CNA test-api.example.com 记录并删除 api.example.com API 网关自定义域名.
对于奖励积分,如果使用 Route 53,建议使用 A 和 AAAA 记录别名,而不是上面 Route 53 步骤(我已经完成)的 CNAME。这会略微降低成本,在一定程度上隐藏底层 CloudFront 分布并启用 IPv6 支持。
希望对您有所帮助! :-)
AWS 已宣布现在可以针对 edge-optimised API 网关实施进行配置:
对于看到此消息的任何人,您现在可以在 API 网关中为您的自定义域设置最低 TLS 版本 1.2:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-custom-domain-tls-version.html
截至目前,您可以通过为您的自定义域指定安全策略来实施最低 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/
参考AWS Cloudfront Documentation,AWS API网关支持TLS v1.0、v1.1、v1.2。
但我想将网关的加密协议限制为 TLS v1.1 和 v1.2 API。我在哪里配置这个? 我的 API 没有看到任何云端分布。网关资源页面没有指定安全协议的选项。
我的 API 在过去 2 年中使用自定义域 运行 在生产中。 知道如何将我的 API 限制为仅在 API 网关中使用 TLS V1.1 和 V1.2 协议吗?
您可以在 CloudFront 分发列表中创建 API 网关分发。如果您的 API 网关源具有 HTTPS,您可以指定在云端和 API 网关之间使用哪种类型的 TLS 协议。在 viewer/client 和 cloudfront 之间,您可以在 CloudFront 配置的常规部分 > 安全策略中指定 TLS 协议和套件。此配置仅在您将自定义 SSL 与 SNI 结合使用时可见。您可以选择:
- TLSv1
- TLSv1_2016
- TLSv1.1_2016
- TLSv1.2_2018
为了让网关 API 和额外的云前端分发正常工作,我们需要
- 从 AWS 控制台,在 API 网关下转到 自定义域名 并删除映射的条目。
- 使用 创建一个新的云端分布
云端设置
- 源域名作为你的入口API端点https://abcdfefg.execute-api.us-east-1.amazonaws.com
- 仅 HTTPS 的查看器协议策略
- 源 SSL 协议为 TLSv1.2、TLSv1.1(取消选中 TLSv1)
- 在备用域名下添加 CNAME 条目以引用自定义域名
- 和其他一些默认值 完成上述更改后,访问 https 上的自定义域名将强制执行 Cloudfront distribution. 中定义的 TLS 安全设置。
我刚刚一直在广泛地研究这个问题,并且通过大量的试验和错误,我可以记录我认为是当前最佳解决方案。 suman j 的回答是 2017 年 10 月的最佳解决方案,但它确实有局限性,而且 AWS 从那时起也在不断发展。
那么限制是什么?
如果您将 Lambda 与 API 网关一起使用并删除自定义域名,则手动创建 CloudFront 分配并关联 Lambda 函数需要特定的 Lambda 版本号。也就是说,它不支持别名。这对于 CI/CD 是有问题的,因为版本号会不断变化。但是,API 网关自定义域名基本路径映射支持别名,因此最好继续使用这些别名。
那么 AWS 是如何发展的?
截至 2017 年 11 月,API Gateway 支持在自定义域名中创建区域端点。这些端点不创建 CloudFront 分配,因此优化了将您自己的 CloudFront 分配放在它们前面的策略,以防止使用 TLS v1.0。
那么我该如何设置呢?
我用来执行此操作(通过控制台)的步骤如下。请注意,您可能需要更改某些设置以支持您的特定应用程序。出于本文档的目的,假设您的 api 被命名为 api.example.com.
在 API 网关中,编辑您的自定义域名,添加区域配置,select 您的证书,然后单击保存。注意:对于区域 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 的映射从边缘优化的 CloudFront 目标域名更改为新创建的区域端点目标域名(即 d-abcdefg123.execute-api.us-东-1.amazonaws.com)。
传播 DNS 更改后,编辑自定义域名并通过单击 x 图标删除边缘优化端点。然后,这应该使您能够使用与 API 相同的 CNAME 创建一个新的 CloudFront 分配,而不会被 AWS 阻止。
在 API 网关中,创建一个新的自定义域名,域名 = regional-api.example.com,端点配置 = Regional 和 select ACM 证书。单击保存,然后根据当前 API 编辑并添加基本路径映射,然后单击保存。复制新创建的区域端点的目标域名。 (例如d-xyzabcd456.execute-api.us-east-1.amazonaws.com)
在 Route 53 或您的 DNS 提供商中,创建一个新的 CNAME 记录映射区域-api.example.com 到新创建的区域端点目标域名。 (即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 提供商中,将 api.example.com 的 CNAME 记录映射更新为新创建的 CloudFront 域名(即d123abcdefg.cloudfront.net)
如果一切正常,您现在可以删除 Route 53 / DNS CNA test-api.example.com 记录并删除 api.example.com API 网关自定义域名.
对于奖励积分,如果使用 Route 53,建议使用 A 和 AAAA 记录别名,而不是上面 Route 53 步骤(我已经完成)的 CNAME。这会略微降低成本,在一定程度上隐藏底层 CloudFront 分布并启用 IPv6 支持。
希望对您有所帮助! :-)
AWS 已宣布现在可以针对 edge-optimised API 网关实施进行配置:
对于看到此消息的任何人,您现在可以在 API 网关中为您的自定义域设置最低 TLS 版本 1.2:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-custom-domain-tls-version.html
截至目前,您可以通过为您的自定义域指定安全策略来实施最低 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/