本文介绍在创建和使用实例过程中提高实例安全性的做法。

背景信息

安全涵盖的范围广泛,阿里云保证自身云基础实施和服务的安全,例如机房、虚拟化平台等,但您在使用云产品过程中遵循安全实践同样重要,例如流量控制、机密信息保管、权限控制等。

使用账号安全功能

阿里云提供账号相关的安全功能,帮助您在账号级别防范风险。
  • 为阿里云账号启用多因素认证MFA。

    启用MFA后,登录阿里云控制台时需要输入账号密码和MFA设备实时生成的动态验证码,在账号密码泄露时也可以阻止未授权访问,提高账号安全性。具体操作,请参见启用MFA

  • 使用RAM用户和用户组在账号级别对资源进行访问控制。

    在多用户需要协同操作资源的场景中,建议避免直接共享使用阿里云账号。共享阿里云账号的密钥等机密信息会大大增加泄露风险,一旦泄露会威胁账号下所有资源的安全。建议使用访问控制RAM创建RAM用户和用户组,并授予各RAM用户和用户组最小权限,可以有效降低风险。

    RAM用户对应企业内的员工、系统或应用程序,您可以按需为RAM用户授予最小的访问权限。如果分工明确,您还可以通过用户组分类职责相同的RAM用户,提高批量管理效率。示例如下:
    1. 为需要创建和管理资源的职位创建SysAdmins用户组,并添加权限策略,授予执行所有操作的权限。
    2. 为需要使用资源的职位创建Developers用户组,并添加权限策略,授予调用StartInstance、StopInstance、DescribeInstances接口的权限。
    3. 为员工创建RAM用户,并按照各自职位加入用户组。
    4. 为加强网络安全控制,添加权限策略,规定如果组内用户的IP地址不是来自企业网络,则拒绝其访问资源。
    5. 如果某开发人员的职位变更为系统管理员,将其RAM用户从Developers用户组移动到SysAdmins用户组 。
    6. 如果Developers用户组的RAM用户需要更大权限,修改用户组的权限策略即可应用到用户组中的所有RAM用户。

    更多信息,请参见账号访问控制

  • 使用实例RAM角色避免泄露AccessKey。

    如果实例上部署的应用程序需要访问阿里云其他云产品(例如OSS、VPC、RDS等)的API,请避免将AccessKey固化在实例中,例如写在配置文件中,这种方式有很高的泄露风险。

    建议使用实例RAM角色,为实例绑定实例RAM角色后,可以基于STS(Security Token Service)临时凭证访问其他云产品的API,即可以保证云账号AccessKey安全,还可以借助访问控制RAM实现精细化控制和权限管理。更多信息,请参见实例RAM角色概述

创建实例时启用安全合规特性

阿里云提供了实例规格、云盘加密等满足实例安全合规要求的特性,您可以按需选择。
  • 开通密钥管理服务。

    如果您需要加密云服务相关的数据,建议您提前开通密钥管理服务,无需自行研发和运维密码设施即可在云服务中使用数据加密功能,例如在云服务器ECS中使用云盘加密、实例可信启动等功能。具体操作,请参见开通密钥管理服务

  • 为高安全可信要求的业务选择安全增强型实例。

    安全增强型实例基于TPM/TCM芯片提供可信计算能力,保障实例可信启动和实例中隐私数据的安全。更多信息,请参见安全增强型实例概述

    例如,选择c6t规格。instance-type
  • 为有等级保护要求的业务选择等保合规镜像。

    选择阿里云自研的Alibaba Cloud Linux 2.1903 LTS 64位等保2.0三级版镜像后,无需额外配置即可满足身份鉴别、访问控制、安全审计、入侵防范、恶意代码防范的等保合规要求。

    在创建实例时选择对应镜像即可,关于该等保合规镜像的使用方法,请参见Alibaba Cloud Linux等保2.0三级版镜像使用说明image
  • 为使用公共镜像的实例启用安全加固。
    启用安全加固的实例在启动时会加载基础安全组件,支持检测异常登录、DDoS攻击、主流漏洞以及云产品安全配置等,并可以通过云安全中心统一管理资产。更多信息,请参见云安全中心免费版简介image-security-enhanced
  • 启用云盘加密。
    云盘加密功能采用AES-256加密算法,利用了托管在密钥管理服务中的服务密钥,您无需自建和维护密钥管理基础设施即可保护云盘数据的安全。具体操作,请参见加密系统盘加密数据盘。加密云盘后的效果如下:
    • 系统盘:操作系统内的数据会被自动加密,并在读取数据时自动解密。
    • 数据盘:将加密云盘挂载到实例后,云盘中的静态数据、云盘和实例间传输的数据(不包括操作系统内的数据)、云盘从实例传递到后端存储集群的数据都会被自动加密,并在读取数据时自动解密。此外,从加密云盘创建的所有快照、从加密快照创建的所有云盘也会被自动加密。
    例如,加密随实例添加的数据盘。disk-encryption
  • 使用快照进行容灾备份。

    快照是一种便捷高效的数据容灾手段。定期创建快照备份云盘数据后,如果因系统故障、操作失误等原因而导致云盘数据异常或丢失,您可以从最近时间点的快照恢复云盘数据,减少损失。在执行重要操作前,也建议创建快照,避免操作时出现意外情况。

    例如,在创建实例时启用快照服务,每天为所有云盘自动创建快照。auto-snapshot

