写点什么

AWS 论剑 Azure:安全组之争

  • 2016-06-02
  • 本文字数:4954 字

    阅读完需:约 16 分钟

文章翻译自 _ 策略驱动的云管理平台 _—— Scalr ,作者 Ron Harnik,翻译已获得本人授权,点击这里阅读英文原文。

用户在接受云技术过程中所面临的最大挑战之一是:必须习惯于用截然不同的方式完成各种任务。

与我合作过的很多IT 和安全工程师都曾带领自己的公司迁入云平台,他们经常会犯同一个错误:在新技术中继续沿用老的范式。

虽然云本身已经不“新”了,但有关云的工作原理,以及不同任务需要用到哪些工具,这方面依然存在很多问题。在这一系列文章中,我们将着重介绍各大主要公有云和私有云平台的安全组(或防火墙规则),下文会将其称之为“四大”。

本文将重点介绍AWS 和Azure 的安全组。

云安全与传统防火墙截然不同(大部分情况下均是如此)

在传统网络中,通常使用防火墙对不同网络之间传输的流量进行筛选。在最基本的层面上,当一个数据包进入防火墙后,防火墙会通过一系列规则对其进行检查和对比,这些规则决定了是否传递或丢弃这个数据包。

对大部分云平台来说,这一系列任务的执行位置略有不同。此时不再通过专门的网络设施针对传入/ 传出的流量强制应用规则,而是会为每台服务器关联一套安全策略。更具体来说,需要针对每台服务器上的(虚拟)网卡应用防火墙规则。

(点击放大图像)

在云端获得保护的一种常规3 层Web 应用

请注意上述图例仅仅是范例,不同供应商的云平台具体的安全策略也会略有差异。不过在服务器层面进行分隔这种通用原则对大部分云平台来说都是类似的。

需要注意的是,云安全解决方案并不只有安全组。市面上的各种解决方案为云部署提供了不同层面的安全控制,例如Trend Micro 的Deep Security 或Palo Alto Networks 的VM-Series Next Generation Firewall。虽然安全组衍生出不同变体,但依然是大部分云平台内建的安全控制机制,为云部署提供了最基本的安全防护。

AWS 安全组

在 AWS 中,安全组是指不同实例所关联的一系列获得批准的(仅“允许”)传入和传出规则。在 VPC 内创建实例后,需要将其关联至某一安全组。默认情况下,所有 VPC 实例都关联了每个 VPC 中包含的“默认”安全组。

关于 AWS 安全组,需要注意下列问题:

  • 这并不是一种 EC2 服务,而是属于 VPC 提供的服务,也可用于保护其他实体,例如 RDS 或 ELB。

  • 默认情况下,安全组存在一些局限,但可申请对其扩展:

    • 每个 VPC 最多可创建 500 个安全组
    • 每个安全组最多可包含 50 个规则
    • 一个网络接口最多可应用 5 个安全组
  • 在将安全组关联给某个实例后,实际上是将其关联给主要网络接口。此外可通过 ENI(Elastic Network Interface)的方式添加额外的接口。

  • 除非明确指定,否则所有实例均会自动关联“默认”安全组。“默认”安全组的初始设置包括:

    • 只允许来自关联了同一“默认”安全组的实例所发出的传入流量
    • 允许所有传出的流量

每个安全组有两套规则:传入规则和传出规则。传入规则决定了流量如何进入实例,传出规则可用于对离开实例的流量进行检查。

安全组规则是有状态(Stateful)的。举例来说,如果配置传入规则“允许来自 1.1.1.1 的 HTTP 流量”,就无需为了让这个实例发送 HTTP 响应而创建对应的传出规则。

上文提过,安全组只能包含“允许”规则,这种设计造成了一种有趣的局面:变则的顺序变得不重要了。作为曾经负责过网络 / 防火墙的人,不同操作的执行顺序对我自己来说非常重要。在为 Cisco ASA 或 Juniper SRX 配置安全策略时,必须确保不同规则不能相互抵消。

通常的最佳实践是创建白名单,这种名单包含大量允许的规则,可允许必要的流量顺利通过,同时通过暗含的或明确指定的“拒绝全部”规则处理其他所有非必要流量。而正是因为这一原因,导致产生大量过于笨重的策略,其中可能包含数千条非常具体的规则,例如“1.1.1.1 至 2.2.2.2”。

提到这一问题的原因在于,如果你跟我一样,在以往的职业生涯中曾经需要用安全组和虚拟网关取代物理防火墙和路由器,你会注意到,新技术不仅会在具体实施中造成影响,同时也会影响到你的规划工作。

