[Azure] 使用 Azure CLI 設定網路安全群組中的輸入規則,允許家中機器連上 VM

[Azure] 使用 Azure CLI 設定網路安全群組中的輸入規則,允許家中機器連上 VM

之前在 Azure Cloud 上建立了一台 VM,

也順帶建立了一個網路安全群組 (Network Security Group),

裡面有一條輸入安全規則 (Inbound security rule),

限制了只有特定的 IP 位址,才可以連上 RDP port 3389:

 

不過,因為家裡是使用光世代,出口 IP 位址似乎常常在變動

(我也沒打算設定成固定 IP 位址,怕如果被什麼網站擋了後無法翻身 :P)

因此我要從家裡連上 VM 時,常常就得再到 Azure Portal 修改這邊的設定,

實在是有點麻煩…

 

研究了一下之前也有在用的 Azure CLI,

發現可以寫成一個 shell script,來快速修改 IP:

#!/bin/bash

set -e

BASTION_IP="12.23.34.45"
BASTION_PORT="3389"
RG_NAME="my-poc"
NSG_NAME="rancher-nsg"
RULE_NAME="AllowMyIpAddressRDPInbound"

test_rdp_port() {
    nc -vvv -z --apple-tcp-timeout 3 "${BASTION_IP}" "${BASTION_PORT}"
}

if ! test_rdp_port; then
    az login

    # Update the rule to allow connection from the current IP
    az network nsg rule update \
        -g "${RG_NAME}" \
        --nsg-name "${NSG_NAME}" \
        -n "${RULE_NAME}" \
        --source-address-prefixes "$(curl -L ipconfig.me)" \
        --destination-port-ranges "${BASTION_PORT}" \
        --access Allow \
        --protocol Tcp \
        --direction Inbound

    # Allow some time for the NSG rule to take effect
    for i in {1..60}; do
        if test_rdp_port; then
            break
        fi
        sleep 1
    done
fi

 

簡單說明一下,它首先會用 nc (netcat) 測試指定 IP 機器上的 port,

看看能不能連通,如果可以連通,那就不需要修改網路安全群組了。

否則,它會先執行  az login 來登入 Azure Cloud,

再用 curl 去連 ipconfig.me 來取得目前的出口 IP,

接著把這個 IP 寫回那條輸入安全規則~

 

更新完規則後,它會持續的測試指定的 port 能否連通,

這是因為 Azure 在設定好規則後,似乎不會立刻生效,而是要等一小段時間…

(如果是 AWS 的話,倒是很快就會生效了)

因此等到測試可以成功連通後,script 就可以結束囉~

(本頁面已被瀏覽過 32 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料