为实例搭建安全的网络环境

搭建网络环境时遵循安全做法,例如网络隔离、网络流量控制等,让实例暴露在有限的范围内,减少被攻击的可能性。
  • 使用安全组减少攻击范围。
    安全组是一种虚拟防火墙,您可以基于安全组控制实例的入流量和出流量。使用安全组时建议如下:
    • 将安全组作为白名单使用,即默认拒绝所有访问,通过添加安全组规则设置允许访问的端口范围和授权对象。安全组支持五元组规则,您可以精确控制源IP、源端口、目的IP、目的端口以及传输层协议,更多信息,请参见安全组五元组规则
    • 添加安全组规则时遵循最小授权原则。例如,开放Linux实例的22端口用于远程登录时,建议仅允许特定的IP访问,而非所有IP(0.0.0.0/0)。

      阿里云提供潜在高危安全组检测功能,帮助您及时发现未限制访问的安全组规则。具体操作,请参见查看潜在高危安全组

      如果发现未限制访问的安全组规则,请审视是否需要开放对应的端口,并及时修改过高的授权。例如,如果实例上安装了MySQL数据库服务,不应默认向公网开放3306端口。请将当前安全组规则的改为拒绝所有IP访问,将优先级设为最低,然后遵循最小授权原则添加允许访问的安全组规则。

    • 单个安全组内尽量保持规则简洁。单台实例可以加入多个安全组,单个安全组可以添加多条安全组规则,如果应用在单台实例上的安全组规则过多,会增加管理复杂度并引入风险。
    • 不同类型应用的实例加入不同的安全组,分别维护安全组规则。例如,需要接受公网访问的实例加入同一个安全组,默认拒绝所有访问,然后设置仅暴露对外提供服务的端口(例如80、443等)。同时避免在接受公网访问的实例上提供其他服务,例如MySQL、Redis等,建议将内部服务部署在不接受公网访问的实例上,并加入单独的安全组。
    • 合理利用普通安全组的网络连通策略。普通安全组中的实例默认互通,部分情况下利用默认互通可以降低管理复杂度。例如,已经存在多个安全组,如果为几台需要内网互通的实例添加安全组规则过于复杂,可以为这些实例新建一个安全组。但实例数量较多时,不建议用一个安全组管理所有的实例,会导致该安全组对外的规则管理过于复杂。

      普通安全组也支持设置组内隔离,更多信息,请参见普通安全组内网络隔离

    • 合理使用普通安全组的组间授权控制内网通信。例如,在分布式应用中,为Web服务和MySQL数据库服务分别创建了安全组SG_Web和SG_Database,您可以在SG_Database中添加安全组规则,授权SG_Web中的实例访问SG_Database中实例的3306端口。

      经典网络类型实例的内网IP经常变化,因此也建议使用安全组间授权,而非基于CIDR网段或内网IP授权。

    • 避免直接修改线上环境使用的安全组。修改安全组设置后会自动应用于组内所有实例,您可以先克隆一个安全组并在测试环境调试,确保修改后实例间通信正常。
    • 合理定义安全组名称、标签等,方便快速识别安全组的用途,在管理较多安全组时更加清晰。关于如何 标签,请参见创建或绑定标签
  • 使用专有网络隔离企业内部不同安全等级的服务。
    专有网络之间通过隧道技术实现逻辑上彻底隔离,您可以基于阿里云专有网络实现网络隔离。使用专有网络时建议如下:
    • 将需要严格隔离的业务系统部署在不同的专有网络中,例如生产环境和测试环境。
    • 在专有网络内使用交换机划分子网,管理访问策略不同的服务,例如将Web服务部署在提供公网访问能力的子网中、将数据库服务部署在对外完全隔离的子网中。

    更多结合业务规划网络的建议,请参见网络规划

  • 合理使用跳板机或堡垒机防御内外部入侵。
    在专有网络中,建议为用作跳板机的实例创建专用的虚拟交换机,通过分配EIP或配置NAT端口转发表获取公网访问能力,同时通过安全组控制访问。示例如下:
    1. 为跳板机创建专用的安全组SG_Bridge,仅授权访问必要的端口(例如Linux实例的22端口、Windows实例的3389端口)并将授权对象限制为特定的IP或CIDR网段,降低跳板机被未授权登录的概率。
    2. 将跳板机加入到安全组SG_Bridge中。
    3. 配置安全组间访问规则,让跳板机可以访问其他安全组中的实例。
      例如,在安全组SG_Current中添加安全组规则,授权对象为安全组SG_Bridge,限制通过特定的协议访问特定的端口。
      说明 通过跳板机登录其他实例时,建议优先使用SSH密钥对。更多信息,请参见SSH密钥对概述

    跳板机可以在一定程度上增强安全性,但权限仍然较大而且不易审计操作行为。您可以使用更加安全的堡垒机,满足运维工作对权限受控、操作审计、安全合规的要求。阿里云也提供了堡垒机产品,更多信息,请参见什么是堡垒机

  • 仅为必须的实例提供公网访问能力。
    通过合理的方式提供公网访问能力,可以简化访问管理并减少受到外部攻击的风险。建议如下:
    • 大多数分布式应用包括不同的分层和分组,避免为不提供公网访问的实例分配公网IP。如果有多台实例提供公网访问,建议使用负载均衡服务分发公网流量,提升安全性和可用性,避免在公网环境暴露过多实例和因实例的单点故障影响访问。更多信息,请参见什么是传统型负载均衡CLB
    • 如果专有网络中未分配公网IP的实例只需要访问公网,优先使用NAT网关的SNAT功能提供代理服务,避免因为只需访问公网就将实例直接暴露在公网环境。创建SNAT条目时指定实例或交换机提供公网访问能力,具体操作,请参见创建SNAT实现访问公网服务