每个安全组规则包含 4 个字段:

  • 类型
  • 协议
  • 端口范围
  • 来源 / 目标(传入 / 传出)

(点击放大图像)

安全组应用的传入规则

类型、协议和端口范围的概念相当直观。来源/ 目标可用于指定IP 地址,地址范围,或其他安全组。如果指定另一个安全组作为来源或目标,则可代表关联至该安全组的每个实例,借此可创建出更清晰的网络拓扑。

EC2 Classic 安全组

如果你的 AWS 帐户足够老,也许可以支持 EC2 Classic。EC2 Classic 会将计算视作一种位于每个地区的大型资源池,而 VPC 可用于创建相互独立的云部署。一般来说,EC2 Classic 安全组的具体表现与 VPC 安全组类似,但存在下列差异:

  • 只能在创建实例时配置实例的安全组:一旦实例创建完毕开始运行,就只能从关联的安全组中添加或删除规则,无法为其添加或删除安全组(注意:如果修改安全组的规则,改动将影响该安全组关联的所有实例)。
  • EC2 Classic 安全组会绑定至特定地区。若要将某个实例与某个安全组关联,实例和安全组必须位于同一个地区。
  • 在 EC2-Classic 中,一个实例最多可关联 500 个安全组,一个安全组最多可添加 100 条规则(注意:如果某个实例需要多至 500 个安全组,那肯定是因为其他哪里的设置有误)。

有关安全组的最佳实践

对于 AWS 安全组,以及大部分其他云平台的安全组来说,限制安全组数量的蔓延都可看做一项最佳实践。重点在于需要尽可能避免产生下列极端的最糟糕“实践”:

  • 为每个新实例使用一个新的安全组
  • 为每个新增的访问需求创建一个新的安全组
  • 所有实例使用同一个安全组

为避免以无组织无序的方式实现安全,重点在于要事先创建相关安全组,并在创建实例的过程中酌情分配。

为所有实例使用“默认”安全组,实际上依然是在沿用古老的“外紧内松”安全模式。使用“默认”安全组还会使得基础结构面临各种类型的风险:当实例需要接受某种全新类型的访问方式时,很容易便可添加另一条规则,但如果将这条规则加入“默认”安全组,会导致所有相关联的虚拟机变得更易于遭受攻击。

您可以考虑使用下列 AWS 安全范式。

由宽到窄的安全组

创建少量“常规用途”安全组,并将其作为 VPC 的安全基准线。例如,可以为 Windows 和 Linux 实例分别创建用于允许 RDP 和 SSH 连接的安全组,针对相应的管理工具打开必要的端口,并用这些安全组取代“默认”安全组。因为这些安全组会应用给 VPC 中的大部分实例,并且无需考虑实例的具体职能,因此还需要考虑是否真的需要这些安全组的成员能够相互通讯。

安全基准线就位后,可以分别针对 Web 服务器、数据库、ELB、测试环境,或者与您用例有关的任何其他环境创建基于角色的安全组。

(点击放大图像)

Azure 网络安全组

AWS 适用的很多重要原则同样也适用于 Azure,但 Azure 网络安全组(NSG)也有一些重要差异:

  • NSG 可应用于特定虚拟机、子网,或同时应用给这两者
  • NSG 可同时包含“拒绝”和“允许”规则 - 这意味着规则的顺序(或优先级)开始变得重要!
  • 与 EC2 Classic 安全组类似,Azure NSG 只能应用给在同一地区创建的资源
  • Azure 提供了一项名为终结点 ACL(Endpoint ACL)的安全功能,同一虚拟机不能同时应用 NSG 和终结点 ACL
  • 所有 NSG 包含了一套无法更改或删除,但可以覆盖的默认规则

与 AWS 安全组类似,Azure NSG 提供了传入和传出两套规则。

每个规则可包含下列属性:

  • 名称
  • 优先级 - 作为一则最佳实践,可以为优先级使用较大增量的数字(例如 100,200),这样在新增规则时就不需要反复修改不同规则的优先级
  • 来源 - 任意 /CIDR 块 / 标签(标签的介绍见下文)
  • 协议 - TCP/UDP/ 任意
  • 来源端口 - 范围 / 单一端口 / 任意
  • 目标 - 任意 /CIDR 块 / 标签(标签的介绍见下文)
  • 目标端口 - 范围 / 单一端口 / 任意
  • 操作 - 允许 / 拒绝

每个 NSG 中的默认规则为:

传入:

(点击放大图像)

传出:

(点击放大图像)

