使用AWS Cli修改制定的EC2的安全组为本次上网的公网IP

## 这个脚本的目的是打开或停止EC2,并且在打开的时候,把ssh和RDP的端口都制定本机的公网IP
#!/bin/bash

# 输入要操作的EC2实例ID
# instance_id="YOUR_INSTANCE_ID"

# 启动EC2实例
start_instance() {
    aws ec2 start-instances --instance-ids "$instance_id" > null
    echo "已启动EC2实例:$instance_id"
}

# 关闭EC2实例
stop_instance() {
    aws ec2 stop-instances --instance-ids "$instance_id" --output text
    echo "已关闭EC2实例:$instance_id"
}

# 修改安全组的SSH和RDP端口的地址
modify_SG() {

    # 获取本地IP地址
    local_ip=$(curl -s https://api.ipify.org)
    
    # 获取特定EC2实例的安全组ID
    security_groups=$(aws ec2 describe-instances --instance-ids "$instance_id" --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --output text)

    # 打印安全组ID
    echo "安全组ID:$security_groups"
    # 修改所有EC2实例的SSH端口源
    # aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId]' --output text | while read -r instance_id; do
    #     aws ec2 authorize-security-group-ingress --group-id YOUR_SECURITY_GROUP_ID --protocol tcp --port 22 --cidr "$local_ip/32"
    # done

    # 修改所有EC2实例的SSH端口源
    # aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId]' --output text | while read -r instance_id; do
    aws ec2 authorize-security-group-ingress --group-id $security_groups --protocol tcp --port 22 --cidr "$local_ip/32" > null
    aws ec2 authorize-security-group-ingress --group-id $security_groups --protocol tcp --port 3389 --cidr "$local_ip/32" > null
    # done
    echo "安全组修改完成"
}

# 清除安全组的所有规则
clean_sg() {
    security_group_id=$(aws ec2 describe-instances --instance-ids "$instance_id" --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --output text)
    echo $security_group_id
    echo '###############'

    # 获取安全组中的所有规则
    # rules=$(aws ec2 describe-security-group-rules --group-id $security_group_id --output text)
    rules=$(aws ec2 describe-security-group-rules --filter 'Name="group-id",Values="'$security_group_id'"' --output text)
    echo $rules
    echo '--------------'

    # 逐个删除规则
    while read -r rule; do
        rule_id=$(echo $rule | awk '{print $8}')
        # aws ec2 revoke-security-group-ingress --group-id $security_group_id --rule-id $rule_id
                aws ec2 revoke-security-group-ingress --group-id $security_group_id --security-group-rule-ids $rule_id >null
        echo '==========='
        echo $rule_id
    done <<< "$rules"

    echo "已成功删除安全组 $security_group_id 的所有规则。"
    # 清除安全组的所有规则
    # for security_group in $security_groups; do
    #     aws ec2 describe-security-groups --group-ids "$security_group" --query 'SecurityGroups[*].IpPermissions[*]' --output text | while read -r line; do
    #         echo $line
    #         echo '----------'
    #         aws ec2 revoke-security-group-ingress --group-id "$security_group" --protocol $line
    #     done
    #     echo "已清除安全组规则:$security_group"
    # done
}



# 根据输入参数执行相应操作
if [[ "$1" == "start" ]]; then
    start_instance
    modify_SG
elif [[ "$1" == "stop" ]]; then
    stop_instance
elif [[ "$1" == "clean" ]]; then
    clean_sg
else
    echo "无效的操作参数。请使用 'start' 或 'stop'或‘clean’。"
fi












因为安全原因,每次使用AWS EC2都要在安全组中指定公网IP,因为要移动办公,每次公网IP是不一样的,特此写了shell脚本自动化实现。

要运行这个脚本,你需要确保在你的Mac上已经安装了AWS CLI,并且已经配置了正确的AWS访问凭证(Access Key和Secret Access Key)。你可以使用 aws configure 命令来配置这些凭证。

在脚本中,将 YOUR_INSTANCE_ID 替换为要查询的特定EC2实例的实际ID。然后,使用 aws ec2 describe-instances 命令查询该实例的安全组ID,并将结果保存在 security_groups 变量中。最后,使用 echo 命令打印安全组ID。

在modify_SG函数中

在这个脚本中,我们使用 curl 命令从 https://api.ipify.org 获取本地IP地址,并将结果保存在 local_ip 变量中。并使用 aws ec2 authorize-security-group-ingress 命令将SSH端口的源IP更改为刚刚获取到的本地IP。

在clean_SG函数中

在脚本中,将 YOUR_INSTANCE_ID 替换为要清除规则的实际EC2实例的ID。首先,使用 aws ec2 describe-instances 命令获取该实例的安全组ID列表,并将结果保存在 security_groups 变量中。

然后,使用循环遍历每个安全组ID。在循环中,使用 aws ec2 describe-security-groups 命令获取每个安全组的规则,并使用 aws ec2 revoke-security-group-ingress 命令逐个清除规则。这里使用了 --protocol 参数,以便在清除规则时指定正确的协议。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值