我找不到任何有关 AWS 安全组的最佳实践。我认为可以采用两种方法,但我不确定这两种方法是否有任何特定的缺点。
场景 1:
定义小型、专门的安全组,例如“ssh”、“mongodb”、“web”等,然后本质上在每个 EC2 实例上“堆叠”多个安全组以指定哪些端口是打开的。
场景 2:
定义更大、更通用的安全组(例如打开端口 80、443、ssh、数据库的“web1”),并将其应用于任何适当的 EC2 实例。
我想我更愿意采用方案 1,但不知道这种方法是否存在任何缺点或技术问题。有最佳实践吗?
答案1
AWS 限制您可以应用于网络接口的组数量:Security groups per network interface 5
一种常见的方法是创建 SG,以便于更新您的服务器群,但对于应用它们的所有主机来说仍然有意义。
考虑以下几点
这些因素将决定您想要为实例安全组开放的内容。
- 使用 NACL 进行粗粒度权限
- 使用 SG 实现更具体的访问
- 将您的实例放在私有子网中(此建议适用于非面向公众的实例。例如,您使用 ELB 连接到您的 Web 实例)
通用方法
考虑到所有这些,一种常见的方法是:
- 所有实例都有一个共同的安全组(其中包含您希望应用于每个实例的规则)
- 每个实例都有一个角色,例如“Web 服务器”或“邮件服务器”或“postgres db”,并且每个角色都有一个关联的安全组
- 您的特定实例可能有一个额外的安全组,用于前两个组未涵盖的任何自定义
“常见”SG 的变体:
- “common_linux 或 common_windows”
- “common” AND “common_linux 或 common_windows”。