使用云安全产品构建安全防御体系

阿里云提供全面的安全产品和服务,帮助您全面提升云上资产在各种场景下的安全性。更多信息,请参见阿里云安全介绍
  • 使用阿里云DDoS防护服务抵御网络流量攻击。

    DDoS攻击指将多台计算机联合起来作为攻击平台,通过远程连接利用恶意程序,对一个或多个目标发起DDoS攻击,消耗目标服务器性能或网络带宽,从而造成服务器无法正常地提供服务。

    阿里云提供DDoS原生防护、DDoS高防等产品,其中DDoS原生防护直接为阿里云公网IP资源(包括云服务器ECS、负载均衡、Web应用防火墙和弹性公网IP)提升DDoS攻击防御能力,适用于资源部署在阿里云上的业务。当流量超出DDoS原生防护的默认清洗阈值后,自动触发流量清洗,实现DDoS攻击防护。您也可以按需自定义清洗阈值,具体操作,请参见设置流量清洗阈值

    DDoS原生防护基础版免费提供不超过5 Gbps的DDoS防护能力,默认开启无需购买。如果您需要更高的防护能力,请购买DDoS防护收费服务,更多信息,请参见阿里云DDoS防护产品介绍

  • 接入阿里云云安全中心防御系统安全漏洞。

    云安全中心免费为ECS实例提供基础的安全加固能力,支持检测异常登录、DDoS攻击、主流漏洞以及云产品安全配置等。更多信息,请参见云安全中心免费版简介

    云安全中心免费版仅支持检测风险,但不支持处理风险。如需修复漏洞、主动防御等功能,请前往云安全中心控制台购买付费版。

    除免费版的基础安全加固能力外,云安全中心付费版支持更丰富的功能。例如:
    • 漏洞修复:一键修复Linux软件漏洞、Windows系统漏洞等漏洞。漏洞是长期存在的安全风险,云安全中心可以为您解决漏洞发现不及时、修复效率低等问题。
    • 病毒防御:针对病毒提供扫描、告警、深度查杀和数据备份的能力,有效防御病毒入侵您的服务器。
    • 安全告警:针对网页防篡改、进程异常、网站后门、异常登录、恶意进程等威胁提供全面的安全告警类型检测,帮助您及时发现资产中的安全威胁。

    详细的云安全中心功能特性列表,请参见云安全中心功能特性

  • 购买阿里云Web应用防火墙防御应用安全漏洞。

    Web应用防火墙可以有效识别Web业务流量的恶意特征,在对流量进行清洗和过滤后,将正常、安全的流量返回给服务器,避免网站服务器被恶意入侵导致服务器性能异常等问题,保障网站的业务安全和数据安全。

    使用Web应用防火墙时,无需安装任何软硬件或调整路由配置,即可针对性防护常见Web应用攻击、缓解恶意CC攻击等,提高网站安全性。接入Web应用防火墙的具体步骤,请参见Web应用防火墙快速入门

    在DDoS防护、云安全中心安全加固的基础上,针对网站使用Web应用防火墙可以进一步增强防护能力,全面地提高业务安全性。

