Tag: Amazon Virtual Private Cloud


在Virtual Private Cloud中自建基于BIND的DNS服务器

Amazon Virtual Private Cloud (Amazon VPC) 是 AWS 提供的虚拟私有网络服务,允许您在 AWS 云中预配置出一个采用逻辑隔离的部分,让您在自己定义的虚拟网络中启动 AWS 资源。您可以完全掌控您的虚拟联网环境,包括选择自有的 IP 地址范围、创建子网,以及配置路由表和网关。

除了提供IP资源及网络连接,Amazon VPC还提供DNS及DHCP等基础设施服务。当您将实例启动到默认 VPC 中时,我们为实例提供与其公有 IPv4 和私有 IPv4 地址对应的公有和私有 DNS 主机名。当您在非默认 VPC 中启动实例时,我们会为实例提供私有 DNS 主机名,并根据您为 VPC 和实例指定的设置来决定是否提供公有 DNS 主机名。

对于 us-east-1 区域,公有 (外部) DNS 主机名采用 ec2-<public-ipv4-address>.compute-1.amazonaws.com 形式,对于其他区域,则采用 ec2-<public-ipv4-address>.region.amazonaws.com 形式。例如,公有IP为54.222.212.110的EC2实例,其公有DNS名为ec2-54-222-212-110.cn-north-1.compute.amazonaws.com.cn。我们将公有 DNS 主机名解析为该实例在所在网络外的公有 IPv4 地址及其在所在网络内的私有 IPv4 地址。

私有 (内部) DNS 主机名解析为实例的私有 IPv4 地址,并对 us-east-1 区域采用 ip-<private-ipv4-address>.ec2.internal 形式,对其他区域采用 ip-<private-ipv4-address>.region.compute.internal 形式 (其中 private.ipv4.address 是反向查找 IP 地址)。例如,私有IP地址为10.206.2.239的EC2实例,其私有DNS名为ip-10-206-2-239.cn-north-1.compute.internal。您可以使用私有 DNS 主机名在同一网络中实现实例之间的通信,但我们无法解析实例所在网络之外的 DNS 主机名。要解析实例所在网络之外的主机名,可自建DNS服务器来为VPC及外部网络提供DNS服务。

常见的应用场景是在混合IT架构下,客户数据中心通过VPN或是Direct Connect专线连接到AWS上的VPC,在VPC中配置1台DNS服务器,在客户数据中心也配置1台DNS服务器,服务器的主从角色客户可自行定义。通过多台DNS服务器为不同位置的客户端提供DNS服务,即能保证服务的高可用,又能就近提供服务,减少DNS查询延迟。

接下来,我将基于上述架构图一步一步说明如何使用BIND搭建DNS服务器。本文不会涉及BIND的高级配置,如需了解BIND的高级配置,可参考BIND官方网站

安装配置DNS主服务器

首选需要准备一台EC2实例用于安装BIND软件,如何创建EC2实例可参考Amazon EC2入门指南。本次示例选用Amazon Linux操作系统的AMI来创建实例,实例类型选用了通用型实例类型: m4.large。BIND对服务器硬件资源要求不高,在不启用DNSSEC的情况下(不在本文讨论范围),普通配置的服务器即可承载DNS服务。m4.large配置有2颗vCPU和8G内存,运行DNS服务能够支持中等规模的DNS请求,当请求增加时,也可方便的调整实例类型到更大的配置。

创建EC2实例时需要指定安全组来开放服务端口,DNS服务通过UDP 53端口提供DNS查询相应,通过TCP 53端口提供区域传送。因此,安全组队VPC网段开放UDP 53端口,对客户数据中心的DNS服务器开放TCP 53端口,如下图所示:

DNS服务器作为基础设施服务的重要性无须多言,Amazon EC2持续监控EC2实例的状态以及底层硬件的状态,分别称为实例状态检查和系统状态检查。我们可创建状态检查报告,当任一状态检查失败时,执行重启操作,并将警报发送至指定邮箱。

创建好警报之后,通过SSH登陆至EC2实例,并yum命令安装bind软件:

