【发布时间】:2019-10-09 08:46:48
【问题描述】:
我有一个在 AWS 上运行的 Ubuntu EC2 实例。我一直使用网络 ACL 来控制对端口 22 的访问,而不是使用安全组。
问题 1:对于单个 EC2 实例的用例,使用 NACL 与 SG 进行访问控制之间有什么优缺点吗? (除了有状态与无状态以及 AWS VPC 安全文档中的其他差异。)
问题 2:大型环境如何处理这个问题?有最佳实践吗? (我知道一家大公司的 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 将私有子网限制为公共子网的内部 CIDR。
选项 2:向全世界开放 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 的唯一一大优势是,如果有多个公共 SG,如果通过控制台手动处理,则更容易将 NACL 中的 IP 地址列入黑名单。
【问题讨论】:
-
相关帖子,推荐nacl medium.com/datadriveninvestor/…
-
@Spiff 那篇文章在哪里推荐 NACL?它讨论了 NACL 是什么,但我没有看到任何建议。
-
NACL 支持显式拒绝(SG 不支持)。深度安全具有价值,而且不同的团队可以对 SG 和 NACL 负责,以减少错误的影响。 NACL 适用于整个子网,因此可以缓解 EC2 实例上的 SG 的 DevOps 错误。这里有一些额外的想法:youtube.com/watch?v=X-MdCb9FMLc
-
@jarmod 那里:使用网络 ACL 而不是安全组阻止 IP 地址
标签: amazon-web-services security amazon-ec2 amazon-vpc aws-security-group