Updating AWS Security Group Source by DDNS


有時候我們在外工作需要連回自己的 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 了。


See also

comments powered by Disqus