为什么我无法删除附加到 Amazon VPC 的安全组?

上次更新日期:2022 年 3 月 23 日

当我尝试删除 Amazon Virtual Private Cloud(Amazon VPC)的安全组时,出现了错误。我可以采取哪些措施来将其删除?

简短描述

由于以下原因,您可能无法删除安全组:

  • 安全组是默认安全组。
  • 安全组由自己的规则或另一个安全组中的规则引用。
  • 安全组与处于运行或停止状态的实例关联。
  • 安全组与网络接口关联。
  • 您无权执行 DeleteSecurityGroup 操作。

解决方法

安全组是默认安全组

如果您尝试删除默认安全组,则会出现以下错误:

error: Client.CannotDelete

所有 VPC 都有一个默认安全组。如果在启动实例时没有指定不同的安全组,默认的安全组会自动与您的实例相关联。您无法删除默认安全组。但是,您可以更改默认安全组的规则。有关更多信息,请参阅您的 VPC 的默认安全组

安全组由自己的规则或另一个安全组中的规则引用

如果安全组由其自己的规则或其他安全组中的规则引用,则会收到以下错误:

error: sg-A This security group has a rule that references sg-B and itself

如果安全组规则引用了安全组,则无法删除该安全组。如果安全组在其自己的某个规则中引用,则必须在删除安全组之前删除该规则。如果在另一个安全组的规则中引用了安全组,则必须删除该引用以删除该安全组。要修改安全组规则,请参阅使用安全组规则

例如,安全组 A (sg-A) 有一条引用安全组 B (sg-B) 及其自身的规则。如果要删除其中一个组,则必须先执行以下操作:

  • 移除与 sg-B 关联的规则以删除 sg-B。
  • 删除自引用规则以删除 sg-A。

按照以下步骤移除与要删除的安全组关联的规则(上例中为 sg-B):

1.    打开 Amazon VPC 控制台

2.    在导航窗格中,选择安全组

3.    选择要更新的安全组。

4.    根据您的使用案例,选择 Actions(操作)、Edit inbound rules( 编辑入站规则)或 Actions(操作)、Edit outbound rules(编辑出站规则)。

5.    为想要删除的规则选择 Delete(删除)。

6.    选择 Save rules(保存规则)。

安全组也可能在另一个建立了对等连接的 Amazon VPC 中的安全组中引用。要删除安全组,您可以移除引用或者删除 VPC 对等连接

如果在另一个 Amazon VPC 内的安全组中引用了安全组,请按照以下步骤操作:

1.    打开 Amazon VPC 控制台

2.    在导航窗格中,选择 Peering Connections (对等连接)

3.    选择 VPC 对等连接,然后依次选择操作删除 VPC 对等连接

4.    在确认对话框中,选择是,删除

注意:您可以使用 DescribeSecurityGroupReferences API 来描述引用您要删除的安全组的 VPC 对等连接另一端的 VPC。

安全组与处于运行或停止状态的实例关联

如果将安全组分配给正在运行或已停止的实例,则无法将其删除。要确定安全组是否已分配给实例,请执行以下操作:

1.    打开 Amazon Elastic Compute Cloud (Amazon EC2) 控制台

2.    在导航窗格中,选择 Instances(实例)。

3.    在内容窗格的搜索栏中,输入客户端筛选条件

4.    从下拉菜单中选择实例状态(客户端)

5.    选择实例状态(客户端):正在运行

6.    重复步骤 3-5。然后,选择实例状态(客户端):已停止

7.    在筛选列表中,选择安全组 ID安全组名称。然后,选择安全组 ID 或安全组名称。分配给安全组的任何实例都将显示在筛选出的实例列表中。

注意:要更改分配给实例的安全组,请参阅使用安全组

安全组与网络接口关联

