跳转到主要内容
Chinese, Simplified

无服务器架构正变得越来越流行,而亚马逊的API网关服务是AWS上许多无服务器部署的关键因素。 目前,API网关仅支持公共CloudFront端点,并且保护具有高端WAF保护的API网关可能看起来是一项艰巨的任务。 在这篇博文中,我们将解释如何使用SecureSphere WAF保护示例API网关应用程序。
虽然此处的重点是AWS,但请记住,以下内容也可用于保护其他公共端点或API网关供应商。

示例API网关应用程序 - 入门


常见的Amazon API Gateway部署可能如下所示(图1):

deployment pattern using AWS API Gateway - 1

图1:使用AWS API Gateway的典型应用程序部署模式
此示例应用程序完全无服务器,并使用AWS服务进行扩展,自动配置,授权,日志记录等。 有很好的在线教程可以教你如何部署这样的应用程序(使用现成的CloudFormation模板)。
部署API后,API网关会创建一个具有面向公众的URL的阶段(参见图2):

AWS API Gateway Console - 2

图2:AWS API Gateway Console显示运行“Deploy API”后创建的公共端点
此阶段实际上是隐藏的CloudFront分配。 接下来,您需要创建一个正确的CloudFront分配,以便Imperva SecureSphere可以在没有客户端SNI的情况下与之通信(图3):

AWS CloudFront Console - 3

图3:AWS CloudFront控制台,其新分发转发到我们的API网关端点
您不希望客户端应用程序或用户在没有保护的情况下直接访问此端点,因此下一步是在AWS上设置SecureSphere堆栈。

设置SecureSphere AWS公共端点堆栈


目标是使用SecureSphere WAF和AWS实现以下架构(图4):

SecureSphere WAF deployment architecture to protect AWS API Gateway - 4

图4:SecureSphere WAF部署体系结构,用于保护AWS API Gateway流量
在大多数情况下,AWS上的SecureSphere部署将保护与SecureSphere堆栈或对等VPC位于同一VPC中的Web端点。 由于SecureSphere支持反向代理体系结构,因此它也可以保护公共端点。 要了解有关如何在AWS中部署SecureSphere的更多信息,请参阅此博客文章。
最后,部署的堆栈应如下所示(图5):

architecture diagram of SecureSphere WAF deployment on AWS - 5

图5:AWS上SecureSphere WAF部署的详细架构图,用于保护公共端点
架构摘要:

  1. 公共端点成为外部负载均衡器DNS名称(需要将外部主机名的DNS附件添加到ELB主机名)。
  2. WAF网关将外部主机名(例如www.mycompany.com)重写到AWS API网关端点(fznty25z54.execute-api.us-east-1.amazonaws.com)。
  3. WAF网关处理请求并将它们路由到CloudFront域名(d2we3m806cjgh0.cloudfront.net)。
  4. VPC出口点通过NAT网关弹性IP完成(也可以使用代理或NAT实例)。这些是静态IP,可用于限制对AWS API Gateway的访问。
  5. 如果SecureSphere Management Server位于公有子网中并可从Internet访问,则它应具有严格的安全组,以限制可以访问它的IP地址。
  6. 建议SecureSphere堆栈和AWS API Gateway位于同一区域,以获得最佳延迟性能。

在SecureSphere中,您应该有一个URL重写规则,如下所示(图6):

SecureSphere URL Rewrite Rule - 6

图6:SecureSphere URL重写规则
API网关通过其生成的主机名(fznty25z54.execute-api.us-east-1.amazonaws.com)了解应用程序。 此URL重写规则将外部主机名(www.company.com)转换为API网关主机名。
SecureSphere反向代理配置应如下所示(图7):

SecureSphere Reverse Proxy rules - 7

图7:SecureSphere反向代理规则。 点击放大图片。
首先,URL重写规则(apig)生效,然后将API网关流量(Host = fznty25z54.execute-api.us-east-1.amazonaws.com)路由到CloudFront端点(Internal Hostname = d2we3m806cjgh0.cloudfront.net)。

限制对API网关的访问


此时,您的公共域名(www.company.com)将通过SecureSphere WAF。 但是,您仍然可以绕过SecureSphere WAF的公共API网关端点。 AWS API Gateway不支持安全组来限制IP访问,但您可以使用其授权功能执行变通方法。
通过SecureSphere的流量始终来自SecureSphere堆栈中的公共NAT网关EIP。 您需要在API网关中创建一个“自定义授权程序”,它只允许访问这些IP地址(图8):

Custom Lambda Authorizer - 8

图8:限制对SecureSphere堆栈公共IP的访问的自定义Lambda Authorizer(52.55.64.33)
需要为应用程序中的每个方法设置授权,但如果您已经在使用IAM授权,则可以轻松添加IP条件。

补充说明


AWS出站流量(来自VPC)可能会变得昂贵。如果您有大量静态内容,请考虑直接访问S3(或存储内容的任何位置)并绕过WAF以减少双跳和收费。
如果您的API网关充当HTTP通信的代理,则可以将WAF放置在API网关和HTTP端点之间。更常见的是,API网关支持Lambda函数或其他AWS服务,因此需要将WAF置于API网关之前。
AWS API网关替代方案(例如,Apigee)支持VPC集成,因此允许更传统的边界安全架构。 AWS API Gateway可能会在未来引入对类似架构的支持。
最后,请记住,创建“公共SecureSphere堆栈”可以为您提供SecureSphere的安全控制,并具有将WAF和应用程序端点分离的灵活性。您正在创建自己的SaaS WAF解决方案,可以为任何Web端点提供保护 - 无论它在何处或何处。

原文:https://www.imperva.com/blog/how-to-protect-aws-api-gateway-with-securesphere-waf/

本文:http://pub.intelligentx.net/how-protect-aws-api-gateway-securesphere-waf

讨论:请加入知识星球或者小红圈【首席架构师圈】

 

Article
知识星球
 
微信公众号
 
视频号