AWS API Gateway应阻止使用TLS v1

sum*_*n j 9 amazon-web-services aws-api-gateway aws-security-group

请参阅AWS Cloudfront文档,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协议?

sum*_*n j 8

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

  1. 在AWS Console中,在API Gateway下转到Custom Domain Name并删除映射的条目.
  2. 使用创建新的云端分发

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安全设置.


Ali*_*air 7

我刚刚进行了广泛的研究,并且经过大量的试验和错误,我可以记录一下我认为是目前最佳的解决方案。来自suman j的答案是2017年10月的最佳解决方案,但是它确实有局限性,并且自那时以来AWS一直在发展。

那有什么限制呢?

如果您将Lambda与API网关一起使用并删除自定义域名,则手动创建CloudFront分配并关联Lambda函数需要特定的Lambda版本号。也就是说,它不支持别名。这对于CI / CD来说是个问题,因为CI / CD的版本号可能会不断变化。但是,API网关自定义域名基本路径映射确实支持别名,因此最好继续使用它们。

那么AWS是如何发展的呢?

自2017年11月起,API网关支持在自定义域名中创建区域端点。这些端点不会创建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图标删除Edge Optimized Endpoint。然后,这应该使您能够使用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映射到新创建的Region 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
Run Code Online (Sandbox Code Playgroud)

默认的缓存行为设置:(这些值是我调用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?? 
Run Code Online (Sandbox Code Playgroud)

分布设置:

  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)?   
Run Code Online (Sandbox Code Playgroud)

支持的HTTP版本= HTTP / 2,HTTP / 1.1,HTTP / 1.0

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

  2. 发行版本创建完成后,针对test-api.example.com全面测试您的应用程序吗?

  3. 如果测试一切正常,则将新CloudFront的备用域名(CNAME)更新为= api.example.com。(注意-这不会使其“生效”,为此需要进行以下DNS更改)?

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

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

  6. 对于奖励积分,如果使用Route 53,建议对上面的Route 53步骤使用A和AAAA记录别名而不是CNAME(我已完成)。这样可以稍微降低成本,在某种程度上隐藏基础的CloudFront分发,还可以支持IPv6。

我希望这有帮助!:-)


Dan*_*iel 2

对于看到此内容的任何人,您现在可以在 API Gateway 中为自定义域设置最低 TLS 版本 1.2:https ://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-custom-domain-tls-version .html