本文为您提供关于安全组的使用的最佳实践建议。

管理维护建议

  • 安全组应作为白名单使用,即默认拒绝所有外部访问,通过添加允许规则来放行指定的端口范围和地址。同时,添加安全组规则时应遵循最小授权原则。例如,开放 Linux 实例的 22 端口用于远程登录时,建议仅允许特定的 IP 访问,而非所有 IP。

  • 建议根据不同业务场景的隔离需求,为不同的应用设置不同的安全组及安全组规则。例如,针对 Webservice、数据库、缓存、应用服务器分别设置一个安全组,然后绑定在对应类型的云服务器上。

  • 建议为不同的应用创建 IP/端口集合。在安全组规则中适用 IP/端口集合替代手动输入 IP 地址,可以简便运维,减少地址错漏。

  • 尽可能保持单个安全组的规则简洁,减少安全组中的规则数量。建议单个安全组规则数量越少越好,最多不超过 300 条。原因如下:

    • 当实例绑定多个安全组,且单个安全组规则数量很多,管理将非常复杂,系统要花大量时间聚合所有安全组规则来分析访问是否被允许。

    • 云服务器绑定安全组的时间与安全组规则数量成正比,规则数量越多,绑定云服务器越慢。

    • 安全组应用修改的时间与安全组规则数量成正比,规则数量越多,应用修改越慢。

  • 安全组应用修改时长与绑定的云服务器数量成正相关,若安全组绑定的云服务器太多,应用修改操作可能超时。

  • 在生产环境修改安全组之前,建议先对安全组规则执行备份操作。当修改安全组并应用修改后,若发现异常,可以迅速进行回滚操作和应用修改,避免应急修改带来更多的错漏和问题。

  • 当大量云服务器需要绑定相同安全组规则时,建议使用规则子集,将规则子集加入到多个安全组中,再将这多个安全组绑定到云服务器上,以分散单个安全组绑定云服务器的数量。

安全实践建议

  • 不建议放通 0.0.0.0/0 访问,这表示对公网的所有用户暴露了访问端口,存在安全风险。建议只开放 80、8080 和 443 等常用 TCP 端口的公开访问,其他端口均关闭。

  • 公网服务的云服务器和内网服务器分别绑定不同的安全组。公网访问的云服务器仅仅暴露对外提供需要服务的端口,例如 80、443。

  • 可以在日常运行维护中采用专用跳板机,云服务器仅对运维跳板机开放运维端口,例如 Linux TCP(22)或者 Windows RDP(3389),并且通过工具做好访问鉴权和运维登录的审计记录,来进一步降低风险。

注意事项

  • 不同的应用有不同的安全管理要求,不应使用一个安全组管理所有应用,否则可能导致安全组过于庞大而难以保证安全,并且难以维护。

  • 不建议为每台实例单独设置一个安全组,避免安全组数量过多导致维护困难。

  • 安全组规则优先级一致情形下,规则如果有冲突。规则的生效取决于数据库的读取顺序,无法预测,因此建议用户不要为有冲突的规则配置相同的优先级。