Azure VNET の「既定の送信アクセスを無効」を試してみた

下記のアナウンスによると、「2025 年 9 月 30 日に、Azure の仮想マシンの既定の送信アクセス接続は廃止されます。」との事。まだまだ先の話ですが、実際に試す事ができるようなので、やってみました。

https://azure.microsoft.com/ja-jp/updates/default-outbound-access-for-vms-in-azure-will-be-retired-transition-to-a-new-method-of-internet-access/

## Azure CLI のバージョン確認

```bash:bash
az version                   
{
  "azure-cli": "2.54.0",
  "azure-cli-core": "2.54.0",
  "azure-cli-telemetry": "1.1.0",
  "extensions": {}
}
```

## パブリック IP アドレスなしの VM 検証環境を作成

```bash:bash
prefix=mnrpoc
region=japaneast

az group create \
  --name ${prefix}-rg \
  --location $region

az vm create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --os-disk-name ${prefix}-vmOSDisk \
  --image Ubuntu2204 \
  --size Standard_B1s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --storage-sku Standard_LRS \
  --nsg-rule NONE \
  --public-ip-address ""
```

## 外部から VM のアウトバウンドに使用しているパブリック IP の取得を試す

```bash:bash
az vm run-command invoke \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --command-id RunShellScript \
  --scripts "curl -s inet-ip.info" \
  --query "value[].message" \
  --output tsv
```

下記のように、VM が使用しているパブリック IP が取得できました。

```txt
Enable succeeded: 
[stdout]
20.210.237.177

[stderr]
```

## サブネットの「既定の送信アクセスを無効」にしてみる

```bash:bash
az network vnet subnet update \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vmSubnet \
  --vnet-name ${prefix}-vmVNET \
  --default-outbound false
```

`(NotAllowedToModifyDefaultOutboundAccessPropertyOnSubnet) It is not allowed to modify DefaultOutboundAccess property on non-empty subnet. Current value . Provided value False.` というメッセージが表示され、空のサブネットではないと変更できない事がわかりました。

## 別環境に「既定の送信アクセスを無効」サブネットを作成

```bash:bash
prefix=mnrpoc2
region=japaneast

az group create \
  --name ${prefix}-rg \
  --location $region

az network vnet create \
  --name ${prefix}-vnet \
  --resource-group ${prefix}-rg \
  --address-prefix 10.0.0.0/24

az network nsg create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-nsg

az network vnet subnet create \
  --vnet-name ${prefix}-vnet \
  --resource-group ${prefix}-rg \
  --name default-subnet \
  --address-prefix 10.0.0.0/24 \
  --network-security-group ${prefix}-nsg \
  --default-outbound false
```

## 検証用 VM を作成し外部通信を試す

```bash:bash
az network nic create \
  --name ${prefix}-nic \
  --resource-group ${prefix}-rg \
  --vnet-name ${prefix}-vnet \
  --subnet default-subnet

az vm create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --os-disk-name ${prefix}-osdisk \
  --image Ubuntu2204 \
  --size Standard_B1s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --nics ${prefix}-nic \
  --storage-sku Standard_LRS

az vm run-command invoke \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --command-id RunShellScript \
  --scripts "curl -s inet-ip.info" \
  --query "value[].message" \
  --output tsv
```

下記のように、VM が使用しているパブリック IP が取得できませんでした。

```txt
Enable succeeded: 
[stdout]

[stderr]
```

## VM を削除してから「既定の送信アクセスを無効」を有効に変更

```bash:bash
az vm delete \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --yes

az network nic delete \
  --name ${prefix}-nic \
  --resource-group ${prefix}-rg

az disk delete \
  --name ${prefix}-osdisk \
  --resource-group ${prefix}-rg \
  --yes

az network vnet subnet update \
  --vnet-name ${prefix}-vnet \
  --resource-group ${prefix}-rg \
  --name default-subnet \
  --default-outbound true
```

## 再度、検証用 VM を作成し外部通信を試す

```bash:bash
az network nic create \
  --name ${prefix}-nic \
  --resource-group ${prefix}-rg \
  --vnet-name ${prefix}-vnet \
  --subnet default-subnet

az vm create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --os-disk-name ${prefix}-osdisk \
  --image Ubuntu2204 \
  --size Standard_B1s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --nics ${prefix}-nic \
  --storage-sku Standard_LRS

az vm run-command invoke \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --command-id RunShellScript \
  --scripts "curl -s inet-ip.info" \
  --query "value[].message" \
  --output tsv
```

下記のように、VM が使用しているパブリック IP が取得できました。

```txt
Enable succeeded: 
[stdout]
23.100.99.116

[stderr]
```

## 参考

https://learn.microsoft.com/ja-jp/azure/virtual-network/ip-services/default-outbound-access

https://learn.microsoft.com/ja-jp/cli/azure/network/vnet/subnet?view=azure-cli-latest#az-network-vnet-subnet-update