使用 AWS 网络 ACL 还是 SG 进行访问控制?

Using an AWS Network ACL versus an SG for access control?

我在 AWS 上有一个 Ubuntu EC2 实例 运行。我一直使用网络 ACL 来控制对端口 22 的访问,而不是使用安全组。

问题 1:对于单个 EC2 实例的用例,使用 NACL 与 SG 进行访问控制之间有优缺点吗? (除了有状态与无状态以及 AWS VPC 安全文档中的其他差异。)

问题二:大环境如何处理?有最佳实践吗? (我知道一家大公司的 NACL 完全开放,并通过 SG 控制一切。)

我试图找到答案的第一件事是阅读 AWS 的 VPC 安全文档:https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Security.html

我在我的用例中看到了几种访问控制方法:

选项 1:将 NACL 入口限制为端口 80、443 和临时端口为 0.0.0.0/0。添加每个 IP 地址的端口 22 访问。拒绝所有其他流量。 (这是我一直在做的。)如果我想要一个私有子网实例,我会通过 SG 将私有子网限制到 Public 子网的内部 CIDR。

方案二:对外开放NACL,使用SG对EC2实例进行访问控制。

选项 3:冗余并同时使用。

当我去一个新位置(咖啡店)并想通过 SSH 连接到我的实例时,我登录到 AWS 控制台并添加一个新的 NACL 规则以允许 IP 地址端口 22 访问。向 NACL 和 SG 添加规则似乎需要相同数量的鼠标点击和输入。

关于实际环境创建,我使用terraform。使用任一选项设置资源都非常容易,所以我不认为这是赞成还是反对。

NACL 资源:

  ingress {
    protocol   = 6
    rule_no    = 300
    action     = "allow"
    cidr_block = "0.0.0.0/0"
    from_port  = 80
    to_port    = 80
  }

SG 资源:

ingress {
    from_port = 80
    to_port = 80
    protocol = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

我看到 NACL 的唯一大优势是如果有多个 Public SG,如果通过控制台手动处理,则更容易将 IP 地址列入 NACL 黑名单。

NACL 在子网级别运行,SG 在实例级别运行,如您引用的文档中所述,因此对于其中包含单个实例的子网,具有显式拒绝的 NACL 是功能上的唯一区别。我建议将 AWS cli 用于您的咖啡店示例,根据您更容易使用的命令在 NACL 和 sg 之间进行选择。

大型环境在一个子网中会有多个实例,因此 SG 允许实例级别。我还认为 SG 是动态的云原生选项,因此更可取,因为可以在规则中使用 SG 成员资格而不是 IP 地址。这使得 infra as 代码可在区域、vpc 和 azs 之间移植,因为寻址可以是动态的或重叠的,但您的堆栈仍将工作相同。

访问控制和保护 VPC 是一个很大的话题,AWS 建议您针对不同的场景(例如,Bastion Hosts)使用许多最佳实践

对于从您的咖啡店计算机访问 public 子网中的单个 EC2 的简单情况,您需要更改安全组以允许从咖啡店 ip 进行 SSH。

使用控制台,一般步骤是:

  1. VPC dashboard -> Security -> Security Group -> 蓝色按钮:Create Security Group。将其命名为 Coffee SG,对其进行描述并选择合适的 VPC 与其关联并单击创建。
  2. 创建 SG 后,单击底部的入站规则选项卡,然后单击编辑规则按钮
  3. 对于类型,select SSH
  4. 来源 select "my ip" 如果你在咖啡店的电脑旁。浏览器会自动用电脑ip填写表格。允许任意ip,可以使用0.0.0.0/0(不推荐)允许一个范围,使用CIDR.
  5. 点击保存规则。
  6. 当您启动 ec2 实例时,select Coffee SG 用于您的安全组。

如果您的 EC2 已经 运行,请转到安全组并从上面的第 2 步开始。 有关详细信息,请参阅 AWS 指南:

This guide 提供了 Linux 个实例需要执行的步骤。 This guide 提供了 Windows 个实例需要执行的步骤。

现在从上图看很清楚了:

Internet 网关 > 在 VPC 级别控制入站和出站规则。在这种情况下,VPC 内的所有资源都会受到影响。所有 Ec2 实例都会受到影响。

Nacl > 在子网级别控制入站和出站规则。在这种情况下,子网内的所有资源都会受到影响。对于 NACL1 > Ec-1 ,Ec-2 和 Ec-3 将受到影响,对于 NACL2 Ec2-4 将受到影响。因此,与 Internet 网关相比,Nacl 更具限制性。

安全组 > 控制资源级别的入站和出站规则。在那种情况下,所有附加到安全组的资源都会受到影响。对于 Security Group-1 Ec2-1 和 EC2-2 将受到影响,对于 Security Group-2 Ec2-3 将受到影响。

所以 Internet 网关、Nacl 和安全组都在不同级别充当防火墙