【第20回】Azureで社内システム再現（クラウド編）｜Hybrid Worker を閉域構成で実行する

## 概要

これまでの「オンプレ編」では、Azure の仮想マシン（IaaS）を使って、社員番号から名前を検索できるシンプルな社内システムを構築してきました。Active Directory、SQL Server、ADFS などを組み合わせ、オンプレミスの構成を仮想的に再現しています。

※全体構成の詳細は、[【第0回】Azureで社内システム再現（オンプレ編）｜構成図と動作の流れ](https://qiita.com/your-link-here) をご参照ください。

クラウド編では、これまでの構成をベースにしつつ、Azure のマネージドサービス（PaaS）を中心とした構成へ段階的に移行していきます。

※クラウド移行全体の設計方針については、[【第10.5回】Azureで社内システム再現（クラウド編）｜オンプレ構成をどうクラウドに移行するか？](https://qiita.com/saba_infra/items/4ff691131593e947d6cf) にまとめています。

---

## システム構成（今回の対象範囲）

今回のテーマは、**Azure Automation ランブックを Hybrid Worker 上で実行し、その通信をすべて仮想ネットワーク内に閉じた構成（閉域構成）を実現すること**です。

まず、下図は「クラウド編」におけるシステム全体の構成を示したものです。

![スクリーンショット 2025-04-18 14.17.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/f2c31873-a546-4340-b5d7-e838f14d6d12.png)


このうち、**赤枠で示している Hybrid Worker VM ↔ Automation / Storage 間の通信経路の閉域化**が、今回の対象範囲です。

---

次に、下図がその**閉域構成の詳細図**です。

![cloudのhw (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/2dc2b21b-c7b5-4abf-90f6-9c3a9d95f27d.png)


Hybrid Worker にランブックを実行させ、Automation アカウントおよび Storage アカウントに対して Private Endpoint を構成することで、  
**すべての通信を仮想ネットワーク内で完結させる構成**を実現しています。

また、名前解決には Private DNS ゾーンを利用し、nslookup でプライベートIPが返ることも確認済みです。  
結果として、**ランブックの実行からファイルの書き込みまで、インターネットを介さないセキュアな環境が構築できています。**

---

今回は以下の作業を行いました。

- Automation アカウントに対して Private Endpoint を構成
- Hybrid Worker VM から Automation への通信を閉域化
- Storage アカウントに対して Private Endpoint を構成し、FWでパブリックアクセスを無効化
- 通信経路とランブックの正常動作を確認

## Hybrid Worker から Automation への通信を閉域化する（PEの構成）

Hybrid Worker VM から Azure Automation への通信は、既定ではインターネットを経由する構成になっています。

そこで今回は、Automation アカウントに対して Private Endpoint（PE）を作成し、  
Hybrid Worker からのジョブ取得通信を仮想ネットワーク内で完結させるように構成します。

---

### Private Endpoint の作成（Automation）

Azure Automation アカウントの「ネットワーク」ブレードから「プライベート エンドポイント接続」へ進み、  
「＋プライベート エンドポイントの追加」を選択します。

![スクリーンショット 2025-04-07 19.19.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/67eaf459-0835-462e-8a5a-8db4d1bd5942.png)


ここでは任意の名前を設定します。今回は以下のように命名しました。
![スクリーンショット 2025-04-07 19.21.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/40859103-55ac-440c-8fd5-a024de320a4d.png)

対象サブリソースには、`DSCAndHybridWorker` を選択します。

![スクリーンショット 2025-04-07 19.22.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/e76641d2-aed6-45e5-a590-a24537b00e13.png)

Private Endpoint をどの仮想ネットワーク／サブネットに配置するかを指定します。

ここでは、事前に作成しておいた専用サブネット `sn-auto-ep` を選択しました。

![スクリーンショット 2025-04-07 19.22.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/e2852585-8d72-4558-b946-cf90c5c0e9a3.png)

## ストレージアカウントの閉域化（Private Endpoint構成）

続いて、CSVファイルの出力先である **Azure Storage アカウントの閉域化**を行います。

今回は Hybrid Worker VM から Storage にプライベートネットワークでアクセスする構成を目指します。

---

### ファイアウォールとネットワークの設定

まず、ストレージアカウントの「ファイアウォールとネットワーク」設定を変更し、**すべてのパブリックアクセスをブロック**します。

設定は以下のように構成しました：

- パブリックネットワークからのアクセス：`無効化（拒否）`

![スクリーンショット 2025-04-07 19.26.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/56ba22c5-2397-49e4-8144-75ce954e0efa.png)

この設定により、今後は仮想ネットワーク経由でのアクセス（＝Private Endpoint経由）のみが有効になります。

---

### プライベートエンドポイントの作成

次に、Storage アカウント用の Private Endpoint を構成します。

これまでと同様、事前に用意した専用のサブネットに対して Private Endpoint を作成します。

![スクリーンショット 2025-04-03 13.31.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/623d0c50-8df6-4cdb-9ecd-0458dc4dfac5.png)



---

これにより、Hybrid Worker VM からストレージアカウントの Blob コンテナにアクセスする際の通信が、仮想ネットワーク内で完結するようになります。

構成が正しく機能しているかどうかを確認するために、Hybrid Worker VM 上からストレージアカウントの Blob エンドポイントに対して `nslookup` を実行しました。

![スクリーンショット 2025-04-07 17.14.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/7817e588-8573-48f8-ad11-111a301a909b.png)

その結果、期待どおり Private Endpoint に割り当てられた **プライベート IP アドレス** が返ってきていることを確認できました。

このことから、名前解決がプライベート DNS ゾーン経由で正しく行われており、  
**Hybrid Worker VM からストレージアカウントへのアクセスがインターネットを経由せずに完結している状態**が実現できています。

---
## 動作確認：Hybrid Worker からのランブック実行

ここまでの構成が正しく機能しているかを確認するため、Azure ポータルからランブックを Hybrid Worker で実行してみます。

Automation アカウントの「ランブック」ブレードから、対象ランブックを開き、「Hybrid Worker で開始」を選択します。

![スクリーンショット 2025-04-18 15.28.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/50588b03-e36f-4870-bb72-d50d59404732.png)

---

実行後、ジョブの状態を確認すると **正常に完了していること**が確認できました。

![スクリーンショット 2025-04-18 15.31.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/e749f05a-32fe-41d3-ae48-68b0f52c6203.png)

---

さらに、Blob Storage の対象コンテナを確認すると、**CSV ファイルが正常に出力されていること**も確認できました。

![スクリーンショット 2025-04-18 15.31.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037248/8170b0f5-f6c6-4be2-92c3-7ae883c03a1c.png)

---