实例操作系统内安全配置

操作系统内安全配置是一台实例安全的最后一道屏障,配置得当可以有效降低被入侵的风险。
  • 提升登录配置的安全性。
    • Linux实例:
      • 配置仅允许使用SSH密钥对登录Linux实例。SSH密钥对通过加密算法生成一对密钥,默认采用RSA 2048位的加密方式,相比密码更加安全和便捷。关于SSH密钥对的特性和操作介绍,请参见SSH密钥对概述通过密码或密钥认证登录Linux实例通过密钥认证登录Linux实例
      • 日常不使用root用户登录Linux实例,使用其他用户作为管理员。如果该用户执行需要管理员权限的操作,可以通过sudo命令提权。
    • Windows实例:使用强密码,8~30个字符,必须至少同时包含大写字母、小写字母、数字、特殊字符( ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/)中的三项,建议包含特殊字符。使用密码登录实例时,建议定期更换密码。
  • 保护服务端口。

    服务器在提供服务时需要开启服务端口,开启的服务端口越多,潜在风险越大。建议只对外开启必要的服务端口,将服务默认的端口号修改为更高的端口号(大于30000),并通过防火墙、安全组等手段控制对端口访问。修改服务器默认远程端口的具体操作,请参见修改服务器默认远程端口

    例如,尽量只在内网环境中访问数据库服务,避免数据库服务暴露在公网环境。如果必须要从公网环境访问数据库服务,将默认端口号(例如,MySQL数据库为3306)修改为更高的端口号,并授权特定的IP访问。

  • 避免使用弱口令。

    使用弱口令容易被猜到或破解,然后非法登录服务器窃取数据或破坏服务器。建议您设置复杂的密码并定期修改密码。更多信息,请参见提升登录口令安全最佳实践

使用服务时遵循安全做法

除各类安全产品和配置外,在部署完成后使用服务时也需要遵循安全做法,避免泄露AccessKey、密钥、账号密码等机密信息,并使用审计类功能跟踪使用情况。
  • 妥善保管和使用机密信息。
    • 阿里云AccessKey相当于调用云服务API时的登录密码,是访问内部资源时重要的身份凭证。建议如下:
      • 使用RAM用户的AccessKey,而非阿里云账号的AccessKey,并在为RAM用户授权时遵守最小权限原则,避免因泄露AccessKey威胁账号下所有资源的安全。
      • 不要在代码中直接写入AccessKey,避免不慎随代码泄露。
      • 定期轮换AccessKey,保证即使不慎泄露旧AccessKey也不会影响线上业务。
      • 定期吊销不再使用的AccessKey。
      • 使用操作审计功能,并将操作日志保存到SLS Logstore或OSS存储空间中。
      • 关注云安全中心的AccessKey泄露检查通知。云安全中心默认为用户开启AccessKey泄露检查功能,可以精准检测在Github上泄漏的AccessKey并通知用户及早响应,尽可能减少负面影响。
    • 密钥、账号密码安全建议如下:
      • 不同平台间使用不同的密钥、账号密码,避免不慎泄露后影响多个平台中资源的安全。
      • 实例上不同用户间避免共享密钥、账号密码。
      • 用途保持单一,例如勿将远程连接实例的密钥用于其他场景。
    • 使用密钥管理服务安全托管机密信息,避免明文存储。

    更多信息,请参见AK和账密防泄漏最佳实践

  • 数据传输加密。

    在实例和客户端之间传输的敏感数据时使用加密协议(例如TLS1.2及以上版本),并配置安全组和操作系统防火墙,确保实例和敏感远程网络服务之间仅允许通过加密连接通信。

  • 使用操作审计功能。
    操作审计可以记录账号的操作事件,并将记录文件保存到SLS Logstore或OSS存储空间中,供您进行安全分析、合规审计和资源变更跟踪。具体操作,请参见创建单账号跟踪。操作审计的应用示例如下:
    • 分析登录时间、登录IP、是否使用多因素认证MFA登录等信息,判断账号是否存在异常登录等安全问题。
    • 如果组织内有多名成员,并使用了访问控制RAM管理成员的身份,获取每个成员的详细操作记录,满足组织合规性审计需要。
    • 在资源状态出现异常变更时,例如一台实例异常停机,可以通过操作日志查找操作人、操作时间、发起操作的IP地址等信息,定位和排查问题。