在线课堂 Q/A 实录:亚马逊 AWS 上的 VPC 服务

  • 包研

2014 年 8 月 22 日

话题:安全AWS云计算DevOps语言 & 开发架构

VPC 即虚拟私有云(Virtual Private Cloud),是一种兼具公有云和私有云优势的解决方案。一方面,VPC 是在公有云中划分出一块逻辑区域,享受公有云的高弹性、高扩展性以及按需付费等灵活的支付方式。另一方面,VPC 采用通过专用的数据通道,通过隔离的网络提供更安全的数据保护,以及类似私有云的灵活的架构和管理。另外,通过 VPC 也比较容易的实现混合云。2009 年亚马逊 AWS 推出了 VPC 服务,是最早提供 VPC 服务的供应商之一。在 8 月 19 日的 InfoQ 在线课堂《VPC——AWS 如何定义网络服务》上,亚马逊 AWS 资深技术讲师包光磊先生详细介绍了 VPC 的概念和作用,以及 AWS 云端定义、管理网络服务的能力,包括:管理子网、网关、网络安全访问列表、路由表、路由规则等,并做了 demo 演示。

在课程最后,包光磊回答了听众的问题,现将这些问题归纳整理如下:

问:是否应该把网站的大部分内容(如各 SQA 模块、数据库、存储等)放在 VPC 中,只把 Web 服务器暴露在公网上?如何和 VPC 连接?

答:放在公网上的资源也是放在 VPC 里的。

问:子网和 VLAN 一样吗?

答:不一样,每一个子网是一个独立的 CIDR block 地址段,你自己定义。

问:内部 AZ 间的 server 怎么控制互相间的访问呢?

答:本质上是 VPC 内的不同子网(每个子网位于特定的一个 AZ)控制访问。一个 VPC 的不同子网之间,都是可以互通的。可以通过 NACL 或者结合安全组来进一步加强访问控制。

问:在实际情况下,什么时候选择使用多个 VPC?VPC Peering 是否适合大量流量的 VPC 之间的通讯?

答:比如你有开发、测试、生产的不同系统,可以放在不同的 VPC,不同的项目也可以放在不同的 VPC。目前 VPC Peering 支持同一 Region,大流量没有问题。

问:请问 EC2 和 VPC 是包含关系吗?谁包含谁?极限数是多少?

