Internet网关:
Internet网关是VPC的一个组件,能够实现VPC中的实例和互联网之间的通信。在子网的路由表中添加Internet网关的路由条目,能够使使用该路由表的子网变成共有子网。当生成AWS账户的时候,AWS系统会默认的在每一个区域内斗生成一个默认的VPC,并且这个默认的VPC已经绑定了一个Internet网关;一个Internet网关一次只能绑定一个VPC;当VPC中有EC2实例等AWS资源的时候,Internet网关是不能手动和相结合的VPC相分离的。
路由表:
每个子网都会和路由表相结合使用,并且只能使用一个路由表;VPC中的子网是共有子网还是私有子网是由该子网使用的路由表决定的,如果该路由表中有Internet网关路由条目,那么该子网就是共有子网;路由表由一系列的路由规则组成,决定了子网的访问权限;默认情况下,同一个VPC之间的子网之间是可以相互通信的;当路由表和子网已经结合的情况下,该路由表是不能被删除的。
举个栗子
在CIDR是172.31.0.0/16的VPC中的某个子网相结合的路由表如上所示。该路由表中有两个路由条目,一个是默认生成,手动不能更改的local网关路由条目,还有一个Internet网关路由条目。在该VPC下生成的所有路由表默认都有一个local网关路由条目,并且不能更改,所有的子网都可以通过local网关的路由条目和该VPC(172.31.0.0/16)中的其他子网相互通信;通过igw-750d6c1d这个Internet网关和外部网络(0.0.0.0/0)通信。此时,这个子网由于有Internet网关路由条目就叫做共有子网,如果这个子网的路由表中没有通过igw-750d6c1d这个Internet网关所对应的路由条目的话,这个子网就不能访问外网, 就叫做私有子网。
应用:
当要子网中的实例连接到互联网时,只需要确保该子网使用的路由表中有Internet网关的路由条目,并且在启动实例的时候分配共有IP地址就可以了。当在私有子网中启动实例时,由于实例不能访问Internet网,也不能接收由用户发起的入站流量,所以具有很高的安全性。利用在同一个VPC中的共有子网中启动的NAT实例,私有子网中的实例可以通过把发起的访问互联网的流量转到NAT实例上,以NAT实例作为翘板来接受数据,但NAT实例只能接受从私有子网的实例向外界发起的访问流量,不能接受从互联网外界发起的访问,具有单向性。
ACL:
和路由表类似,每个子网都和一个ACL(访问控制列表)相关联,因此ACL能够在子网层面对AWS资源进行保护。ACL有对流入子网的流量进行支持和拒绝访问的功能,同时对流出子网的流量也需要进行出站的设置;进出站规则是根据规则的编号高低变化的,小编号规则会覆盖大编号规则,进出站规则是先从低编号开始执行,如果以后遇见更高编号并规则冲突的规则,则忽略高编号的规则;进出站规则的最下面的编号*的规则默认拒绝所有的流量,除非对某流量特别指定允许。
举个栗子
像上面图片显示的一样,最下面是系统追加的*编号的条目,默认拒绝所有类型,所有协议,所有端口的流量,然后手动追加编号10的条目,来源是0.0.0.0/0,动作是允许,也就是说允许所有来源的流量;然后再追加一条20编号,但动作改成拒绝,其余都不变,由于执行顺序是从低到高,碰到冲突的规则,会忽视高编号的规则。利用这个ACL仍然能够允许80端口的流量进入。
安全组:
安全组在EC2实例主机层面对AWS资源进行保护;对进出实例主机的流量支持允许访问的功能,不支持拒绝访问(不同于ACL);对流量的出站规则不用进行设置,所有进站的流量默认都可以出站(不同于ACL);从安全角度考虑,只允许许可的流量来源。
举个栗子,当启动一个EC2实例的时候,根据权限最小原则,只开放需要的端口,比如需要ssh进入到实例上进行一些配置,就需要开放22端口,同时这个EC2实例需要作为网站主机来运行,也需要开放80端口,以外的都不需要,那么安全组只需要开放两个端口。