为正在运行的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
无论你有多少个实例,把它放入循环中,问题就解决了。