我可以在 aws 安全组中添加 dns 名称吗[关闭]
Posted
技术标签:
【中文标题】我可以在 aws 安全组中添加 dns 名称吗[关闭]【英文标题】:Can I add dns name in aws security group [closed] 【发布时间】:2016-01-25 03:46:39 【问题描述】:我必须将我的动态 IP(每次都会更改)连接到 AWS EC2 机器。 为此,我将我的公共 IP 映射到域名 (xyz.com),现在我正在尝试将其添加到安全组。 但 AWS 安全组不允许添加 DNS 名称。 这是正确的过程吗,如果不是,请建议我。
【问题讨论】:
您可以将 IP 范围的 CIDR 块添加到托管前缀列表,然后将该列表作为入站规则添加到安全组。另外,如果您需要在多个安全组中使用这些 IP,那么这也可以集中管理。 这个问题的结尾是:“我们不允许在 Stack Overflow 上提出有关专业服务器或网络相关基础设施管理的问题”。这个问题的合适论坛是什么? 【参考方案1】:为什么不在公共 IP 上创建 Bastian 主机,然后将其用作跳转框?
【讨论】:
如果这是试图回答,请使用更自信的文字,问号不属于答案。【参考方案2】: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"]]'
【讨论】:
【参考方案3】:我为动态 ips 创建了一个安全组,每次运行我的脚本时都会删除存储在文件中的 ip。
这是我的 windows 解决方案。
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
【讨论】:
【参考方案4】:我已经使用这个小 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 地址端点的 ***,然后仅允许该单个地址通过安全组。
【讨论】:
在 Windows 上,第一行将是:for /f %%i in ('"path\to\curl.exe" http://checkip.amazonaws.com') do set MY_CURRENT_IP=%%i
,第二行将结束 %MY_CURRENT_IP%/32
这是一个很好的答案。如果您想变得花哨,而不是使用 ***,您可以让 Lambda 函数在一定时间后去除入口路由。
有没有办法为规则指定“超时”?那么一段时间后该规则将被删除?【参考方案5】:
安全组和 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
【讨论】:
【参考方案6】:你不能以你想要的方式连接一个动态ip;每次您的 IP 更改时,如果您想允许它通过您的安全组,您需要将设置更改为您的新 IP。
您可以编写一个小脚本,将其制作成桌面上的图标,但该脚本使用 AWS API 重新允许您当前的 IP,以便在更改时更轻松。
【讨论】:
以上是关于我可以在 aws 安全组中添加 dns 名称吗[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
带有 PHP SDK 的 AWS EC2 - 等到实例具有公共 DNS 名称
如何将 AWS RDS 安全组中的 Zapier IP 地址列入白名单