答:VPC 是一个网络概念,EC2 是虚机,创建时选择放在哪个 VPC 的哪个 subnet 里。AWS 对于新开的帐户有 soft limit,参考 AWS 网站 (http:// http://aws.amazon.com/ec2/faqs/)。真正系统上线后可以开 ticket 来 raise 你的 VPC 和 EC2 等等服务的的 limit。

问:请问有介绍 VPC 更深入的课程吗?比如设计过程中的最佳实践之类的。

答:欢迎参加我们的 architecting on AWS 的课程来深入讨论。

问:能否大致画个图解,当子网内的机器需要连接时需要创建什么,当子网内的机器需要与互联网连接时需要创建什么?

答:一个 VPC 内的不同子网默认通的,与互联网连接需要 IGW,需要安全组允许。

问:BlackHat2014 上 Andres Riancho(https://www.blackhat.com/us-14/speakers/Andres-Riancho.html)演示的攻击,是在 ACLs 和安全组设置不正确的情况下,才会受到攻击?

答:不清楚这个演示的背景,AWS 上安全是责任共担的模型。安全组和 ACL 是用户来设置。

问:有办法保证 EIP 被更换后又恢复内部网络不变吗?

答:EIP 是不会变的公网 IP 地址,内部网是私网。

问:VPC 的应用需求有哪些?哪些情况下客户用到 VPC?

答:目前新开帐户有默认的 VPC。

问:VPC 分为几个层次,比如 storage、processing 和前端,这样合理吗?

答:VPC 是用户定义的纯网络的概念

问:AWS VPC 可以安装在我们的自建机房里吗?

答:不可以。

问:最近我建的 instance(不在 VPC 里) 的 DNS 有问题,解析不了是什么原因?ping 域名不行,icmp 没有限制。

答:初步判断 DNS 没有解析出来。鼓励大家开 ticket。推荐大家升级自己的帐户的服务为 developer 或者不 siness support。我们有 7x24 小时的专业 support 服务。

问:当在构架 VPC 的时候同一个 production 环境,是选择多个 VPC 建立好还是多个 security group 呢?

答:通常来讲,在同一个 VPC 里划分不同的子网,并结合服务器的角色适用不同的安全组设置。

问:VPC 是否可以增加安全性呢?比如多个公司内部的机构可以登陆不同的 VPC。

答:VPC 可以实现安全的网络隔离,有助于增加安全性。

问:使用多个 VPC,是否会违背 VPC 本身的安全性呢?多个 VPC 增加保护层次是否合理?

答:不会,每个 VPC 都是独立和安全隔离的。多个 VPC 可以实现不同应用和不同开发、测试、生产的应用的隔离保护。

问:VPC 建好之后如何测试?

答:几分钟内就可以建立一个 VPC,包括子网,路由。

问:已经讲过 CIDR 分配方法了吗?上线晚了,没看到。

答:CIDR 的地址段根据具体需要,可以在创建 VPC 和子网的时候来自己指定。

问:操作后台都是英文的?

答:控制台 BJS 是中文的。

问:VPC 隔离是物理隔离还是虚拟隔离?

答:我们做的是逻辑隔离。

问:public subnet 和 private subnet 的区别是只有包含与不包含 IGW?

答:区别 public subnet 和 private subnet 不能只看 IGW 这个设置,因为 IGW 实际上是附加在 VPC 上,你的 subnet 是否能用到 IGW,主要是看 subnet 上配置的路由表有没有使用到或者指向 IGW。当然还要看你的这个 Subnet 里面具体那个 EC2 实例本身是否具备公网 IP 地址。

问:CIDR Block 预留多少,应该怎么考虑?有大概的计算公式?

答:CIDR Block 是个纯网络的问题,CIDR Block 后面参数越小,预留的主机数就越多,可以看一下网络方面基础的资料就能算出来。

问:IGW 在哪里部署?

答:实际上是在 VPC 上建,你可以在 VPC 上创建 IGW,使用在哪一些子网内,是通过路由表真正的去使用到它。部署 IGW 的动作比较简单,创建出来连接到 VPC 上,那么要让它真正有作用,必须较在子网的路由表上面,在那个路由目的上要用到它,要把它作为一个跳转点。

问:有没有部署大型多个 VPC 的实例?

答:你可以到 http://aws.amazon.com/cn/solutions/case-studies/?nc1=f_cc,去搜索用户案例。当然有一些用户案例是 Big Data 的,有一些用户案例是讲一些安全方面的,还有一些是突出 VPC。

问:不同 AZ 的 private subnet 默认也是互通的吗?

答:是这样的。如果你创建一个 VPC,那么它的范围是占用整个 Region 下的所有 AZ,但是如果你真的要去使用这些 AZ,你必须要创建出 subnet。如果你是在一个 VPC 内,然后去创建出 subnet,缺省情况下,由于路由表的搭配和 IGW 的设置,其实你的 subnet 本身就是 private。如果跨 AZ 的话,并不影响这几个 AZ 在同一个 Region 中、同一个 VPC 下的特性,所以说就算是不同的 AZ,但是在一个 Region 内,如果它们是 private subnet,他们之间是互通的。当然有人可能会问,我们希望它们不通怎么做?最简单的方法,通过(NACL)做,就是在每个 subnet 上设置网络访问控制列表,从哪个网段过来的不允许进入我的 subnet,然后相对的你也可以去做那件事情。

问:NAT 是要启动一个 EC2 实例来实现吗?

答:的确是这样做,并且方案挺多的,你当然可以起一个光溜溜的用 EC2,然后你不仅用你的软件,用你擅长的软件去实现 NAT,当然大家不要忘了,如果你对 EC2 比较熟的话,那么你在启动 EC2 的时候是有 AMI,那么我们提供有 NAT 的 AMI,你直接起来,它就默认帮你 NAT 一些东西装好,配好,你只要做很简单的一些设置,那么这个新启动的实例就是个 NAT。今天我演示的是一种偏手动的去建 VPC 的方法,实际上你在 console 上还能够看到叫“创建 VPC 的向导”,在向导中有一些选项供选择,配几个 private 子网,几个 public 子网,private 子网需不需要通过 public 子网访问到公网等等。如果你选种了其中一个向导,实际有一个服务是自动替你在 public 的子网上起一个 NAT。总结一下,你至少有三种方法来配 NAT,一是完全自己做,第二是用 AMI,第三是用 VPC 向导。

【其他】

问:VPN 连接如何收费?

答:参考这里 http://aws.amazon.com/vpc/pricing/。

问:AWS essential 在哪里可以得到?

答:是一门收费的、一天的课程,可以来参加我们的培训。请参考我们的网站 http://aws.amazon.com/cn/training/ 。

问:北京的 AWS 已经开始了?

答:目前有限公开预览阶段。


感谢包光磊对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

安全AWS云计算DevOps语言 & 开发架构