yum install bind-utils bind

安装好之后,我们接下来将创建一个示例的DNS域:aws.local,我们首先需要编辑/etc/named.conf文件,修改以下内容:

listen-on 缺省配置为127.0.0.1,DNS服务只会绑定到系统的环回接口,其他客户端无法访问,需要添加EC2实例的私有IP地址,才能提供外部访问

allow-query缺省配置为localhost,即只允许DNS服务器所在的EC2实例对自己进行DNS查询,添加VPC的网段可允许来自VPC内部的主机进行DNS查询。注:也可将此参数设置为0.0.0.0/0,因为前面安全组设置里只允许了VPC内的IP访问UDP 53端口。

此外,还需要增加对aws.local这个域的定义,在/etc/named.conf中增加以下内容,allow-transfer指定了只允许从DNS服务器进行区域传送,限定允许区域传送的范围颗可提高DNS服务的安全性:

上述配置说明aws.local域的具体解析配置在文件/var/named/aws.local.db 里,其内容如下,在这个示例配置中,定义了两条A记录,分别是dns.aws.local对应10.206.0.212和www.aws.local对应10.206.0.213

配置Amazon VPC使用自建DNS服务器

Amazon VPC通过DHCP服务为VPC中的EC2及其他连网组件动态分配IP地址,动态主机配置协议 (DHCP) 提供了将配置信息传递到 TCP/IP 网络中主机的标准。DHCP 消息中的options字段包含配置参数。这些参数包括域名、域名服务器以及“netbios-node-type”。接下来我们将创建一个新的DHCP选项集,并在选项集中将域名服务器指向刚才创建的DNS服务器。

在AWS控制台中选择VPC服务,并在左边的菜单中选择“DHCP选项集”,点击“创建DHCP选项集”按钮,输入以下信息,域名服务器可指定多个DNS服务器,按照顺序第一个为VPC内的DNS服务器,第二个为客户数据中心的DNS服务器:

创建好DHCP选项集之后选择左边菜单中“您的VPC”选项,选中要修改的VPC,从“操作”下拉菜单中选择“编辑DHCP选项集”

选择刚才创建的DHCP选项集并保存:

在您将新的 DHCP 选项集与 VPC 关联之后,任何现有实例以及您在 VPC 内启动的所有新增实例都将使用这些选项。 无需重新开始或重新启动实例。根据实例更新 DHCP 租赁权的频率,它们会在几个小时内自动拾取更改。如果您愿意,您也可以使用实例上的操作系统,直接更新租赁权。

安装配置DNS从服务器

在客户数据中心安装配置DNS服务器的步骤与在Aamazon EC2中安装配置DNS服务器的步骤相同,除了/etc/named.conf的配置稍有差别:

从服务器的type类型为slave,file参数对应的域配置文件会自动根据从主DNS服务器接收到的更新来进行创建和更新,masters指定aws.local域的主域名服务器,最后一个参数allow-transfer禁用了区域传送。

配置好从DNS服务器之后,可将客户数据中心内的连网设备设置为从DNS服务器,第二DNS服务器设置为AWS上的主DNS服务器。

总结

Amazon VPC提供DHCP服务和DNS服务,为VPC中的EC2实例提供IP地址分配和域名解析服务,为每个EC2实例创建特定格式的DNS域名。如果用户希望使用自定义域名,或者希望使用一套域名统一管理云上和云下的资源,可自行搭建DNS服务器来提供DNS解析服务,Amazon VPC能够支持客户。

作者简介

刘旭东,AWS解决方案架构师 。负责基于AWS的云计算方案的咨询和架构设计,具有超过十年以上企业客户服务经验,同时致力于AWS云服务在国内和全球的应用和推广。在大数据解决方案、企业级解决方案,混合云架构,基础设施运维管理,以及Serverless无服务器架构及IoT等领域有着广泛的设计与实践经验。在加入AWS之前曾任职HPE技术顾问,有超过十年的虚拟化/云计算架构设计经验, 始终推动技术实现商业价值。

