Open9
【インフラ/Azure】Azure仮想マシン作成と接続、初期セットアップから外部公開・内部ネットワーク公開の作業まで📝

Azure仮想マシン作成/接続について📝
SSH/config
Host xxxxx-test
# Public IP Address
HostName 20.555.25.222
User xxxxx-admin
Port 22

Node/npm/pnpm をinstallする📝
# nvm install
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# 書き込み
source /home/xxxxx-admin/.bashrc
# nvmのバージョンを確認
nvm --version
# nodeのバージョンを指定して、インストール
nvm install 20.0.0
# nodeのバージョンを確認
node --version
# pnpmをインストール
npm install -g pnpm
# pnpmのバージョン/installを確認
pnpm -v

uvとPythonをinstallする📝
# uv を install
curl -LsSf https://astral.sh/uv/install.sh | sh
# uvのPathを通す📝
source $HOME/.local/bin/env
# uvのPathが通っているかを確認
uv -V
# Pythonのインストール
uv python install 3.12
uv python list

Dockerをinstallする📝
# システムのパッケージリストを更新
sudo apt update
sudo apt upgrade -y
# Dockerのインストールに必要な依存パッケージをインストールします。
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# Dockerの公式GPGキーを追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Dockerのインストールに必要な依存パッケージをインストール
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# Dockerの公式GPGキーを追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Dockerのリポジトリを追加
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# パッケージリストを更新し、Dockerをインストール
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# Dockerサービスを確認
sudo systemctl status docker
# サービスが自動起動するよう設定します(必要に応じて)。
sudo systemctl enable docker
# 一般ユーザーでDockerを実行(オプション)
sudo usermod -aG docker $USER
# グループ変更を適用📝
newgrp docker
# Dockerが正しくインストールされたか確認
docker --version
# サンプルコンテナを起動
docker run hello-world

Azure 仮想マシンで起動しているlocalhostアプリを外部から見れるようにする
外から見えるようにするポイントは
- アプリを外部IF(インターフェース)で待ち受け
- OSのFW許可
- AzureのNSGで許可
- パブリックIP/DNS
アプリを0.0.0.0で待ち受ける
アプリがlocalhost(127.0.0.1)のみでリッスンしている場合、外部からアクセスできません。
アプリを0.0.0.0(すべてのネットワークインターフェース)でリッスンするように設定します。
React/Viteの場合
vite.config.ts
server: {
host: "0.0.0.0",
port: 3000,
open: true
},
OSのFW許可
# 外部から見れるようにしたいAppのPort番号 (Frontend)
sudo ufw allow 3000/tcp
sudo ufw status
Azureのネットワーク セキュリティ グループ(NSG)でインバウンド許可
VMに関連づいたNIC(またはサブネット)のNSGに受信規則を追加
送信元: 任意(本番は自分のグローバルIPなどに限定推奨)
送信先: このVM
サービス/ポート: TCP 3000
優先度: 100〜399の空き
※ NSGがNICとサブネット両方にある場合、両方で許可が必要になることがあります。

AzureVMを内部ネットワークのみで公開する Ver. VPN ゲートウェイ📝
仮想ネットワークにVPN接続するまで
- VNet を作成する(仮想マシンを作成している場合はセットで作成される)
- VPN ゲートウェイを作成する
- ルート証明書を生成する
- クライアント証明書を生成する
- VPN クライアント アドレス プールを追加する
- ルート証明書の公開キー情報をアップロードする
- エクスポートしたクライアント証明書をインストールする
- VPN クライアントの設定を構成する
- Azure に接続する
VPN ゲートウェイについて📝

AzureVMを内部ネットワークのみで公開する Ver. Bation📝
Webブラウザをinstallする
sudo apt install firefox
起動中のアプリに接続する📝
firefox http://localhost:3000
VMイメージは、Windowsの方がGUIで操作できるので楽📝

