AWS API Gateway应阻止使用TLS v1

时间:2017-10-03 18:51:38

标签: amazon-web-services aws-api-gateway aws-security-group

参考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协议?

6 个答案:

答案 0 :(得分:7)

为了使具有额外云端分发的Gateway API能够正常工作,我们需要

  1. 从AWS控制台,在API网关下,转到自定义域名并删除映射的条目。
  2. 使用
  3. 创建新的云端分发

    Cloudfront设置

    • Origin Domain Name作为您的Gate API端点https://abcdfefg.execute-api.us-east-1.amazonaws.com
    • 查看器协议策略仅限HTTPS
    • 原始SSL协议为TLSv1.2,TLSv1.1(取消选中TLSv1)
    • 替代域名下添加CNAME条目以引用自定义域名
    • 以及其他一些默认值 完成上述更改后,访问https上的自定义域名将强制执行 Cloudfront 分发中定义的TLS安全设置。

答案 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。

  1. 在API网关中,编辑您的“自定义域名”,添加一个“区域配置”,选择您的证书,然后单击“保存”。注意:对于区域性API,您需要使用与该API相同区域的ACM证书。此处更多信息:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-regional-api-custom-domain-migrate.html

  2. 复制新创建的区域端点的目标域名。 (例如d-abcdefg123.execute-api.us-east-1.amazonaws.com)

  3. 在Route 53或您的DNS提供程序中,将API的映射从Edge Optimized CloudFront目标域名更改为新创建的Regional Endpoint目标域名(即d-abcdefg123.execute-api.us-east -1.amazonaws.com)。

  4. 一旦DNS更改已传播,请编辑“自定义域名”并通过单击x图标删除“边缘优化端点”。然后,这应该使您能够使用API​​的相同CNAME创建新的CloudFront发行版,而不会被AWS阻塞。

  5. 在API网关中,创建一个新的“自定义域名”,其域名为“ regional-api.example.com”,“端点配置”为“ Regional”,然后选择ACM证书。单击保存,然后编辑,然后根据您当前的API添加基本路径映射,然后单击保存。复制新创建的区域端点的目标域名。 (例如d-xyzabcd456.execute-api.us-east-1.amazonaws.com)

  6. 在Route 53或您的DNS提供商中,创建一个新的CNAME记录,将region-api.example.com映射到新创建的Regional Endpoint目标域名。 (即d-xyzabcd456.execute-api.us-east-1.amazonaws.com)

  7. 在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

  1. 在等待CloudFront分配创建完成(平均40分钟)时,在Route 53或您的DNS提供商中创建一个新的CNAME记录,将test-api.example.com映射到新创建的CloudFront域名(例如d123abcdefg.cloudfront.net)

  2. 发行版本创建完成后,将根据test-api.example.com

  3. 对应用程序进行全面测试
  4. 如果测试一切正常,则将新CloudFront的备用域名(CNAME)更新为= api.example.com。 (请注意-这不会使其生效,为此需要在下面的DNS更改)

  5. 一旦分发更新完成(平均40分钟),然后在Route 53或您的DNS Provider中,将api.example.com的CNAME记录映射更新为新创建的CloudFront域名(即d123abcdefg.cloudfront)。净)

  6. 如果一切正常,您现在可以删除Route 53 / DNS CNA test-api.example.com记录,并删除api.example.com API网关自定义域名。

  7. 要获得奖励积分,如果使用Route 53,建议对上述Route 53步骤使用A和AAAA记录别名,而不是CNAME(我已完成)。这样可以稍微降低成本,隐藏一些潜在的CloudFront分发,还可以支持IPv6。

我希望这会有所帮助! :-)

答案 2 :(得分:1)

答案 3 :(得分:0)

您可以在CloudFront分配列表中创建API网关分发。如果您的API网关源具有HTTPS,则可以指定在Cloudfront和API网关之间使用的TLS协议类型。在查看器/客户端和cloudfront之间,您可以在“常规”部分>中指定TLS协议和套件。 CloudFront配置的安全策略。只有在SNI中使用自定义SSL时,此配置才可见。您可以选择:

  1. 使用TLSv1
  2. TLSv1_2016
  3. TLSv1.1_2016
  4. TLSv1.2_2018

答案 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/