从永恒之蓝开始,安全防范没有结束

信息安全现状

时钟进入到2017年,物联网安全DDoS攻击勒索软件被越来越多的国内外信息安全预测机构列为年度最大信息安全威胁。上周爆发的勒索软件WannaCry (又称作永恒之蓝)已席卷全球99个国家,让各类技术宅男们和信息安全的童鞋们又错过了一个美好的周末。尽管目前该病毒已被安全人员找到了阻止其传播的方法,但是类似的安全事件依然给我们敲响了云端安全运维的警钟。

WannaCry事件回顾,5月12日晚, WannaCry 蠕虫病毒在全球大肆爆发。据外媒报道,攻击在99个国家实施了超过75000次攻击。该攻击利用漏洞MS17-010中的某些版本的SMB服务器协议进行传播,利用Windows 445 端口的安全漏洞潜入电脑并对多种文件类型加密并使用户无法打开,攻击者称需支付比特币解锁,补丁程序已于2017年3月14日发布,但未打补丁的用户有可能遭受此次攻击。通过这个事件我们发现只要是购买正版操作系统并及时更新补丁的用户,都不会受到影响。永久解决办法有2个,1.开启windows的自动更新功能,将最新补丁打上; 2.对于部分比较老的windows系统可以手动下载更新包并安装。

这样的安全事件不是第一次也不会是最后一次,要确保我们的信息安全,需要做的事情有太多,比如完善的信息安全应对机制,一系列自动化运维工具或服务,坚决的执行能力以及定期的审核机制。如果你恰好开始关心信息安全,而我们又专业,不妨看看AWS是如何看待信息安全的。

AWS信息安全理念

数据属于谁?

虽然是一个老生常谈的问题,但确实一个非常重要的问题,而且答案永远只有一个,数据属于客户。当你上云之后,如何确保你的数据真的属于你是很多客户评估是否上云时最纠结的问题!在AWS,你可以非常清晰的从上图中看到这个界限。所有操作系统以上(包括操作系统本身)的内容都是客户自己自主可控,AWS没有任何权限访问,同时如果你使用的是AWS提供的Windows或者Linux镜像,该镜像 的补丁机制是全球一致管理的,我们会从各个合作厂商那得到补丁,并第一时间更新到镜像里。如果是开篇提到的流氓攻击,在AWS上的客户可以不需要担心了,因为该补丁在镜像中自动更新了。

如何确保我在云上是安全的?

如何数据安全可能是一个说上三天三夜都没法说完的话题,今天我们从AWS信息安全最佳实践出发,给大家从几个层面来分析信息安全的层级,并重点介绍如何帮助客户在理解理念之后的安全落地问题。首先我们可以看到在云上我们需要这么几个维度的安全,底层基础架构的安全网络的安全权限及审计的安全服务本身的安全事先预防等等。总之,信息安全从来都不是靠说的,而是靠做的,所以接下来我们给大家做一些简单示范,让你在使用AWS时更加得心应手。

底层基础架构的安全

熟悉AWS的同学可能知道,AWS底层的虚拟化平台使用的是Xen,套用一句官话,不管我们的工程师是多么的小心,我们依然需要时刻告知我们的客户对于AWS服务底层安全的疑虑,所以大家可以在以下链接找到关于Xen的信息安全公告,同时大家也可以从AWS信息安全白皮书中看到AWS如何对于底层基础架构的安全设计,限于篇幅的原因本文不作展开。

Xen Security Advisiories

https://aws.amazon.com/cn/security/security-bulletins/

AWS Security Best Practices

https://d0.awsstatic.com/whitepapers/aws-security-whitepaper.pdf

网络安全

  • 上云的安全

当你的数据需要上云时,你有三种非常安全的方式来传输您的数据,通过TLS加密的HTTPS协议将数据直接通过互联网传输到S3, 建立专用VPN进行数据传输以及通过专线将AWS与您的数据中心打通,并将AWS纳入您现有的全球专线网络中,让你全球任何一个办公室或者数据中心都通过内网的方式随时的安全访问云端的数据或者系统,如同您多了一个拥有无限扩展能力的远端数据中心。

  • 云上的安全

