[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 就可以結束囉~
(本頁面已被瀏覽過 68 次)