Open9

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

まさぴょん🐱まさぴょん🐱

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アプリを外部から見れるようにする

外から見えるようにするポイントは

  1. アプリを外部IF(インターフェース)で待ち受け
  2. OSのFW許可
  3. AzureのNSGで許可
  4. パブリック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とサブネット両方にある場合、両方で許可が必要になることがあります。

https://zenn.dev/shimiyu/articles/d0ef1cff6ca25d

まさぴょん🐱まさぴょん🐱

AzureVMを内部ネットワークのみで公開する Ver. VPN ゲートウェイ📝

https://qiita.com/carol0226/items/c43bcb5def13c7e0ebac

https://zenn.dev/shimotani/articles/479581bc5dc7f0

https://qiita.com/carol0226/items/f28f381e3dcf43590d7b

https://zenn.dev/microsoft/articles/zenn-vpngw-instruction

仮想ネットワークにVPN接続するまで

  1. VNet を作成する(仮想マシンを作成している場合はセットで作成される)
  2. VPN ゲートウェイを作成する
  3. ルート証明書を生成する
  4. クライアント証明書を生成する
  5. VPN クライアント アドレス プールを追加する
  6. ルート証明書の公開キー情報をアップロードする
  7. エクスポートしたクライアント証明書をインストールする
  8. VPN クライアントの設定を構成する
  9. Azure に接続する

VPN ゲートウェイについて📝

https://qiita.com/carol0226/items/f28f381e3dcf43590d7b

https://learn.microsoft.com/ja-jp/azure/vpn-gateway/point-to-site-certificate-gateway

まさぴょん🐱まさぴょん🐱

AzureVMを内部ネットワークのみで公開する Ver. Bation📝

https://learn.microsoft.com/ja-jp/azure/bastion/bastion-overview

https://zenn.dev/chips0711/articles/bf09df6603f455

https://zenn.dev/yotan/articles/fd16664367ba38

https://qiita.com/M-M/items/afadd554a031375d49c8

https://learn.microsoft.com/en-us/azure/bastion/connect-vm-native-client-windows

Webブラウザをinstallする

sudo apt install firefox

起動中のアプリに接続する📝

firefox http://localhost:3000

VMイメージは、Windowsの方がGUIで操作できるので楽📝

https://qiita.com/ntonlybutinvain/items/ed81babbf8dae7b168a4

まさぴょん🐱まさぴょん🐱

Azure 仮想マシンで起動しているWebアプリを内部ネットワークのみで公開するには?

社内/仮想ネットワーク内だけに公開するなら、基本は「パブリック到達性をなくす」+「到達元をVNet内に限定」の2点です。用途別に3パターン用意しました。

最短ルート(単一VMをそのまま内向き公開)

  1. 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)

  2. 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)

運用メモ:管理用の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手順まで落とし込みます。