当您的数据或者系统已经部署在AWS上时,你可以通过上图的简单示意图来对您的系统进行网络隔离及控制。比如,你可以按照不同的应用划分不同的VPC,不同的VPC之间网络隔离,同时在同一个VPC内设置不同安全级别网络区域,如公有访问区,DMZ区,私有网络区。利用VPC内的免费防火墙工具安全组,网络ACL来对云端的机器及网段进行精细化控制。如图上的例子,你可以通过图形界面在安全组上关闭该机器137,139,445 端口就能轻松的规避本文开篇提到的流氓攻击。如果您确实需要开启这些端口,也可以在安全组内指定对具体的源IP开放端口,或者将这些机器放置在私有网段,当这些私有网段的机器需要访问互联网的某些站点进行补丁升级等操作时,通过NAT的方式允许VPC的出向流量。

如果您还需要对VPC内不同私有网段的机器访问进行更精细化控制,还可以通过另外一个免费的防火墙网络ACL来实现。

当您的网络与AWS云端VPC通过VPN或者专线联通时,你还可以通过路由表来控制您哪些数据中心的网段可以访问云端的哪些网段。

权限及审计安全
当你的业务上云后,你可能面临不同人员需要管理你云端资源,这些人可能包括,您公司的开发人员,运维人员,财务部,人事部以及您外部形形色色的服务供应商或者运维外包供应商,如何给予这些人员适当权限去访问他们需要访问的AWS资源以及事后审核这些人员的访问情况,是很多企业客户迫切需要解决问题。

AWS IAM不但可以轻松解决上述所有访问权限问题,还可以帮您打通绝大部分企业遇到的SSO问题,让你数据中心的AD或者第三方机构与AWS建立授权机制,当您的用户在本地AD通过验证后,直接访问AWS上的数据,无需重复创建用户。同时可以给所有IAM用户开启复杂密码功能,并强制用户每隔一段时间修改密码。

内审或者外审通常是一个企业每年必做的事情,在AWS只需开启CloudTrail服务就可以自动记录所有AWS资源的使用情况,下图是一个CloudTrail的简单示例,我们可以看到什么时间哪个用户对什么资源做了什么事情。

同时还可以进一步查看某个事件的详细信息,便于审核,如下图所示:

服务本身的安全机制

由于AWS服务众多,限于篇幅的原因,本文重点讲解AWS虚拟机(EC2)的安全,如您对其他服务也很感兴趣,欢迎阅读AWS安全白皮书。

AWS Security Best Practices

https://d0.awsstatic.com/whitepapers/aws-security-whitepaper.pdf

     Amazon EC2多层安全模型

Amazon EC2多层安全模型包含底层物理服务器的操作系统,虚拟操作系统或者客户操作系统,防火墙和签名的API调用。目标是防止EC2内的数据被未授权的系统或者用户访问,在不牺牲客户配置灵活性的时,尽最大限度保证EC2本身的安全。

Amazon EC2当前利用了一个AWS高度定制化的Xen hpervisor,底层托管主机操作系统执行Ring0(最高权限),客户操作系统执行Ring1,应用执行Ring3(最低权限)在虚拟化层面来隔离客户和hypervisor。

当多台EC2运行在同一台底层物理服务器时,他们被Xen hypervisor隔离,如上图所示,在hypervisor层中有防火墙,且该防火墙位于底层物理网卡和客户EC2虚拟网卡之间。所有流量都需要通过该层,所以任意一个EC2实例无法访问其他EC2实例,底层的内存(RAM)也是使用类似机制实现隔离。

底层硬件的操作系统都必须通过MFA的方式进行访问,且这个系统通过AWS
特殊设计,构建及配置,确保其安全,所有访问都会自动记录且被审计。

客户操作系统完全有客户控制,客户拥有完整的根或者管理员权限,AWS没有任何权限可以访问。

