如何确定 AWS 安全组依赖项?

use*_*645 56 amazon-ec2

Amazon EC2 不会让我删除安全组,抱怨该组仍然有依赖关系。我如何找到这些依赖项是什么?

aws ec2 describe-security-groups 没有说。

小智 75

将安全组 ID 粘贴到 EC2 的“网络接口”部分。这将在 EC2、EB、RDS、ELB 中找到用法。

命令行界面: aws ec2 describe-network-interfaces --filters Name=group-id,Values=sg-123abc45

  • 它遗漏的一件事是,如果安全组被另一个安全组引用,那么也值得在“安全组”中搜索它,看看它是否在那里被使用。这让我以前很困惑。 (6认同)

Sco*_*ore 10

在 AWS EC2 控制台中执行此操作的最佳方法是在 EC2->Instances 部分的搜索字段中粘贴安全组名称。

然后将填充与粘贴的安全组关联的所有实例 - 这些将是 ec2 对象(依赖项)。

您还可以在 ELB 部分和其他利用安全组的 AWS 产品中运行此搜索。

如果您尝试删除安全组,则需要为每个实例“更改安全组”(如果它们在 VPC 中)或创建 AMI 并使用不同的安全组重新启动 - 然后删除旧实例(如果使用 EC2 经典)

希望有帮助-


EEA*_*EAA 8

您需要查看 EC2 实例对象,而不是组本身:

$ aws ec2 describe-instances --output text
Run Code Online (Sandbox Code Playgroud)

然后要么查找“sg-*”,要么使用标准的 unix 文本流处理工具来提取您需要的数据。

或者,如果您有少量实例,请使用--output table格式良好的列表。

  • `aws ec2 describe-instances --output text | grep sg-` (2认同)
  • 这是安静的不完整。除了 EC2 实例之外,安全组还可以用在许多地方 - ELB、VPC、其他安全组(如 @brendan 已经提到的)等。 (2认同)

Dre*_*ury 7

您可以查询 aws cli 以获取您想要的数据。

你需要:

  • 列出所有寻找相关组引用的安全组
  • 列出所有 EC2 及其组
  • 列出所有 ELB 及其组
  • 列出所有 RDS 及其组

您还可以使用库,例如​​ boto https://code.google.com/p/boto/而不是原始的 aws cli。


kar*_*ada 5

Lambda 函数也可能有安全组。在撰写本文时,Amazon 不阻止删除 Lambda 函数使用的安全组。

我用过这个:

aws lambda list-functions | jq -c '.Functions[] | {FunctionArn, SecurityGroups: (.VpcConfig.SecurityGroupIds[]? // null) }'
Run Code Online (Sandbox Code Playgroud)


kar*_*ada 5

另一个问题是依赖于其他安全组的安全组。可以使用此命令生成邻接列表(直接依赖项):

aws ec2 describe-security-groups --query "SecurityGroups[*].{ID:GroupId,Name:GroupName,dependentOnSGs:IpPermissions[].UserIdGroupPairs[].GroupId}
Run Code Online (Sandbox Code Playgroud)

理想情况下,这个结果应该用于找到传递闭包(所有依赖,直接和间接)。不幸的是,我没有找到一个 Transitive 闭包工具。