首次设置 AWS EB 时创建的默认安全组是啥?

Posted

技术标签:

【中文标题】首次设置 AWS EB 时创建的默认安全组是啥?【英文标题】:What are the default security groups created when I set up AWS EB for the first time?首次设置 AWS EB 时创建的默认安全组是什么? 【发布时间】:2015-03-05 22:44:30 【问题描述】:

我对似乎已自动添加到我的 AWS 安全组列表中的几个组所扮演的角色感到困惑,我收集到的连接是默认配置,我想知道它们是如何工作的(以及它们呢?可以安全更改)。具体有三个是神秘的:

launch-wizard-1 具有入站规则 SSH、TCP、22、0.0.0.0/0。 default 被描述为“默认 VPC 安全组”,它对所有流量和使用自身作为源的所有端口都有一个入站规则。 default_elb_... 描述为“在创建 ELB 期间未指定安全组时使用的 ELB 创建的安全组 - 修改可能会影响到未来 ELB 的流量”,它具有允许来自所有 IP 地址的 HTTP 的入站规则

前两个似乎没有连接到任何其他安全组,而后者是我的 Elastic Beanstalk 环境的每个安全组中入站 HTTP 规则的来源。

这三个小组是做什么的?我可以改变它们吗?或者改变与他们的联系?

例如,后一个规则似乎具有允许从任何地方到我所有 EB 环境的 HTTP 流量的效果。我可以更改此规则以限制 IP(到所有环境)吗?我可以将规则“取消挂钩”作为来自给定 EB 环境的源(例如,将其替换为具有一系列 IP 的源)吗?

【问题讨论】:

【参考方案1】:

看起来您已经了解什么是安全组:应用于 EC2 实例的有状态防火墙。

当您从 Web 控制台手动启动 EC2 虚拟机时,AWS 将为您提供重用现有安全组或创建新安全组的选项。当您新建一个时,默认规则是 SSH(端口 22)和默认安全组名称“launch-wizard-#”。

不幸的是,由于多个 EC2 实例可以使用一个安全组,因此在您删除虚拟机时不会清理它们。因此,如果您删除了创建 launch-wizard-1 的 VM,它不会删除安全组。

进入“VPC 的默认安全组”。创建 VPC 时,会同时创建一个默认安全组。当 EC2 实例在 VPC 子网中启动时,如果未指定另一个安全组,则会为其分配默认安全组。 (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html#DefaultSecurityGroup)。

那么,允许它与自己对话的规则意味着什么?默认情况下,所有入站流量都被安全组拒绝。此“自言自语”入站规则表明,如果两个 VM 都分配了此规则,则它们将被允许在所有端口上相互通信。你应该使用这个默认组吗?不可以。创建行使最小权限规则的唯一安全组(仅向需要它们的实例开放您需要的端口)。

不幸的是,我没有太多弹性豆茎经验,所以这是我的答案转向假设的地方。在我玩过 beanstalk 的那一点点,我记得它在你的帐户中创建了辅助资源。您的弹性负载均衡器 (ELB) 似乎就是这种情况。如描述所示,当 Elastic Beanstalk 需要启动新的负载均衡器时,负载均衡器将使用此默认组,除非您指定另一个组。我相信此链接记录了您将如何执行此操作 (http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.elb.html)。

在所有情况下,我都建议不要使用默认安全组,而是使用针对该实例的安全需求独有的单个防火墙规则。

你能改变或删除这些吗?

launch-wizard-1:是的,你可以删除或修改这个组。既然你提到他没有被使用过,那就去核爆他吧。 默认:VPC 对它创建的一些默认资源很挑剔。我在我的帐户上测试过它,我无法删除它。您当然可以修改它,但我建议您不要使用它。 default_elb:如果我没记错的话,elastic beanstalk 使用 cloudformation 来创建额外的资源,例如 ELB 安全组。您可以修改此安全组,但它会在 cloudformation 定义和现实之间造成不一致。对于您的具体问题,您可以更改允许 IP 的范围,但如果您在私有 IP 上编写规则,并且将环境部署到单独的 VPC,您将无法跨环境。

【讨论】:

我认为我对 SG 的总体理解比从我的问题中看起来要少一些。但这非常有帮助。我想我得到了 launch-wizard-1 组(基本上是我之前做过的事情的剩余部分,现在不使用:我一定已经删除了创建它的 EC2 实例,对吧? 默认组比我想要的更开放,但从概念上讲,他们正在做的事情是有道理的。如果您在未应用此规则的情况下将两个实例部署到 VPC,它们将无法在任何端口上相互通信。如果您要为这两个实例分配默认安全组,它将允许它们通过任何端口说话。关于安全组要记住的关键是,除非明确允许,否则所有流量都会被拒绝。像这样的自引用规则对于像内存集群这样的东西很有用,它们需要通过端口 N 相互同步。 通常您编写防火墙规则以允许通过端口 X 从 abcd/r 传入流量。在自动缩放的云中,您可能在创建盒子之前不知道盒子的 IP 地址——这很难使用源 IP 地址编写规则。用源安全组代替 IP 地址可以让您说“我接受来自分配此 SG 的任何实例的传入流量”。具体示例,假设您有 SG-WS 用于 Web 服务器,SG-DB 用于 DB。您可以将传入规则添加到 SG-DB 以允许来自分配了 SG-WS 的任何实例的流量,无论服务器的 IP 是什么。 A.您正在将该安全组的规则集添加到该实例。 B. 它来自该实例的私有 ip。针对 Amazon 提供的安全组编写规则(它们处理私有 IP 映射)。 C.i.是 C.ii.不是在实践中。安全组作为源技巧仅适用于私有 IP 地址。两个 vpc 无法使用私有 ip 相互通信,您需要一个可公开访问的 ip 地址。 正确。在 B 上,我想区分这仅允许进出私有 IP 地址的流量。它不会允许所有流量,只允许定向到 10.b.c.d ip 地址的流量。如果 vm a 尝试使用 B 的公共 ip 与 b 通信,它将不起作用。

以上是关于首次设置 AWS EB 时创建的默认安全组是啥?的主要内容,如果未能解决你的问题,请参考以下文章

AWS 安全组设置指南

是啥导致我尝试为 AWS-EB 启用 SSH 失败?

首次使用AWS服务器EC2

尝试访问DynamoDB时,AWS Lambda node.js超时

在 ELB 后面可访问的 AWS EB url

AWS 清理安全组