Azure 仮想マシンで起動しているWebアプリを内部ネットワークのみで公開するには?
社内/仮想ネットワーク内だけに公開するなら、基本は「パブリック到達性をなくす」+「到達元をVNet内に限定」の2点です。用途別に3パターン用意しました。
最短ルート(単一VMをそのまま内向き公開)
-
VMのパブリックIPを外す
- NIC の IP 設定から Public IP を「関連解除(dissociate)」し、必要なら Public IP 自体も削除。
例(CLI):
az network nic ip-config update -g <rg> --nic-name <nic> -n <ipconfig> --remove publicIpAddress # 使っていない Public IP を削除 az network public-ip delete -g <rg> -n <publicIpName>
これでインターネットからは到達不能になります。 (Microsoft Learn)
- NIC の IP 設定から Public IP を「関連解除(dissociate)」し、必要なら Public IP 自体も削除。
-
NSGで到達元をVNet内に限定
- 80/443(必要なポート)の source を VirtualNetwork サービスタグ にして Allow。インターネット(Any/Internet)からの Allow ルールは作らない。
例(CLI):
az network nsg rule create -g <rg> --nsg-name <nsg> -n allow-web-from-vnet \ --priority 100 --direction Inbound --access Allow --protocol Tcp \ --source-address-prefixes VirtualNetwork --destination-port-ranges 80 443
NSGとサービスタグの仕様は公式のとおり。 (Microsoft Learn)
- 80/443(必要なポート)の source を VirtualNetwork サービスタグ にして Allow。インターネット(Any/Internet)からの Allow ルールは作らない。
運用メモ:管理用のSSH/RDP も公開しない場合は、Azure Bastion か VPN 経由で接続します(BastionならVMにPublic IP不要)。 (Microsoft Learn)
複数VM/可用性が欲しい場合
パターンA:内部ロードバランサ(ILB, L4)
- Standard Load Balancer の フロントエンドに Private IP を割り当て。バックエンドにWeb VM群。ILBのIPにのみ社内からアクセス。
- 使い所:L4で十分、シンプル・安価に多台数を捌きたい。
作り方と仕組みはクイックスタートと概説を参照。 (Microsoft Learn)
パターンB:Application Gateway(L7, WAF)を内向き
- Application Gateway v2 に Private フロントエンドIP を付与して内向き公開(注意点:v2 は管理プレーン都合で Public 側のフロント構成や GatewayManager への許可が必要。アプリ利用はPrivateでOK)。
- 使い所:パスベース振り分け、WAF、TLS終端などL7機能が要る。 (Microsoft Learn)
社外拠点や在宅から「内向き」にアクセスさせる場合
-
Point-to-Site VPN(少人数の開発者・運用者向け)
クライアントPCからVNetへプライベート接続。 (Microsoft Learn) - Site-to-Site / VNet-to-VNet VPN(拠点間や別VNetと常時接続) (Microsoft Learn)
- どの方式でも、到達先はVNetのプライベートIP(VM直・ILB・AppGW Private)にします。
さらに厳密に分離したい/他VNetへプライベート配信したい場合
-
Private Link Service(自前サービス版)
Webアプリを Standard Load Balancer 背後に置き、Private Link Service を作ると、相手VNet側は Private Endpoint であなたのサービスにだけプライベート到達できます(テナント越え・顧客配布にも有効)。 (Microsoft Learn)
仕上げチェックリスト
- VM/NIC に Public IP が付いていない(付いていたら必ず外す)。 (Microsoft Learn)
- NSG で Inbound を VirtualNetwork 起点に限定。不要な Any/Internet からのAllow無し。 (Microsoft Learn)
- 複数台なら ILB か Application Gateway(Private) を正しく前段に。 (Microsoft Learn)
- 社外からの管理・閲覧は Bastion / VPN 経由。 (Microsoft Learn)
- 送信(egress)も外へ出したくないなら、既定のアウトバウンド を理解した上で UDR+FW/NAT で制御。 (Microsoft Learn)
どれを選べばよい?
- 1台だけ+同一VNetから見るだけ → 「最短ルート」でOK(Public IP削除+NSG)。
- 複数台・可用性 → ILB(L4)か Application Gateway(L7/WAF)。
- 在宅や支社から → P2S / S2S / VNet-to-VNet VPN を追加。
- 顧客や別サブスクリプションにだけ見せたい → Private Link Service。
必要なら、あなたの現在のVM/サブネット/NSGの状態に合わせて具体的なCLI/Portal手順まで落とし込みます。

Azure WAF を使用してWebサイトへのIPアドレス制限を設定する📝