请留意默认的 Azure 标签:VirtualNetwork、AzureLoadBalancer,以及 Internet。

根据 Azure 文档的介绍:

  • VIRTUAL_NETWORK(虚拟网络): 这个默认标签可代表你的所有网络地址空间。其中可以包含虚拟网络地址空间(Azure 中定义的 CIDR 范围)、已连接的本地环境地址空间,以及已连接的 Azure 虚拟网络(本地网络)。
  • AZURE_LOADBALANCER(Azure 负载平衡器): 这个默认标签可代表 Azure 的基础结构负载平衡器。负载平衡器可转换为 Azure 数据中心内某个用于执行 Azure 运行状况探测任务的 IP 地址。
  • INTERNET(互联网): 这个默认标签可以代表虚拟网络之外,可从公众互联网访问的 IP 地址空间。其范围也包括 Azure 自行拥有的公众 IP 地址空间。

与 AWS 安全组不同,Azure NSG 之间具备层次结构。NSG 可应用给虚拟机,子网,或同时应用给这两者。应用给某一子网的 NSG 也会同时应用该该子网包含的所有虚拟机。

如果 NSG 同时应用给某一子网,以及该子网中的所有虚拟机,传入的流量将首先到达子网 NSG,随后到达虚拟机 NSG。此处一定要注意,只有子网和虚拟机 NSG 同时允许的情况下流量才能顺利通过。

(点击放大图像)

但实际使用时会更复杂一些

Microsoft Azure 有两种部署模式:经典(Classic)和资源管理器(Resource Manager),简单来说一旧一新。这两种部署模式对 Azure 云平台的使用方法有所不同,并且资源供应的处理方式也不相同。强烈建议阅读资源管理器部署和经典部署之间的差异这篇文章。

经典部署 - NSG 会应用给虚拟机。这意味着 NSG 规则会应用给虚拟机发出和收到的所有流量。

资源管理器部署 - NSG 可应用给网卡。这意味着 NSG 规则只会应用给相关网卡。在多网卡计算机上,除非明确配置,否则 NSG 将不处理来自其他网卡的流量。

在这两种部署模式中 - NSG 都可应用给子网。这意味着 NSG 规则可以应用给属于该子网的所有网卡。

我知道这一切看起来有些乱。Microsoft 推荐为新的资源使用资源管理器部署,并建议将现有的所有经典部署资源重新部署为资源管理器模式。建议阅读下列重要且实用的信息:

网络安全组最佳实践

上文讨论的大部分实践都适用于不同云平台。如果你的基础结构包含多个云平台的服务,最好能够尝试以类似的方式针对不同云平台强制应用安全保护。

大部分与 Azure 有关的最佳实践在用于管理 NSG 时,都能让你的工作生活更为简单。

  • 使用资源管理器 - 可行的情况下尽量使用资源管理器部署,而不要使用经典部署。Azure 正在全面转向资源管理器部署,并会逐渐为这种部署模式增加更细致的控制机制。此外新版 Azure 管理门户也使得 NSG 的创建和修改工作变得更简单。如果使用云管理平台,请务必使用能够支持这些新 API 的平台。
  • 使用白名单 - 由于可以同时使用“允许”和“拒绝”规则,不同规则之间很有可能相互抵消。为了让工作变得简单些,请按照其他云平台设置安全组的方式设置 Azure NSG:创建一系列“允许”规则,其他内容通过“全部拒绝”规则处理。
  • 不要使用黑名单 - 或者也可以换种方式主要使用“拒绝”规则,并使用一个“全部允许”规则处理其他内容。但这种做法可能造成过于宽松的策略,以及大量“拒绝”规则。此外一些合规制度不允许针对敏感信息的保护使用“全部允许”规则。这是一种很糟糕的实践,只能猜测 Microsoft 是出于向后兼容性的目的提供这种规则。

结论

本文讨论的重点如下:

  • 云计算催生了一种全新的安全模式,传统的防火墙概念可能无法始终适用
  • 在规划云环境的安全性时,需要考虑云战略日后扩展的可能性,以及在环境中引入更多平台的可能性。请使用一致的方式管理策略,如果能让 AWS 和 Azure 的策略实现一致的效果,无疑可以让你的管理工作更为简单。

我们很乐意了解你对云安全的见解或体验!这一系列的下篇文章将介绍 OpenStack 和 Google Compute Engine 的安全策略。

欢迎随时联系我:ron@scalr.com。

关于作者

Ron Harnik , Scalr 产品营销经理。Ron 是一位技术爱好者、优客(YouTuber)、极客、电视剧追剧党,他还会做非常美味的早餐(麦片粥)。