如果安全组与请求者托管式接口关联,则无法删除该安全组。请求者托管式网络接口会自动为托管式资源(如 Application Load Balancer 节点)。AWS Lambda、Amazon Elastic File System (Amazon EFS)、FSx、Redis、Memcached 和 Amazon DynamoDB 等服务和资源都具有始终附加到弹性网络接口的安全组。要删除或分离这些弹性网络接口,您必须删除该网络接口所代表的资源。完成此操作后,AWS 服务会自动为您分离并删除该网络接口

当您的接口连接到由其他 AWS 服务管理的资源时,如果您尝试删除这些类型的安全组,您可能会收到以下错误。例如,这些服务可能是 Elastic Load Balancing (ELB) 或 Lambda。以下是示例错误消息:

Error detaching network interface. eni-xxxxxxxx:Network interface 'eni-xxxxxxxx' is currently in use

要解决这些错误,请执行以下操作:

1.    打开 Amazon EC2 控制台

2.    在导航窗格中,选择网络接口

3.    搜索您要分离或删除的弹性网络接口的 Elastic Network Interface ID。

4.    选择弹性网络接口,然后选择详细信息选项卡。

5.    重要提示:查看 Description(描述)以查找弹性网络接口附加的资源。

6.    如果您不再使用相应的 AWS 服务,请先删除该服务。弹性网络接口将自动从您的 VPC 中移除。

如果安全组与 VPC 终端节点上使用的网络接口关联,则无法删除该安全组。如果您尝试删除与 VPC 终端节点上使用的网络接口关联的安全组,则可能会看到类似于以下内容的错误:

An error occurred (DependencyViolation) when calling the DeleteSecurityGroup operation: resource sg-xyz has a dependent object

要删除安全组,请从 modify-interface-endpoint 中移除或替换安全组。

1.    打开 Amazon VPC 控制台

2.    在导航窗格中,选择端点,然后选择接口终端节点。

3.    依次选择操作管理安全组

4.    根据需要选择或取消选择安全组,然后选择保存

注意:在 AWS Command Line Interface (AWS CLI) 中运行以下命令,以根据安全组 ID 查找与安全组关联的网络接口。命令的输出显示了与安全组关联的网络接口。

aws ec2 describe-network-interfaces --filters Name=group-id,Values=<group-id> --region <region> --output json

示例:

aws ec2 describe-network-interfaces --filters Name=group-id,Values=sg-07abcd9f0e12345495 --region us-east-1 --output json

查看命令输出。如果输出为空,如下例所示,则没有与该安全组相关联的资源:

示例输出

{

    "NetworkInterfaces": []

}

注意:如果在运行 AWS CLI 命令时收到错误信息,请确保您使用的是最新版本的 AWS CLI

你无权执行 DeleteSecurityGroup 操作

如果您收到以下错误,则可能没有删除安全组的正确权限:

Failed to delete security groups. An Unknown error happened". You are not authorized to perform "DeleteSecurityGroup" operation

1.    查看 DeleteSecurityGroup API 调用的 AWS CloudTrail 日志。如果日志中出现以下内容,则错误与 IAM 角色的相关权限有关:

"errorMessage": You are not authorized to perform this operation” is seen in the Cloudtrail logs

2.    验证 DeleteSecurityGroup 操作是否已添加到 AWS Identity and Access Management (IAM) 策略中。

3.    请与您的企业联系,以对其安全控制策略 (SCP) 进行必要的更改,并更改用户的权限。您可能需要请求主账户更改 SCP。

注意:SCP 限制成员账户中 IAM 用户和角色(包括成员账户的根用户)的权限。如果权限在账户以上的任何级别被阻止,则无论是隐式还是显式(使用拒绝),受影响账户中的用户或角色都不能使用该权限,即使账户管理员将带有 */* 权限的 AdministratorAccess IAM 策略附加到用户。

有关更多信息,请参阅 SCP 对权限的影响


这篇文章对您有帮助吗?


您是否需要账单或技术支持?