![](/img/trans.png)
[英]Removing security group from ec2 instance using aws cli or python
[英]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
文档确认:
--groups(列表)
[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 附加到我们要设置的安全组列表中(空格很重要且需要):
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
不管你有多少实例,把它放在一个循环中,问题就解决了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.