定义内网ip列表池
bash
cat ip_list.txt
192.168.1.1
192.168.1.2
定义脚本安全组id等元数据
bash
# cat sg-add.sh
#!/bin/bash
# 定义安全组ID-宁夏 VPC:NX-NHRY-PRD-VPC vpc-xxx
SECURITY_GROUP_ID="sg-0f08237289xxxxx"
# 从文件中读取IP地址到数组
IFS=' ' read -ra INTERNAL_IPS <<< $(cat ip_list.txt)
# 循环遍历内网 IP 列表
for IP in "${INTERNAL_IPS[@]}"
do
# 使用 AWS CLI 查询 EC2 实例,过滤出内网 IP 匹配的实例
INSTANCE_ID=$(aws ec2 describe-instances --filters "Name=private-ip-address,Values=$IP" --query 'Reservations[].Instances[].InstanceId' --output text)
# 如果找到匹配的实例,添加安全组
if [ ! -z "$INSTANCE_ID" ]
then
# 获取实例当前的所有安全组
CURRENT_SECURITY_GROUPS=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --query 'Reservations[].Instances[].SecurityGroups[].GroupId' --output text)
# 添加新的安全组
NEW_SECURITY_GROUPS="$CURRENT_SECURITY_GROUPS $SECURITY_GROUP_ID"
echo "Adding security groups $NEW_SECURITY_GROUPS to instance $INSTANCE_ID"
aws ec2 modify-instance-attribute --instance-id $INSTANCE_ID --groups $NEW_SECURITY_GROUPS
else
echo "No instance found with internal IP $IP"
fi
done