amazon-web-services - 我可以在 aws 安全组中添加 dns 名称吗

标签 amazon-web-services amazon-ec2 aws-ec2 aws-security-group

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

1年前关闭。




Improve this question




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

最佳答案

AWS 安全规则只允许 IP 范围,称为 CIDRs ,您可以使用 AWS CLI 进行更新。但是,您不能简单地更新现有规则的 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。此命令使用 JMESPathquery参数只返回我们想要的数据:
    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"}]}]'
    

    关于amazon-web-services - 我可以在 aws 安全组中添加 dns 名称吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33339057/

    相关文章:

    swift - 具有开始值和结束值的 AWS DynamoDB 查询

    javascript - 使用 Javascript SDK 在启动时关联 ElasticIP

    linux - 如何使用 Cloud Init 挂载未格式化的 EBS 卷

    amazon-web-services - AWS - 自动部署 (.NET) 到 CloudFormation 堆栈

    amazon-web-services - Vagrant +AWS : error downloading 'dummy'

    elasticsearch - 索引使用Elasticsearch从Apache Nut抓取的数据?

    amazon-web-services - 如何使用 boto3 指定 core-os ec2 实例的根卷大小?

    django - 一个 ec2 实例中的多个弹性 beanstalk 环境

    algorithm - 基于时间跨度的 AWS Kinesis 流聚合

    javascript - 当 EC2 请求该文件时,S3 上的文件是否通过 EC2 加载到浏览器上