如何使用 aws cli 将当前 pc IP 添加到安全组中
How could I add current pc IP into security group with aws cli
我想将当前工作电脑的IP加入安全组,
并为其启用所有流量。每次我都应该使用网络仪表板手动执行此操作。
如何使用 shell 脚本来完成?
以下是我使用的最常用的 aws cli 命令。
但是我找不到如何在特定的安全组中添加ip
。
list_instances(){
aws ec2 describe-instances --query 'Reservations[].Instances[].[Tags[?Key==`Name`].Value,InstanceId,PublicIpAddress,PrivateIpAddress]' --output text
}
start_instance(){
aws ec2 start-instances --instance-ids
}
这是一个确定当前计算机 IP 地址的脚本,然后使用 AWS Command-Line Interface (CLI) 添加对端口 22 (SSH) 和 3389 (RDP) 的访问——比在所有端口上添加访问安全得多。
# Retrieve current IP address
IP=`curl -s http://whatismyip.akamai.com/`
# Authorize access on ports 22 and 3389
aws ec2 authorize-security-group-ingress --group-name "SG-NAME" --protocol tcp --port 22 --cidr $IP/32 --profile class --output text
aws ec2 authorize-security-group-ingress --group-name "SG-NAME" --protocol tcp --port 3389 --cidr $IP/32 --profile class --output text
它假定 AWS CLI 可以通过实例元数据(在 Amazon EC2 实例上)或从通过 aws configure
配置的本地凭证文件访问凭证。
我为此创建了一个小 shell 脚本,用于检查 ElasticBeanstalk 上的 tomcat 日志:
#!/bin/sh
#myIp = my current dynamic IP
myIp=`curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`
mySG=SSHSecurityGroup
#add my IP to security group
aws ec2 authorize-security-group-ingress --group-id sg-02aXXXXX --protocol tcp --port 22 --cidr $myIp/32 --profile=prod
echo `date` added shh access to stroll-env security group
#aws ec2 revoke-security-group-ingress --group-id sg-02aXXXXX --protocol tcp --port 22 --cidr $myIp/32 --profile=prod
echo `date` done...
PS: --protocol tcp --port 22 --profile=prod 表示我正在为我的 prod(生产)实例添加 ssh 访问。
我在寻找更新安全组的 awscli 命令时遇到了这个 post。我想我会分享这个 Python 我最近使用 Boto3 和 Requests 编写的脚本,它将使用您当前的 IP 地址更新指定的安全组。希望这可以帮助某人。
PowerShell 版本基于 John Rotenstein 的回答:
# Set Security Group name
$SG_ID="sg-903004f8"
# Retrieve current IP address
$IP=Invoke-WebRequest -UseBasicParsing http://whatismyip.akamai.com/
# Authorize access on ports 22 (SSH) and 3389 (RDP)
aws ec2 authorize-security-group-ingress --group-id "$SG_ID" --protocol tcp --port 22 --cidr "$IP/32"
aws ec2 authorize-security-group-ingress --group-id "$SG_ID" --protocol tcp --port 3389 --cidr "$IP/32"
此 PowerShell 脚本在授权当前 IP 之前清除当前授权的 IP。
# Retrieve current IP address
$IP=Invoke-WebRequest -UseBasicParsing http://whatismyip.akamai.com/
$sg="sg-00001"
$old_file_path = 'old_ip.txt'
if(Test-Path -Path $old_file_path){
$OldIp=Get-Content -Path $old_file_path
aws ec2 revoke-security-group-ingress --group-id "$sg" --protocol tcp --port 8443 --cidr "$OldIp/32"
}
aws ec2 authorize-security-group-ingress --group-id "$sg" --protocol tcp --port 8443 --cidr "$IP/32"
Set-Content -Path $old_file_path -Value $IP
这是一个您可以使用并轻松管理的工具,通过 AWS 安全组中的端口将您的 IP 列入白名单。
您可以使用 aws_ipadd 命令创建和更新 AWS 安全组规则。
https://github.com/piyushsonigra/aws_ipadd
$ aws_ipadd my_project_ssh
Your IP 12.10.1.14/32 and Port 22 is whitelisted successfully.
$ aws_ipadd my_project_ssh
Modifying existing rule...
Removing old whitelisted IP '12.10.1.14/32'.
Whitelisting new IP '131.4.10.16/32'.
Rule successfully updated!
我从这个来源修改了它:- https://gist.github.com/niraj-shah/567da4146fe2912bb6b4626bc71471ea
玩得开心!
#!/bin/bash
# Retrieve current IP address
ip=$(curl -s https://api.ipify.org);
old_ip=$(head -1 $HOME/ActualIp.txt)
profile="default"
ports=(22 3306);
group_ids=(sg-087891bcfb9caea8d sg-013e1366ba61b6548);
fixed_ips=();
if [ "$ip" == "$old_ip" ]; then
echo "nothing to do"
else
for port in ${ports[@]}
do
for group_id in ${group_ids[@]}
do
# Display security group name
echo -e "3[34m\nModifying Group: ${group_id}3[0m and port number: ${port}";
# Get existing IP rules for group
ips=$(aws ec2 --profile=$profile describe-security-groups --filters Name=ip-permission.to-port,Values=$port Name=ip-permission.from-port,Values=$port Name=ip-permission.protocol,Values=tcp --group-ids $group_id --output text --query 'SecurityGroups[*].{IP:IpPermissions[?ToPort==`'$port'`].IpRanges}')
ips=$(sed 's/IP//g' <<< $ips)
for ip in $ips
do
echo -e "3[31mRemoving IP: $ip3[0m"
# Delete IP rules matching port
aws ec2 revoke-security-group-ingress --profile=$profile --group-id $group_id --protocol tcp --port $port --cidr $ip
done
# Get current public IP address
myip=$(curl -s https://api.ipify.org);
echo -e "3[32mSetting Current IP: ${myip}3[0m"
# Add current IP as new rule
aws ec2 authorize-security-group-ingress --profile=$profile --protocol tcp --port $port --cidr ${myip}/32 --group-id $group_id
#Print curret IP to a file for the next cron
curl -s https://api.ipify.org > $HOME/ActualIp.txt
# Loop through fixed IPs
#for ip in $fixed_ips
#do
#echo -e "3[32mSetting Fixed IP: ${ip}3[0m"
# Add fixed IP rules
#/home/pi/.local/bin/aws ec2 authorize-security-group-ingress --profile=$profile --protocol tcp --port $port --cidr ${ip} --group-id $group_id
#done
done
done
fi
这个小bash脚本的目的相同,端口号可以是cli中的位置参数-
#!/bin/bash
TargetAddr='<IP>'
aws_sg_id='<sg-id>'
myip=$(curl -s ifconfig.me)
echo -e "Updating IP $myip in Security Group: $aws_sg_id"
aws --profile <profile-name> ec2 authorize-security-group-ingress --group-id $aws_sg_id --protocol tcp --port 22 --cidr $myip/32 2>/dev/null
#Verifying the Access
/usr/bin/nc -zv -w1 $TargetAddr 22
我想将当前工作电脑的IP加入安全组,
并为其启用所有流量。每次我都应该使用网络仪表板手动执行此操作。
如何使用 shell 脚本来完成?
以下是我使用的最常用的 aws cli 命令。
但是我找不到如何在特定的安全组中添加ip
。
list_instances(){
aws ec2 describe-instances --query 'Reservations[].Instances[].[Tags[?Key==`Name`].Value,InstanceId,PublicIpAddress,PrivateIpAddress]' --output text
}
start_instance(){
aws ec2 start-instances --instance-ids
}
这是一个确定当前计算机 IP 地址的脚本,然后使用 AWS Command-Line Interface (CLI) 添加对端口 22 (SSH) 和 3389 (RDP) 的访问——比在所有端口上添加访问安全得多。
# Retrieve current IP address
IP=`curl -s http://whatismyip.akamai.com/`
# Authorize access on ports 22 and 3389
aws ec2 authorize-security-group-ingress --group-name "SG-NAME" --protocol tcp --port 22 --cidr $IP/32 --profile class --output text
aws ec2 authorize-security-group-ingress --group-name "SG-NAME" --protocol tcp --port 3389 --cidr $IP/32 --profile class --output text
它假定 AWS CLI 可以通过实例元数据(在 Amazon EC2 实例上)或从通过 aws configure
配置的本地凭证文件访问凭证。
我为此创建了一个小 shell 脚本,用于检查 ElasticBeanstalk 上的 tomcat 日志:
#!/bin/sh
#myIp = my current dynamic IP
myIp=`curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`
mySG=SSHSecurityGroup
#add my IP to security group
aws ec2 authorize-security-group-ingress --group-id sg-02aXXXXX --protocol tcp --port 22 --cidr $myIp/32 --profile=prod
echo `date` added shh access to stroll-env security group
#aws ec2 revoke-security-group-ingress --group-id sg-02aXXXXX --protocol tcp --port 22 --cidr $myIp/32 --profile=prod
echo `date` done...
PS: --protocol tcp --port 22 --profile=prod 表示我正在为我的 prod(生产)实例添加 ssh 访问。
我在寻找更新安全组的 awscli 命令时遇到了这个 post。我想我会分享这个 Python 我最近使用 Boto3 和 Requests 编写的脚本,它将使用您当前的 IP 地址更新指定的安全组。希望这可以帮助某人。
PowerShell 版本基于 John Rotenstein 的回答:
# Set Security Group name
$SG_ID="sg-903004f8"
# Retrieve current IP address
$IP=Invoke-WebRequest -UseBasicParsing http://whatismyip.akamai.com/
# Authorize access on ports 22 (SSH) and 3389 (RDP)
aws ec2 authorize-security-group-ingress --group-id "$SG_ID" --protocol tcp --port 22 --cidr "$IP/32"
aws ec2 authorize-security-group-ingress --group-id "$SG_ID" --protocol tcp --port 3389 --cidr "$IP/32"
此 PowerShell 脚本在授权当前 IP 之前清除当前授权的 IP。
# Retrieve current IP address
$IP=Invoke-WebRequest -UseBasicParsing http://whatismyip.akamai.com/
$sg="sg-00001"
$old_file_path = 'old_ip.txt'
if(Test-Path -Path $old_file_path){
$OldIp=Get-Content -Path $old_file_path
aws ec2 revoke-security-group-ingress --group-id "$sg" --protocol tcp --port 8443 --cidr "$OldIp/32"
}
aws ec2 authorize-security-group-ingress --group-id "$sg" --protocol tcp --port 8443 --cidr "$IP/32"
Set-Content -Path $old_file_path -Value $IP
这是一个您可以使用并轻松管理的工具,通过 AWS 安全组中的端口将您的 IP 列入白名单。 您可以使用 aws_ipadd 命令创建和更新 AWS 安全组规则。
https://github.com/piyushsonigra/aws_ipadd
$ aws_ipadd my_project_ssh
Your IP 12.10.1.14/32 and Port 22 is whitelisted successfully.
$ aws_ipadd my_project_ssh
Modifying existing rule...
Removing old whitelisted IP '12.10.1.14/32'.
Whitelisting new IP '131.4.10.16/32'.
Rule successfully updated!
我从这个来源修改了它:- https://gist.github.com/niraj-shah/567da4146fe2912bb6b4626bc71471ea
玩得开心!
#!/bin/bash
# Retrieve current IP address
ip=$(curl -s https://api.ipify.org);
old_ip=$(head -1 $HOME/ActualIp.txt)
profile="default"
ports=(22 3306);
group_ids=(sg-087891bcfb9caea8d sg-013e1366ba61b6548);
fixed_ips=();
if [ "$ip" == "$old_ip" ]; then
echo "nothing to do"
else
for port in ${ports[@]}
do
for group_id in ${group_ids[@]}
do
# Display security group name
echo -e "3[34m\nModifying Group: ${group_id}3[0m and port number: ${port}";
# Get existing IP rules for group
ips=$(aws ec2 --profile=$profile describe-security-groups --filters Name=ip-permission.to-port,Values=$port Name=ip-permission.from-port,Values=$port Name=ip-permission.protocol,Values=tcp --group-ids $group_id --output text --query 'SecurityGroups[*].{IP:IpPermissions[?ToPort==`'$port'`].IpRanges}')
ips=$(sed 's/IP//g' <<< $ips)
for ip in $ips
do
echo -e "3[31mRemoving IP: $ip3[0m"
# Delete IP rules matching port
aws ec2 revoke-security-group-ingress --profile=$profile --group-id $group_id --protocol tcp --port $port --cidr $ip
done
# Get current public IP address
myip=$(curl -s https://api.ipify.org);
echo -e "3[32mSetting Current IP: ${myip}3[0m"
# Add current IP as new rule
aws ec2 authorize-security-group-ingress --profile=$profile --protocol tcp --port $port --cidr ${myip}/32 --group-id $group_id
#Print curret IP to a file for the next cron
curl -s https://api.ipify.org > $HOME/ActualIp.txt
# Loop through fixed IPs
#for ip in $fixed_ips
#do
#echo -e "3[32mSetting Fixed IP: ${ip}3[0m"
# Add fixed IP rules
#/home/pi/.local/bin/aws ec2 authorize-security-group-ingress --profile=$profile --protocol tcp --port $port --cidr ${ip} --group-id $group_id
#done
done
done
fi
这个小bash脚本的目的相同,端口号可以是cli中的位置参数-
#!/bin/bash
TargetAddr='<IP>'
aws_sg_id='<sg-id>'
myip=$(curl -s ifconfig.me)
echo -e "Updating IP $myip in Security Group: $aws_sg_id"
aws --profile <profile-name> ec2 authorize-security-group-ingress --group-id $aws_sg_id --protocol tcp --port 22 --cidr $myip/32 2>/dev/null
#Verifying the Access
/usr/bin/nc -zv -w1 $TargetAddr 22