公有云运维安全常见四大难题及解决方案

时间:2024-03-11 20:24:50

乘长假期间春光明媚,得空回顾了一下十年工作。

深以为,运维安全绝对是企业安全保障的基石。

看到这儿,有些程序猿不禁要问,哥们,你是不是写错了,应该是安全运维吧!

非也!

事实上,安全运维和运维安全是两个概念。

我的理解:安全运维是工程师对各种安全设备和软件进行运维保障系统安全,而运维安全相比之下是涵盖了整个云计算系统和安全有关的方方面面。本文主要探讨公有云环境下运维安全常见的难题及解决方案。

目前使用公有云的用户可以分为两类:

一是一开始业务就部署在公有云上面,主要以新兴互联网公司为主。

二是已经有自建的IT环境,需要向公有云上迁移。伴随着用户IT环境从传统自建IDC向公有云环境的转变,运维工作也从内网环境迁移到公网中,这对用户来说是一个非常大的改变。

本文主要讨论传统IT环境向公有云迁移面临的运维安全问题,要知道,传统IT环境下所有IT基础设施和数据都是用户自己掌控。从心理上来讲用户感觉会更安全,对公网的暴露面也更小。一旦用户将业务和数据都迁移到公共云上,用户可能会有不安全感。

事实上,公共云在基础架构安全性方面远超一般用户自建的IDC,主要体现在以下方面:

  1. 因为公有云IDC机房建设规格非常高,所以公有云的IDC机房在电力、空调等方面可用性更有保障;
  2. 公有云有比较好的网络资源,所以公有云的网络质量更好;
  3. 公有云的服务器都是批量采购和检测,并且一般都有可靠的存储系统,公有云的硬件可靠性也更有保障;
  4. 公有云系统、安全方面都有非常专业的团队,都是业界*水平,使用公有云在系统、安全方面的风险更小;

但是,笔者从事运维工作十年,最近在公共云运维实践过程中也发现:计算环境从本地到云端自身安全性是提高了,但云上的运维工作却面临着一些新的安全风险和挑战。
因为公共云的运维管理工作必须通过互联网完成,和传统IT环境运维有很大不同,总结起来风险主要来自以下四个方面:

  1. 运维流量被劫持:公共云场景下运维最大的变化就是运维通道不在内网,而是完全通过互联网直接访问公共云上的各种运维管理接口。很容易被嗅探或中间人劫持攻击,造成运维管理账号和凭证泄露。
  2. 运维管理接口暴露面增大:原来黑客需要入侵到内网才能暴力破解运维管理接口的密码,而现在公共云上的用户一般都是将SSH、RDP或其它应用系统的管理接口直接暴露在互联网。只能依靠认证这一道防线来保证安全,黑客仅需破解密码或绕过认证机制就能直接获取管理员权限。
  3. 账号及权限管理困难:多人共享系统账号密码,都使用超级管理员权限,存在账号信息泄露和越权操作风险。
  4. 操作记录缺失:公共云中的资源可以通过管理控制台、API、操作系统、应用系统多个层面进行操作。如果没有操作记录,一旦出现被入侵或内部越权滥用的情况将无法追查损失和定位入侵者。

这些风险都是公共云场景下进行运维工作的常见风险。

阿里云在创立第一天就认定安全是头等重要的事情。针对这些问题,阿里云提供了多种安全防护措施供用户使用。用户可以利用阿里云平台产品自身的安全机制、云盾、云市场中的第三方安全产品配合,来缓解或消除这些风险。

