動的IP(毎回変わる)をAWS EC2マシンに接続する必要があります。
このため、私はパブリックIPをドメイン名(xyz.com)にマップしましたが、セキュリティグループに追加しようとしています。
しかし、AWSセキュリティグループはDNS名の追加を許可していません。それを行うには正しいプロセスですか、そうでない場合は私に提案してください。
セキュリティグループと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
この小さな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アドレスからのスイスチーズの穴でいっぱいのセキュリティグループが作成されるため、自分のアドレスではなくなった一時的なアドレスを持つセキュリティグループを作成しない方法について質問します。この問題に答える1つの方法は、(比較的)安定したIPアドレスエンドポイントを持つVPNをセットアップし、セキュリティグループを介してのみその単一のアドレスを許可することです。
AWSセキュリティルールでは、AWS CLIで更新できる CIDRs と呼ばれるIP範囲のみが許可されます。ただし、既存のルールの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
説明
この方法では、bashスクリプトを削除して上記の例から取得した次の3つのAWS CLIコマンドを使用します。
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"}]}]'
動的IPのセキュリティグループを作成し、スクリプトを実行するたびに、ファイルに保存されている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
希望する方法で動的IPを接続することはできません。 IPが変更されるたびに、セキュリティグループを介して許可する場合は、設定を新しいIPに変更する必要があります。
デスクトップ上のアイコンに作成する小さなスクリプトを書くこともできますが、AWS APIを使用して現在のIPを再度許可し、変更があった場合にそれを容易にします。