我必须将我的动态IP(每次更改)连接到AWS EC2机器
为此,我将我的公共IP映射到域名(xyz.com),现在我正在尝试将其添加到安全组。
但AWS安全组不允许添加DNS名称。
这是正确的做法,如果不是,请建议我。
答案 0 :(得分:8)
安全组和ACL无法解析DNS主机名。
您可以使用AWS CLI编写IP动态地址更新的脚本:
aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 22 --cidr / 24
http://docs.aws.amazon.com/cli/latest/userguide/cli-ec2-sg.html
答案 1 :(得分:2)
我使用这个小小的bash脚本从我当前的地址中戳出防火墙上的一个洞:
#!/bin/sh
AWS_IP=$(curl http://checkip.amazonaws.com)
aws ec2 authorize-security-group-ingress --group-name my-security-group \
--protocol tcp --port 22 \
--cidr $AWS_IP/32
但是,这导致一个安全组中充满了来自随机IP地址的瑞士奶酪漏洞,因此您将要随后询问有关如何不再拥有不再属于您的临时地址的安全组的问题。解决该问题的一种方法是建立一个具有(相对)稳定IP地址端点的VPN,然后仅通过安全组允许该单个地址。
答案 2 :(得分:1)
我为动态ips创建了一个安全组,每次运行我的脚本时都会删除存储在文件中的ip。
这是我的解决方案。
SETLOCAL
@echo off
SET mypath=%~dp0
set PATH=%PATH%;"C:\Program Files\Amazon\AWSCLI\";"C:\Program Files (x86)\PuTTY\";"C:\MyApps\gnuwin32\bin"
set GROUPID= PUT YOUR DYNAMIC SECURITY GROUP ID HERE
rem aws ec2 create-security-group --group-name dynamic_ips --vpc-id vpc-81a519e5 --description "Dynamic Ip Address"
set /p MYIP=<%mypath%\MYIP_NODELETE.txt
aws ec2 revoke-security-group-ingress --group-id %GROUPID% --protocol tcp --port 0-65535 --cidr %MYIP%/24
wget -qO %mypath%\MYIP_NODELETE.txt http://ipinfo.io/ip
set /p MYIP=<%mypath%\MYIP_NODELETE.txt
aws ec2 authorize-security-group-ingress --group-id %GROUPID% --protocol tcp --port 0-65535 --cidr %MYIP%/24
rem cat %mypath%\MYIP_NODELETE.txt
pause
答案 3 :(得分:1)
AWS安全规则仅允许您使用AWS CLI进行更新的IP范围,称为CIDRs。但是,您不能简单地更新现有规则的CIDR,需要:
aws ec2 revoke-security-group-ingress ...
aws ec2 authorize-security-group-ingress ...
示例
我发现此脚本的某些形式可用于封装必要的步骤:
#!/bin/bash
# == Script Config ===================
# The rule description is used to determine the rule that should be updated.
RULE_DESCRIPTION=My-Rule-Description
SECURITY_GROUP_NAME=My-Security-Group-Name
# ====================================
OLD_CIDR_IP=`aws ec2 describe-security-groups --query "SecurityGroups[?GroupName=='"$SECURITY_GROUP_NAME"'].IpPermissions[*].IpRanges[?Description=='"$RULE_DESCRIPTION"'].CidrIp" --output text`
NEW_IP=`curl -s http://checkip.amazonaws.com`
NEW_CIDR_IP=$NEW_IP'/32'
# If IP has changed and the old IP could be obtained, remove the old rule
if [[ $OLD_CIDR_IP != "" ]] && [[ $OLD_CIDR_IP != $NEW_CIDR_IP ]]; then
aws ec2 revoke-security-group-ingress --group-name $SECURITY_GROUP_NAME --protocol tcp --port 8080 --cidr $OLD_CIDR_IP
fi
# If the IP has changed and the new IP could be obtained, create a new rule
if [[ $NEW_IP != "" ]] && [[ $OLD_CIDR_IP != $NEW_CIDR_IP ]]; then
aws ec2 authorize-security-group-ingress --group-name $SECURITY_GROUP_NAME --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 8080, "ToPort": 8080, "IpRanges": [{"CidrIp": "'$NEW_CIDR_IP'", "Description": "'$RULE_DESCRIPTION'"}]}]'
fi
说明
此方法使用以下3个AWS CLI命令,这些命令取自上面的示例,并且删除了bash脚本。
1)通过规则描述获取特定安全组中规则的CIDR IP。此命令在query
参数中使用JMESPath仅返回我们想要的数据:
aws ec2 describe-security-groups --query "SecurityGroups[?GroupName=='MY_SECURITY_GROUP_NAME'].IpPermissions[*].IpRanges[?Description=='MY_RULE_DESCRIPTION'].CidrIp" --output text
2)删除旧CIDR的规则(即使规则不存在也会成功):
aws ec2 revoke-security-group-ingress --group-name MY_SECURITY_GROUP_NAME --protocol tcp --port 80 --cidr 0.0.0.0/32
3)为新CIDR添加规则(规则已经存在时失败):
aws ec2 authorize-security-group-ingress --group-name MY_SECURITY_GROUP_NAME --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 8080, "ToPort": 8080, "IpRanges": [{"CidrIp": "1.1.1.1/32", "Description": "MY_RULE_DESCRIPTION"}]}]'
答案 4 :(得分:0)
您无法以您想要的方式连接动态IP;每次IP更改时,如果要通过安全组允许它,您需要将设置更改为新IP。
您可以将一个小脚本编写到桌面上的图标中,但是使用AWS API重新允许当前的ip,以便在更改时更轻松。
答案 5 :(得分:0)
为什么不在公共IP上创建Bastian主机,然后将其用作跳转框?