重要数据经常备份,重要数据经常备份,重要数据经常备份,重要的事情说三遍。 在AWS你可以将常用对象数据存放在EBS或者S3,对于存放在EBS的数据每天EBS快照,确保任何重要数据都有一份最近的拷贝。对于S3上的对象数据,通过S3 桶策略进行精细控制,同时开始S3的版本控制功能防止误删或脏数据。

事先预防

如何做好事先预防工作呢?比如某用户处于某种原因开启了一些高端口或者公司命令禁止的网络端口,IT部门如何迅速发现并纠正呢?AWS Config服务可以帮到你。Config可为您提供 AWS 资源的详细库存及其当前配置,并会持续记录对这些资源配置所做的更改(例如,安全组的出/入规则、适用于 VPC 的网络 ACL 规则和 Amazon EC2 实例上标签的值)。

您可以通过创建 AWS Config 规则进行评估,规则规定了您理想的配置设置。AWS Config 能够提供可自定义的预定义规则 (称作托管规则),以帮助您开始进行评估。您还可以创建自己的自定义规则。在 AWS Config 持续跟踪您的资源中出现的配置更改时,它会检查这些更改是否违反了规则中的任何条件。如果某个资源违反了规则,那么 AWS Config 会将该资源和规则标记为不合规。例如,当创建 EC2 卷时,AWS Config 可以按照需要卷加密的规则来评估该卷。如果卷没有加密,AWS Config 会将卷和规则标记为不合规。AWS Config 还可以在您的所有资源中检查有无账户范围内的要求。例如,AWS Config 可以检查账户中 EC2 卷的数量是否在所需总数以内,或者账户是否使用 AWS CloudTrail 进行登录。

如何进行远程系统管理

Amazon EC2 系统管理器是一系列可帮助您自动执行管理任务的功能,例如收集系统清单、应用操作系统补丁、自动创建 Amazon 系统映像 (AMI) 以及大规模配置操作系统和应用程序。您可以使用 Systems Manager 以远程方式安全地管理托管实例的配置。托管实例是您混合环境中已经针对 Systems Manager 配置的任意 Amazon EC2 实例或本地计算机。系统管理器所提供的功能和共享组件无需额外费用。您仅需为实际使用的 Amazon EC2 资源付费。

 

系统管理器支持对下列操作系统进行管理:

Windows操作系统 Windows Server 2003 至 Windows Server 2016,包括 R2 版本
Linux操作系统

64 位和 32 位系统

Amazon Linux 2014.09、2014.03 或更高版本

Ubuntu Server 16.0.4 LTS、14.04 LTS 或 12.04 LTS

Red Hat Enterprise Linux (RHEL) 6.5 或更高版本

CentOS 6.3 或更高版本

仅 64 位系统

Amazon Linux 2015.09、2015.03 或更高版本

Red Hat Enterprise Linux (RHEL) 7.x 或更高版本

CentOS 7.1 或更高版本

如果大家感兴趣,可以参考下面链接进行具体的配置安装。

http://docs.amazonaws.cn/systems-manager/latest/userguide/what-is-systems-manager.html

接下来介绍使用系统管理器来进行补丁安装。由于北京区的系统管理器暂无补丁管理组件,我们使用Run Command组件来进行补丁安装。您可以使用系统管理器的Run Command以远程方式安全地管理托管实例的配置。托管实例是您混合环境中已经针对系统管理器配置的任意 Amazon EC2 实例或本地计算机。利用 Run Command,您可以自动完成常用管理任务以及大规模执行临时配置更改。

管理员使用 Run Command 可以在其托管实例上执行以下类型的任务:安装或引导应用程序,安装系统补丁,获取系统资产信息,构建部署管道,从 Auto Scaling 组终止实例时捕获日志文件,以及将实例加入 Windows 域等等。

写在最后的话

一波热闹的攻击事件已经过去,下一次攻击开始还会远吗?如果您能事先利用AWS提供的信息安全服务(文中提到的很多服务是免费的),配合完善的审核机制,不管是什么类型的信息安全风险来临你都能处乱不惊。