Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.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
Amazon web services 如何在AWS中为实例类正确创建安全组?_Amazon Web Services_Networking_Amazon Ec2_Architecture_Amazon Vpc - Fatal编程技术网

Amazon web services 如何在AWS中为实例类正确创建安全组?

Amazon web services 如何在AWS中为实例类正确创建安全组?,amazon-web-services,networking,amazon-ec2,architecture,amazon-vpc,Amazon Web Services,Networking,Amazon Ec2,Architecture,Amazon Vpc,因此,现在每个可用性区域有4个子网:面向internet的“入口点”子网(与负载平衡器关联)、用于内部计算的通用“服务”子网、用于所有相关数据的“数据库”子网,以及用于向internet发出请求的“外部请求”子网。这基本上定义了4类EC2实例 我现在应该为这4类EC2实例创建安全组。我想知道的是如何正确地做到这一点(我正在使用terraform) 我是否可以为每种连接类型的每个类创建1个“入口”(传入)流量安全组和第2个“出口”(传出)流量安全组 所以基本上,我想要这个。我想让internet入

因此,现在每个可用性区域有4个子网:面向internet的“入口点”子网(与负载平衡器关联)、用于内部计算的通用“服务”子网、用于所有相关数据的“数据库”子网,以及用于向internet发出请求的“外部请求”子网。这基本上定义了4类EC2实例

我现在应该为这4类EC2实例创建安全组。我想知道的是如何正确地做到这一点(我正在使用terraform)

我是否可以为每种连接类型的每个类创建1个“入口”(传入)流量安全组和第2个“出口”(传出)流量安全组

所以基本上,我想要这个。我想让internet入口点与服务对话。该服务只能响应来自internet的请求,它本身不发出任何外部internet请求。该服务可以与数据库和外部请求类通信。数据库只能与服务对话,外部请求只能响应服务。入口点可以是HTTP或HTTPS(或websockets,这只是HTTPS吗?)。它从443端口进入。这是负载平衡器。然后,它将请求转换为HTTP,并通过端口3000连接到计算机。我应该为每种不同的连接类型提供一个单独的端口吗?(因此,服务层将有1个端口供数据库响应,如4000,1个端口供外部请求层响应,如5000,等等)。还是那部分很重要?让我们假设我们有港口的事情

  • sg1(安全组1):入口443->3000(负载平衡器->服务)
  • sg2:3000出口->互联网?那是0.0.0.0/0吗?我不希望它只向连接的客户端发出免费请求
  • sg3:ingress 3000->4000(服务->数据库),指定数据库子网
  • sg3:出口4000->3000(数据库->服务),指定服务子网等
我走对了吗?我对这件事还不熟悉,正在努力想办法。如果您能提供任何指导,我将不胜感激。过去一周我一直在阅读AWS文档,但在最佳实践和体系结构方面几乎没有相关内容。

您可以根据具体情况进行说明。无论何时建立入站或出站入口规则,都将评估所有可用规则

关于通信,安全组规则在允许双向通信的任何网络通信期间建立隧道(允许有状态通信),只要安全组允许初始连接

安全组是有状态的-如果您从实例发送请求,则无论入站安全组规则如何,都允许该请求的响应流量流入。不管出站规则如何,允许对允许的入站流量的响应流出

例如:

  • 入站规则允许从特定IP地址对端口22执行SSH,但不存在端口22的出站规则。用户可以安全地通过SSH连接到服务器,而不会出现连接问题,但无法通过SSH连接到其他服务器。添加出站规则如果服务器应该能够说出站,默认情况下它将是allow all

从上面的示例来看,这意味着如果您不允许HTTP/HTTPS的出站规则,那么只有HTTP/HTTPS上的入站连接才允许它返回。还应注意无法从internet下载的修补程序

关于源,您可以引用逻辑安全组名称,而不是指定子网。这意味着,如果任何子网中的资源已连接该安全组,则目标资源将允许入站访问(这仅在连接为专用主机到专用主机时有效)

通信量的来源和目标端口或端口范围。源可以是另一个安全组、IPv4或IPv6 CIDR块、单个IPv4或IPv6地址或前缀列表ID

我建议尝试将资源领域保持在单个安全组中(即DB server全部位于单个安全组中),主要是为了减少管理开销


该页提供了更多信息。

“另外,请注意无法从internet下载的修补程序。”您在这里的意思是什么?如果HTTP/HTTPS的出站丢失,您将无法访问internet以获取任何修补程序或包更新:)您应该在单个安全组中定义入口和出口,还是将其分为两个,或者这很重要?这确实是一个选择,但一般来说,安全组用于特定的服务器目的,而不是移动方向。这有助于减少管理开销:)正常做法是将出站规则保持为“完全打开”,因为您通常可以“信任”在您自己的系统上运行的代码。因此,在连接
ec2->database
时,在数据库上设置一个限制入站规则,但允许ec2具有完全打开的出站设置。这也将允许EC2实例在必要时与Internet通信。在高安全性情况下,如果需要,可以进一步锁定出站规则。