我可以在aws安全组中添加dns名称吗?

sau*_*h24 11 amazon-ec2 amazon-web-services aws-ec2 aws-security-group

我必须将我的动态IP(每次更改)连接到AWS EC2计算机.
为此我将我的公共IP映射到域名(xyz.com),现在我正在尝试将其添加到安全组.
但AWS安全组不允许添加DNS名称.这是正确的过程吗,如果不是,请建议我.

小智 9

安全组和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


vie*_*tti 5

我使用这个小 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
Run Code Online (Sandbox Code Playgroud)

然而,这会导致安全组充满来自随机 IP 地址的瑞士奶酪漏洞,因此您随后需要询问如何不让安全组拥有不再属于您的临时地址。解决该问题的一种方法是设置一个具有(相对)稳定的 IP 地址端点的 VPN,然后仅允许该单个地址通过安全组。


Don*_*ghn 5

AWS 安全规则只允许 IP 范围,称为CIDR,您可以使用 AWS CLI 更新。但是,您不能简单地更新现有规则的 CIDR,您需要:

  1. 删除旧规则: aws ec2 revoke-security-group-ingress ...
  2. 创建新规则: 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
Run Code Online (Sandbox Code Playgroud)

解释

此方法使用以下 3 个 AWS CLI 命令,这些命令取自上述示例,并删除了 bash 脚本。

1)通过规则的描述获取特定安全组中规则的CIDR IP。该命令在参数中使用JMESPathquery只返回我们想要的数据:

aws ec2 describe-security-groups --query "SecurityGroups[?GroupName=='MY_SECURITY_GROUP_NAME'].IpPermissions[*].IpRanges[?Description=='MY_RULE_DESCRIPTION'].CidrIp" --output text
Run Code Online (Sandbox Code Playgroud)

2) 删除旧 CIDR 的规则(即使规则不存在也会成功):

aws ec2 revoke-security-group-ingress --group-name MY_SECURITY_GROUP_NAME --protocol tcp --port 80 --cidr 0.0.0.0/32
Run Code Online (Sandbox Code Playgroud)

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"}]}]'
Run Code Online (Sandbox Code Playgroud)