加强运维安全工作可以采取的具体措施如下:

  1、使用VPC网络帮助用户基于阿里云(http://click.aliyun.com/m/1328/ )构建出一个隔离的网络环境。用户可以完全掌控自己的虚拟网络,包括选择自有IP地址范围、划分网段、配置路由表和网关等。

  从运维安全的角度出发使用VPC网络还需要再对VPC网络内部网段进行划分,一般建议分为三个网段:互联网应用组、内网应用组、安全管理组。

  

  三个网段之间采用安全组隔离,并设置相应的访问控制策略,限制所有实例SSH、RDP等运维管理端口只允许安全管理组访问。建议策略如下:

  互联网应用组建议策略

  

  安全管理组建议策略

  

  内网应用组建议策略

  

  2、搭建从运维工作地到阿里云的加密运维通道,用户可以在阿里云安全市场购买专业的VPN设备来搭建加密运维通道,保证运维流量不被劫持。

  运维用的VPN一般建议采用L2TP/IPSEC VPN,可以采用Site To Site或拨号两种模式。如果是有大量运维人员在固定办公地点办公可以使用Site to Site模式,建立一条从运维办公地到公共云的长连接加密通道,公共云上的安全管理组网段就相当于本地运维网络的延伸。如果运维人员较少并且经常移动办公,可以采用拨号VPN的模式,需要运维时再拨号连入安全管理组网段。当然也可以同时采用这两种模式,兼顾固定地点和移动办公运维。

  最后再建议如果使用拨号模式VPN时,一定要启用双因素认证,配合数字证书或动态口令令牌使用,提高VPN接入安全性。

  3、使用阿里云RAM,将阿里云主账号与日常运维账号分离,限定运维账号管理权限和范围。这样即使运维账号信息泄露也不会危及整个云基础设施安全。RAM最佳实践如下:

  为根账户和RAM用户启用MFA

  建议您为根账户绑定MFA,每次使用根账户时都强制使用多因素认证。如果您创建了RAM用户,并且给用户授予了高风险操作权限(比如,停止虚拟机,删除存储桶),那么建议您给RAM用户绑定MFA。详细了解多因素认证请参考管理MFA设备

  使用群组给RAM用户分配权限

  一般情况下,您不必对RAM用户直接绑定授权策略,更方便的做法是创建与人员工作职责相关的群组(如admins、developers、accounting等),为每个群组绑定合适的授权策略,然后把用户加入这些群组。群组内的所有用户共享相同的权限。这样,如果您需要修改群组内所有人的权限,只需在一处修改即可。当您的组织人员发生调动时,您只需更改用户所属的群组即可。

  将用户管理、权限管理与资源管理分离

  一个好的分权体系应该支持权力制衡,尽可能地降低安全风险。在使用RAM时,您应该考虑创建不同的RAM用户,其职责分别是RAM用户管理、RAM权限权限、以及各产品的资源操作管理。
为用户登录配置强密码策略
如果您允许用户更改登录密码,那么应该要求他们创建强密码并且定期轮换。您可以通过RAM控制台为RAM用户创建密码策略,如最短长度、是否需要非字母字符、必须进行轮换的频率等等。

  定期轮转用户登录密码和访问密钥

  建议您或RAM用户要定期轮换登录密码或访问密钥。在您不知情的时候,如果出现凭证泄露,那么凭证的使用期限也是受限制的。您可以通过设置密码策略来强制RAM用户轮换登录密码或访问密钥的周期。

  撤销用户不再需要的权限

  当一个用户由于工作职责变更而不再使用权限时,您应该及时将该用户的权限进行撤销。这样,如果在不知情的时候,当用户的访问凭证泄露时对您带来的安全风险最小。

  将控制台用户与API用户分离

  不建议给一个RAM用户同时创建用于控制台操作的登录密码和用于API操作的访问密钥。通常只给员工创建登录密码,给系统或应用程序只创建访问密钥。

  使用策略限制条件来增强安全性

  建议您给用户授权时设置策略限制条件,这样可以增强安全性。比如,授权用户Alice可以关停ECS实例,限制条件是Alice必须在指定时间、并且您公司网络中执行该操作。

  不要为根账户创建访问密钥

  由于根账户对名下资源有完全控制权限,所以为了避免因访问密钥泄露所带来的灾难性损失,我们不建议创建根账号访问密钥并使用该密钥进行日常工作。创建根账号的访问密钥需要通过登录阿里云控制台才能完成,该操作需要多因素认证,并且还支持严格的风控检查。只要根账户不主动创建访问密钥,账号名下的资产安全风险可控。

  遵循最小授权原则

  最小授权原则是安全设计的基本原则。当您需要给用户授权时,请授予刚好满足他工作所需的权限,而不要过渡授权。比如,在您的组织中,如果Developers组员(或者一个应用系统)的工作职责只需要读取OSS存储桶里的数据,那么就只给这个组(或应用系统)授予OSS资源的只读权限,而不要授权OSS资源的所有权限,更不要授予对所有产品资源的访问权限。

  4、Linux使用密钥登录,不要使用账号密码登录,一劳永逸的解决账号暴力破解问题。具体配置方法如下:

  Ubuntu 14.04.1为例,设置步骤如下:

  一、生成密钥的公钥和私钥

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory \'/root/.ssh\'.
Enter passphrase (empty for no passphrase): #输入密码
Enter same passphrase again:                #输入密码
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
1c:37:a8:a3:65:a2:4a:89:ab:46:30:ad:54:d1:40:eb root@iZ28vo50eu5Z

  二、将生成的私钥(id_rsa)下载到本地的windows机器上,并把公钥导入到.ssh/authorized_keys 文件中去

  #cd /root/.ssh/
   #cat id_rsa.pub > authorized_keys 

  三、设置sshd  服务器服务,打开以下设置:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      /root/.ssh/authorized_keys
修改以下设置:
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no 

  四、重启ssh服务

#service ssh  restart 

  五、导入私钥到远程工具中,比如xshell。


  5、可以修改ECS Windows 服务器的默认远程桌面3389端口,以降低针对远程桌面的恶意扫描和攻击。具体配置方法如下:

  一、使用工具进行自动修改

  您可以在云市场中购买和使用【3389远程端口修改工具】进行3389默认端口的自动修改。

  二、手工修改:

  1)【开始】----【运行】中输入"regedit"打开注册表编辑器;

  2)依次展开"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\tcp"注册表项;

  3)其下的"PortNumber”键值所对应的端口号就是远程桌面端口,将其修改为用户需要的端口即可;

  

  4)再依次展开注册表中"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp"注册表项;

  5)同样按照上面的方法将"PortNumber"键值进行更改保存。

  注意:修改后需要检查防火墙、tcp/ip筛选中是否有安全规则限制,并需要重启服务器后生效。

  1)Windows 2003开启端口方法:

  远程登陆服务器后,进入控制面板双击“windows防火墙”,打开防火墙后,点击“例外”选项卡可以看到服务器上已添加的开放端口,点击“添加端口”,在弹出的框中输入您需要添加的端口号,确定完成。再进入控制面板点击“网络连接”,在外网网卡上点击鼠标右键“属性”,并双击“Internet 协议 (TCP/IP)”,点击“高级”,在弹出的框中点击“选项”,点击“属性”,在TCP/IP筛选的弹出框中,添加TCP协议的端口,确定后重启服务器,端口就开通了。

  2)Windows 2008 开启端口方法:

  远程登陆服务器后,进入控制面板--wiindows防火墙,打开windows防火墙,选择“高级设置”,左上方选择“入站规则”,在右上方选择“新建规则”,进入规则向导页面选择“端口”,下一步协议选择“TCP”,选择特定本地端口填写您要开启的端口号,下一步选择“允许连接”,下一步设置允许应用到的规则域区域,建议全部选择,下一步设置端口名称,完成即可。

  6、安装云盾安骑士客户端,安骑士不仅能拦截密码破解和发现异地登录问题,还能提高主机安全防护能力,推荐用户都安装。

  7、使用集中的特权及账号管理系统统一管理运维账号和权限,比如阿里云安全市场中的专业堡垒机,解决系统账号复用、运维权限混乱、运维过程不透明等运维难题,并将系统操作日志记录下来以备审计。

  8、开启阿里云ActionTrail,记录用户的云账户资源操作,提供操作记录查询,并可以将记录文件保存到用户指定的OSS存储空间。利用 ActionTrail保存的所有操作记录,可以实现云端用户权限安全分析、资源变更追踪以及合规性审计。

  

  打开ActionTrail控制台,进入“历史事件查询”,将可以看到最近7天的操作记录。

  

  总体架构示意图

  安全防护是一个系统性的工作,上面这些建议仅是云端运维安全最基本的一些要求。如果需要更深入的解决方案可以联系阿里云安全解决方案团队。