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

2 分钟阅读
0

我在尝试删除 Amazon Virtual Private Cloud(Amazon VPC)的安全组时收到错误。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI

当您尝试删除安全组时,可能会因为以下原因收到错误。

安全组是默认安全组

所有 Amazon VPC 都有一个默认安全组。如果您未指定其他安全组,默认安全组会自动与新启动的 Amazon Elastic Compute Cloud (Amazon EC2) 实例关联。

当您尝试删除默认安全组时,您会收到以下错误:

“error: Client.CannotDelete”

您无法删除默认安全组。但可以更改默认安全组的规则。有关更多信息,请参阅 VPC 的默认安全组

安全组规则引用自己的安全组,或有另一个安全组的规则在引用该安全组

如果安全组自己的规则在引用该安全组,您可能会收到错误。要解决此问题,在删除安全组之前删除该规则。

要删除引用该安全组的规则,请完成以下步骤:

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中,选择安全组
  3. 选择要更新的安全组。
  4. 选择操作编辑入站规则,或选择操作编辑出站规则
  5. 为要删除的规则选择删除
  6. 选择保存规则

有关安全组规则更新的更多信息,请参阅安全组规则

当您尝试删除被其他安全组的规则引用的安全组时,您会收到以下错误:

“调用 DeleteSecurityGroup 操作时出现错误 (DependencyViolation):资源 sg-xyz 具有依赖的对象”

如果有另一个安全组的规则在引用您要删除的安全组,应在删除安全组之前删除该规则。

另一个建立了对等连接的 Amazon VPC 中的安全组可能在引用您要删除的安全组。在删除安全组之前,应删除该规则或删除 Amazon VPC 对等连接

**注意:**使用 DescribeSecurityGroupReferences API 来描述引用安全组的 Amazon VPC 对等连接的另一端。

安全组与 AWS 资源关联

您无法删除与 AWS 资源关联的安全组,如 Amazon EC2 实例或 Amazon API Gateway VPC 链接。

您会收到以下错误:

“有些安全组无法删除。以下安全组无法删除。这些安全组是默认安全组,已由其他安全组引用,或与实例或网络接口关联。”

要确定哪些资源在使用安全组,请参阅如何查找与 Amazon EC2 安全组关联的资源?

重要信息:创建 VPC 链接后,您无法更改其安全组或子网。

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

安全组与网络接口关联

您无法删除与请求者托管的网络接口关联的安全组。请求者托管的网络接口是为托管资源(如应用程序负载均衡器节点)自动创建的。有些 AWS 服务和资源具有始终会附加到弹性网络接口的安全组。例如,AWS Lambda、Amazon FSx、Amazon ElastiCache for Redis 和 ElastiCache for Memcached。

要删除或分离网络接口,请参阅删除网络接口

您无法删除与用于 Amazon VPC 端点的网络接口关联的安全组。

当您尝试删除安全组时,会收到以下错误:

“调用 DeleteSecurityGroup 操作时出现错误 (DependencyViolation):资源 sg-xyz 具有依赖的对象”

要从接口端点删除或替换安全组,请完成以下步骤:

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中,选择端点
  3. 选择接口端点,然后依次选择操作管理安全组
  4. 选择或清除相关安全组,然后选择保存

运行 AWS CLI 命令 describe-network-interfaces 查找与安全组关联的网络接口。将 <group-id> 替换为您的安全组 ID,将 <region> 替换为您的 AWS 区域:

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

查看命令输出。如果输出为空,则表示没有资源与安全组关联。

命令输出示例:

{
    "NetworkInterfaces": []
}

您无权执行 DeleteSecurityGroup 操作

您必须设置适当的 AWS Identity and Access Management (IAM) 权限,才能使用 DeleteSecurityGroup API。

**重要信息:**当要删除的安全组与某个实例关联或在另一个安全组中被引用时,DeleteSecurityGroup API 将失败。在这些情况下,操作会失败并显示 DependencyViolation 错误。

当您尝试删除安全组,但没有正确的权限时,您会收到以下错误:

“无法删除安全组。发生未知错误。您无权执行‘DeleteSecurityGroup’操作”

要解决 DeleteSecurityGroup 操作错误,请完成以下步骤:

  1. 打开 AWS CloudTrail 控制台
  2. 在导航窗格中,选择事件历史记录
  3. 查找属性下拉列表中,选择事件名称
  4. 在搜索框中,输入 DeleteSecurityGroup 查看操作的 API 调用。
  5. 事件历史记录列表中出现以下错误消息,表明错误与 IAM 权限有关:
    “您无权执行此操作。”
  6. 请检查是否已将 DeleteSecurityGroup 操作添加到删除操作的用户或角色的必要 AWS IAM 策略。
    有关更多信息,请参阅添加和删除 IAM 身份权限
  7. 在 AWS Organizations 中,更改您的组织的服务控制策略 (SCP)。然后,更改 IAM 用户或角色的权限。
    **注意:**如果您不是主账户所有者,请让主账户所有者更改 SCP。

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

用户无法删除 VPC 所有者创建的安全组

当您尝试删除不归您所有的共享 Amazon VPC 中的安全组时,会收到以下错误:

“您无权执行‘DeleteSecurityGroup’操作。此 VPC 中的子网是共享子网,所提供的对象不归您所有。”

要解决 DeleteSecurityGroup 操作错误,请完成以下步骤:

  1. 打开 AWS CloudTrail 控制台
  2. 在导航窗格中,选择事件历史记录
  3. 查找属性下拉列表中,选择事件名称
  4. 在搜索框中,输入 DeleteSecurityGroup 查看操作的 API 调用。
  5. 确认您的账户不是该安全组的所有者。如果您组织中的另一个账户是该安全组的所有者,请让主所有者来删除安全组。

相关信息

如何删除与另一个 AWS 账户共享的 VPC?

AWS 官方
AWS 官方已更新 6 个月前