如何在不使用 AWS CLI 删除当前附加的安全组的情况下将新的安全组分配给 EC2 实例?

How do I assign a new security group to an EC2 instance without removing the currently attached security groups using AWS CLI?

将安全组附加到 运行 EC2 实例的 AWS CLI 命令如下。

aws ec2 modify-instance-attribute --instance-id i-12345 --groups sg-12345 sg-67890

但是上面的命令将删除当前附加的安全组并附加新的。

我有一个用例,其中有 100 多台服务器,我必须 附加 一个新的安全组到所有这些服务器而不分离当前的安全组。

如何使用 AWS CLI 实现此目的?

--groups 会根据传递的参数进行完整的 替换 & 无法绕过此行为,因此您需要实现 获取现有的安全组 (SG),附加新的 SG,然后将其作为输入传递给 --groups.

aws ec2 modify-instance-attribute确认 documentation:

--groups (list)

[EC2-VPC] Replaces the security groups of the instance with the specified security groups. You must specify at least one security group, even if it’s just the default security group for the VPC. You must specify the security group ID, not the security group name.

(string)


此命令应将 ID 为 i-12345 的实例的所有安全组存储在 $securitygroups:

securitygroups=$(aws ec2 describe-instances --instance-ids i-12345 --query "Reservations[].Instances[].SecurityGroups[].GroupId[]" --output text)

echo $securitygroups 的输出类似于:

sg-074bb9206bd7edaf2 sg-07cd92995b937cbd2 sg-05414d9cef32901be

鉴于您的新安全组 ID 是 sg-67890,执行以下命令将新的 SG ID 附加到我们要设置的安全组列表中(space 是 重要且需要):

securitygroups+=" sg-67890"

echo $securitygroups 的输出现在应该附加了新的 SG ID:

sg-074bb9206bd7edaf2 sg-07cd92995b937cbd2 sg-05414d9cef32901be sg-67890

最后,将$securitygroups传递给aws ec2 modify-instance-attribute--groups选项。

此变量将包含现有的已分配 SG ID 以及要分配的新 SG ID,因此它将是分配新 SG 而不取消分配任何当前 SG:

aws ec2 modify-instance-attribute --instance-id i-067a3aae02b8239e6 --groups $securitygroups

不管你有多少实例,把它放在一个循环中,问题就解决了。