Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database AWS EC2-从特定域到数据库的安全连接?_Database_Amazon Web Services_Security_Networking_Amazon Ec2 - Fatal编程技术网

Database AWS EC2-从特定域到数据库的安全连接?

Database AWS EC2-从特定域到数据库的安全连接?,database,amazon-web-services,security,networking,amazon-ec2,Database,Amazon Web Services,Security,Networking,Amazon Ec2,我正在使用AWS EC2运行一个支持搜索功能的数据库-类似于Elasticsearch。由于预算限制,该数据库仅在单个AWS地区运行 该数据库也运行在专有网络的私有子网内。目前没有它可以建立的入站或出站连接 我需要允许访问数据库,以便只有我的无服务器功能可以通过HTTP连接到它。不应允许用户直接从客户端访问它。使用Lambda是可能的,但由于冷启动时间长,这远远不够理想。用户会期望搜索结果很快出现,尤其是当页面首次加载时。所以还需要一些别的东西 该计划是用Cloudflare工人取代Lambda

我正在使用AWS EC2运行一个支持搜索功能的数据库-类似于Elasticsearch。由于预算限制,该数据库仅在单个AWS地区运行

该数据库也运行在专有网络的私有子网内。目前没有它可以建立的入站或出站连接

我需要允许访问数据库,以便只有我的无服务器功能可以通过HTTP连接到它。不应允许用户直接从客户端访问它。使用Lambda是可能的,但由于冷启动时间长,这远远不够理想。用户会期望搜索结果很快出现,尤其是当页面首次加载时。所以还需要一些别的东西

该计划是用Cloudflare工人取代Lambda。由于启动时间更快,与世界各地的最终用户的距离更近,以这种方式连接到数据库可能会给我提供所需的速度,同时仍然提供无服务器方法的所有好处。但是,我不确定如何配置我的VPC安全组,使其只允许来自特定工作者的连接

我知道我的员工都有独特的领域,如
https://unique-example.myworkerdomain.com
并且随着时间的推移它们保持不变。那么,有没有一种方法可以安全地允许来自这个域的入站连接,同时阻止所有其他连接?是否可以/应该通过配置安全组、internet网关、IAM角色或其他完全不同的方式来实现这一点


感谢您的帮助和建议

有两种选择

ECS 您可以在与数据库相同的VPC中运行ECS群集,也可以运行Fargate任务,这些任务的启动时间不到一秒(可能是100ms或更短?)。您也可以在热群集实例上运行ECS任务(但之后您会一直为它们付费),但也许使用ECS的“从零到零”方法可以让您在不影响大多数用户请求的情况下管理成本(从零到零”事件后的第一个请求将获得100毫秒以上的延迟,但后续请求也会获得类似的延迟)。Lambda实际上在引擎盖下做了类似的事情,但在时间线上有更积极的缩减。这并不局限于特定领域,但可能会解决您的问题

自管理代理 根据数据库的访问方式,您可以在公用子网中使用反向代理(如Nginx)进行请求验证,以限制对数据库的访问。这可以控制任何请求头的访问,但我建议执行TLS客户端验证,以确保只有您的函数可以通过代理访问数据库,并且可以通过这种方式验证域(通过将受信任的CA限制为只为该域签名的中间CA,或者,我认为Nginx可以根据客户端证书匹配正则表达式(如域名)的特征允许连接)

通过您的公司网络进行路由 使用VPN,您可以从您的网络中发起该功能,或者以某种方式过滤请求,然后数据库仍可以位于私有子网中,允许通过VPN从公司网络进行连接

使用AWS WAF
您创建一个指向数据库的公共ALB,并设置AWS WAF以阻止所有不包含特定头(例如API密钥)的请求。注意:您可能还需要设置Cloudfront,我忘记了您是否可以直接将WAF应用于ELB。另外注意:我并不特别建议您这样做,因为我认为WAF在规则中没有敏感字符串,因此您可能需要考虑谁在WAF上拥有describerule/describewebacl权限,以及这些权限规则可能最终会出现在日志中,因为AWS不希望规则是敏感的。但WAF可能会对您认为可行的内容进行筛选。我很确定您可以对HTTP头进行筛选,但除非这些头是机密的,否则任何人都可以通过提交带有这些头的请求进行连接。我认为WAF无法进行客户端域验证.

谢谢您的建议!如果我运行反向代理,随着越来越多的用户连接,是否会出现可伸缩性问题?这是否需要配置大型EC2实例以处理CPU/内存问题?如果您有大量请求,您可以将Nginx反向代理放在负载平衡器后面的自动缩放组中。如果您的连接不是无状态/幂等的,您可能必须在负载平衡器上启用粘性会话,并在自动扩展组上进行连接消耗,以避免杀死长寿命的连接。我为无状态web请求做过这项工作,效果很好。它在代理有状态和长寿命的第4层请求时效果不太好,但是仍然可行。想想看,您可能可以使用ALB和AWS WAF来过滤请求,并将它们直接发送到您的数据库。我不知道是否有一个WAF规则可以满足您的呼叫方域约束。如果不相信请求方是他们所说的那个人,这是很难做到的。但是如果可能的话,您就不需要管理任何额外的EC2基础设施,而且它的扩展将超出您的最疯狂的梦想。我明白了。我所有的连接离子将是无状态HTTP连接,因此担心粘性会话不会是一个问题。AWS WAF可能会很快变得非常昂贵,尽管如此,即使有一条规则在这里起作用,它在经济上也不可行。但我将对设置Nginx做更多研究,看看这是否可行。再次感谢您找到我的答案l、 请接受它作为答案。它有助于其他人搜索答案。谢谢,祝你好运!