有時候我們在外工作需要連回自己的 EC2 Instance 時,會需要重新設定一下 Security Group 來讓自己 SSH 回去。
於是自己寫了一個 AWS CLI 的腳本來自動更新自己的 Security Group,但還是建議透過 VPN 存取會更好就是了。
很簡單的一個腳本,不過 AWS CLI 提供的 Document 好像有點問題,範例中的 JSON 格式是會錯誤的,有興趣的話可以參考一下官方文件:modify-security-group-rules
在使用前請先隨便建一個 Rule ,取得 Security Group ID 跟 Rule ID 就可以使用這個 Script 了:
#!/bin/sh
SG_ID="SecurityGroupID"
SG_RULE="SecurityGroupRuleID"
REGION="YourRegion"
TZ=UTC
TIME=`date +"%Y-%m-%d %T UTC"`
HOSTNAME=`hostname`
PUB_IP=`curl -s -4 icanhazip.com`
echo "Update Your Public IP in AWS Security Group: $SG_ID..."
aws ec2 modify-security-group-rules \
--no-cli-pager \
--group-id $SG_ID\
--region $REGION \
--security-group-rules \
'{
"SecurityGroupRuleId": "'"$SG_RULE"'",
"SecurityGroupRule": {
"Description": "DDNS for SSH at '"$TIME"' from '"$HOSTNAME"'",
"IpProtocol": "tcp",
"FromPort": 22,
"ToPort": 22,
"CidrIpv4": "'"$PUB_IP"'/32"
}
}'
執行結果:
# sh sg-ddns.sh
Update Your Public IP in AWS Security Group: sg-xxxxxxxxxxxx...
{
"Return": true
}
可以在 AWS Console 看到相關的 Rule,由於 Rule 是重複使用的,換個網路環境再跑一次就可以更新了,不用擔心會遺留先前的 IP 在自己的 Security Group 上面,也可以搭配 Crontab 使用就可以實現 DDNS 了。