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



为正在运行的EC2实例附加安全组的AWS CLI命令如下:

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

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

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

如何使用AWS CLI实现此功能?

--groups根据传递的参数完成替换;没有办法绕过此行为,因此您需要实现的逻辑,获取现有的安全组(SGs),并将新的SG附加在&然后将其作为输入传递给--groups.

aws ec2 modify-instance-attribute文件确认:

——组(列表)

[EC2-VPC]替换安全组具有指定安全组的实例的。即使只是VPC的默认安全组,也必须至少指定一个安全组。必须指定安全组ID,不能指定安全组名。

(字符串)

此命令应该将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附加到我们要设置的安全组列表中(空格为important &需要):

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

无论你有多少个实例,把它放入循环中,问题就解决了。

相关内容

最新更新