感谢陈兴璐对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-06-02 17:294366
用户头像

发布了 283 篇内容, 共 106.1 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

用 Pipy 做个 HTTP 隧道

Flomesh

HTTP Pipy 流量管理

【避坑指南】快准狠!一键采购电子元器件

华秋PCB

工具 元器件 PCB PCB设计

软件测试/测试开发 | 使用 cURL 发送请求

测试人

软件测试 自动化测试 curl 测试开发

直播|镜舟 x Smartbi《后疫情下如何利用数据驱动企业逆势破局》

镜舟科技

数据库 镜舟数据库

EMQ受邀出席华为云Top SaaS领航者私享会,共话SaaS企业发展未来

EMQ映云科技

物联网 IoT 华为云 emq 企业号 1 月 PK 榜

软件测试/测试开发 | 接口测试常用代理工具

测试人

软件测试 自动化测试 接口测试 charles 测试开发

【iOS逆向与安全】系统推送服务(APNS)拦截

小陈

安卓 ios开发 逆向 iOS逆向 ios安全

使用“宝塔一键迁移”工具,将单机版typecho博客系统迁移到京东云cvm云主机

京东科技开发者

服务器 京东云 安装宝塔 云迁移 企业号 1 月 PK 榜

【深入浅出Spring原理及实战】「源码调试分析」结合DataSourceRegister深入分析ImportBeanDefinitionRegistrar的源码运作流程

洛神灬殇

spring Spring Framework

SLS:基于 OTel 的移动端全链路 Trace 建设思考和实践

阿里巴巴终端技术

数据采集 Trace 移动端

数据库故障致美国超一万航班取消或延迟

NineData

数据库 运维 数据库开发 数据备份 数据系统

华为云代码检查服务CodeArts Check深度解读——代码缺陷早发现,全面守护软件质量和安全

科技热闻

诠释现代美学设计,TECNO首款笔记本电脑MEGABOOK T1重磅来袭!

Geek_2d6073

震网(Stuxnet)病毒深度解析:首个攻击真实世界基础设施的病毒

华为云开发者联盟

安全 后端 华为云 企业号 1 月 PK 榜 震网

逃不开的安迪-比尔定律,在智能机器人时代该如何破解?

优必选科技

人工智能 机器人 视觉处理

合作升级|Kyligence 跬智智能分析平台入选华为云联营商品

Kyligence

数据分析

Databend 内幕大揭秘第一弹 - minibend 简介

Databend

rust

跳跃表数据结构与算法分析

京东科技开发者

redis 算法 跳跃表; 数据结构算法 企业号 1 月 PK 榜

ChatGPT中文版重装上阵

felix

openai ChatGPT AIMODELMARKET

软件测试/测试开发 | 接口测试之HTTP、HTTPS 抓包分析

测试人

https 软件测试 HTTP 自动化测试 测试开发

软件测试/测试开发 | 使用postman发送请求

测试人

软件测试 Postman 自动化测试 接口测试 测试开发

从指标到洞察力的普罗米修斯

宋小生

Prometheus 普罗米修斯 普罗米修斯监控

TracedModule: 更友好的模型表示方案,模型训练到部署的桥梁

MegEngineBot

深度学习 开源 MegEngine 模型训练到部署

稳定支撑千万级月活,华为日历背后的英雄

华为云开发者联盟

数据库 后端 华为云 企业号 1 月 PK 榜

易观千帆 | 11月用户体验GX评测:银行APP用户体验稳定提升,从流量竞争逐渐转向用户体验竞争

易观分析

用户体验 手机银行

YonBuilder 应用构建教程之移动端扩展

YonBuilder低代码开发平台

书单 | 春节假期,我想把这几本书带回家!

博文视点Broadview

报告下载 | DQMIS高端闭门论坛成果报告——《2022第六届数据质量管理国际峰会关于数据要素发展几点看法和建议》

数据质量管理智库

数据 数据治理 数据安全 隐私计算 数据要素

又一重要进展发布!OpenMMLab算法仓支持昇腾AI训练加速

华为云开发者联盟

人工智能 华为云 昇腾AI 企业号 1 月 PK 榜

百度安全入选权威报告《联邦学习与可信AI市场机会分析》典型厂商

百度安全

软件测试/测试开发 | 接口测试之HTTP 协议讲解

测试人

软件测试 HTTP 自动化测试 接口测试 测试开发

AWS论剑Azure:安全组之争_亚马逊云科技_Ron Harnik_InfoQ精选文章