AVDは何故閉域にできないのか？


## はじめに

AVDは閉域にできないと言われています。
何故できないのかを私なりに整理してみました。

結論は「Azureだけでは閉域化できない。」
「しかし、閉域化の方法が全くないわけではない。」です。

誤っている点などあればコメントいただけますと嬉しいです。

## １. AVDの構成要素

AVDの基本的な構成は以下です。

1. コントロールプレーン
1. Entra ID
1. SessionHost（仮想マシン）

![AVD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/0daa6898-bea6-4839-8514-b389a7bc3fd5.png)

:::note warn
本来はユーザプロファイル用のストレージサービス等も必要ですが今回は割愛します。また、閉域をテーマにしているのでExpressRouteを記載しています。
:::

## ２. クライアント接続シーケンス

まずは一般的なAVD接続シーケンスを確認してみます。
クライアントからAVDへ接続するには大きく12のステップがあります。
※Learnは[こちら](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/network-connectivity)

#### 1～6の通信

AVD接続の際、最初にIDとPASSを入力して認証するかと思いますが、その際の通信です。

![1-6通信.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/63ed4ec7-305a-44e9-be4a-21ff96900f85.png)


  ここまででアプリケーション内にアイコンが出来上がります。

![workspace.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/7cd80512-c1eb-43ad-bbf5-9a336755f5be.png)

::: note warn
ここまでの通信ではあくまで認証フェーズなので、仮にアプリケーショングループ (DAG) へのユーザー割り当て操作をしていない場合でも問題なく処理されます。その場合、「SessionDesktop」アイコンが表示されません。
:::

#### 7～12の通信

アイコンをたたくと以下の通信が発生します。

![7-12通信.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/878fe602-b448-459c-8084-06739777fc40.png)

ここまできてAVDに接続完了です。

![Screenshot-avd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/34639e03-c782-4b7e-8a09-3aca0b572b81.png)

## ３. 接続シーケンスの中身を閉域視点で確認する

#### Entraとの通信
例えば2番でEntraによるユーザ認証があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/cb0c659f-20fa-4624-8714-ff29b142c83c.png)


Entra（Entra ID）との通信は閉域ではないです。

:::note warn
ExpressRouteのMicrosoft Peeringであれば閉域にできますが、AVDを使う際は多くの場合M365を使用するかと思います。M365向け通信はMicrosoft Peeringを使用する際承認が必要であり、承認されるかどうかは何とも言えません。

Microsoft ピアリングのLearnはこちら：[Microsoft ピアリング](
https://learn.microsoft.com/ja-jp/azure/expressroute/expressroute-circuit-peerings#microsoftpeering
)
:::

#### Azure Front Doorとの通信

7番のFront Doorとの通信についても閉域になりません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/50a4ae1d-7c1a-4618-a363-50ed7ff6b4de.png)


Azure Front DoorはExpressRouteを使用した閉域接続をサポートしていないと[Learn](https://learn.microsoft.com/ja-jp/azure/expressroute/expressroute-faqs#microsoft-peering)にて明言されています。

> サポート対象外:
CDN
Azure Front Door
Multifactor Authentication Server (レガシ)
Traffic Manager
Logic Apps
Intune

## ４. FQDN

次にFQDNを確認します。
※Learnは[こちら](learn.microsoft.com/ja-jp/azure/virtual-desktop/required-fqdn-endpoint?)

大きくは2グループあります。

A. クライアントからの通信（FQDN　12個）　
B. セッションホストからの通信（FQDN　22個）

どちらも閉域ではない通信になります

:::note warn
本題とは異なりますが、Learn記載のFQDNはワイルドカードを使用しているため、正確にFQDNを把握するにはイベントビューアから確認する必要があります。
:::

## ５. PrivateLink

AVDはPrivateLinkがあるので閉域化可能なのではという話があります。

確かにPrivateLinkはあるのですが、必要な通信(FQDN)のうち

「*.wvd.microsoft.com」←こちらのみ閉域にできます。

個数で言うと以下の通りです
1. クライアントからの通信　1/12個　
1. セッションホストからの通信　1/22個

「*.wvd.microsoft.com」はコントロールプレーンへの通信が閉域になります。
他の通信は閉域ではない通信になります。

![AVD-privatelink-com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/b97341b4-96d1-473a-a3d7-10bc8de381d8.png)

Learnはこちら：[Azure Private Link with Azure Virtual Desktop](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/private-link-overview)


#### クライアント接続シーケンス

PrivateLink使用時のクライアント接続シーケンスは[こちら](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/private-link-overview#client-connection-sequence)
※プライベート ルートからのクライアント接続のみを許可している場合

:::note 
本題とは異なりますがAVDのPrivateLinkを使用するとユーザが作成したワークスペース固有のFQDNに対してDNSクエリを実行します。固有のFQDNとなるため、Azure Firewallと組み合わせると外部テナントAVDへのアクセスを防げます。
:::

## ６. RDP Shortpath

RDP Shortpath使えばいいのでは？と思われるかたもいるかもしれません。
確かに画面転送をプライベートネットワークで行うことが可能です。
しかし、最初にEntraへの認証を行う必要があるので閉域になりません。

また、Private Linkと違い閉域からのアクセスを強制できません。(パブリックルートからAVDへアクセス可能)

Learnはこちら：[Azure Virtual Desktop の RDP Shortpath](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/rdp-shortpath?tabs=managed-networks)

## ７. Azure Virtual Desktop on Azure Local 

昔はAzure Stack HCIという名前でした。
オンプレミスにしちゃえば閉域になるのではと思われるかもしれません。

しかし、このサービスはセッションホストがオンプレになるイメージです。
RDP Shortpathを使うことができますが、やはりEntraとの通信が必要となるため閉域ではありません。

Learnはこちら：[Azure Virtual Desktop on Azure Local](https://learn.microsoft.com/ja-jp/azure/virtual-desktop/azure-local-overview)

## ８. Citrix Cloud

他の方法では閉域にできないと記載しましたが、この方法であれば閉域にできます。

Azure内部にCitrix専用のVM(Cloud Connector)をたてて、従来のAVDコントロールプレーンのような役割のCitrixサービスへ接続することで閉域にできます。
※Citrix社との契約が必要になります

なお、コストや運用面などを考慮した上で採用検討することをおすすめします。

:::note warn
公式ドキュメント上での確証を得ることはできていません。
CitrixのCloud Connectorの要件にADサーバがあればOKとあることから、今までネックだったEntraを含めたコントロールプレーンへのアクセスをCloud Connector（ＶＭ）経由にできるため閉域にできると思っています。
Cloud Connectorの接続要件：[システムおよび接続要件](https://docs.citrix.com/ja-jp/citrix-cloud/overview/requirements/internet-connectivity-requirements.html)
:::

分かりやすいのは[くらう道](https://www.cloudou.net/citrix/xend005/)さんです。

## ９. VMware Horizon Cloud Service

Horizon Cloud with AVD というサービスが昔あり、Citrix同様閉域化できていたと言われていました。
しかし、サービス終了に伴いこの方法は出来なくなりました。

後継サービスが「VMware Horizon Cloud Service next-gen」です。 

しかし、こちらはEntraへアクセスする必要があり閉域化は無理です。

現在確認すると[Learn](https://learn.microsoft.com/ja-jp/azure/architecture/guide/virtual-desktop/start-here)では以下のように紹介されていました。

>Omnissa Horizon Cloud on Microsoft Azure は、Azure Virtual Desktop を拡張することで、Azure での仮想デスクトップとアプリケーションの配信を簡略化する Omnissa サービスです。

(何故Omnissaになったのか等は「VMware」「Broadcom」「Omnissa」等で調べるとでてきます）

Omnissaのドキュメントはこちら：[Horizon Cloud Service - next-gen Architecture](https://techzone.omnissa.com/resource/horizon-cloud-service-next-gen-architecture#introduction)

:::note warn
こちらは昔公式ドキュメント上でインターネットアクセス必須という文章を見かけた記憶があるのですが、あまり深追いしておらず再度見つけられていません。
:::

こちらも[くらう道](https://www.cloudou.net/vmware/hzn015/)さんが分かりやすいです。

## まとめ

Azureだけでは閉域化できません。
閉域を目指す場合はCitrix Cloudを検討する必要があります。

## 補足

AVDの通信が閉域にできたとして、Azure管理するために”Azure portalへ接続する通信はどうするのか？”など使用するサービスをトータルで検討することをおすすめします。

また、「閉域化」に求めるものを明確にするとよいかもしれません。

- ケース１：インターネットを使いたくない
⇒パブリックIPなしでセキュアに接続する方法もあるがそれではダメなのか？
            
- ケース２：専用線で接続したい
⇒HTTPS等で暗号化されていてたとしても専用線じゃないとダメなのか？
            
- ケース３：閉域接続したい
⇒ExpressRouteを使用する場合、VNetから先の通信も閉域接続が必要か？
⇒Microsoft Peeringまで必要か？
などなど

Microsoft PeeringのLearnはこちら：[Microsoft ピアリング](
https://learn.microsoft.com/ja-jp/azure/expressroute/expressroute-circuit-peerings#microsoftpeering
)

## 参考文献

■ブログ

https://www.cloudou.net/

https://qiita.com/carol0226/items/00f3ad1c96960dd38b0c

■Learn

https://learn.microsoft.com/ja-jp/azure/architecture/guide/virtual-desktop/start-here

https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/scenarios/azure-virtual-desktop/landing-zone-citrix/citrix-network-topology-connectivity

■Citrix Cloud 

https://docs.citrix.com/en-us/citrix-cloud/overview/requirements/internet-connectivity-requirements

https://docs.citrix.com/en-us/citrix-cloud/citrix-cloud-resource-locations/citrix-cloud-connector/technical-details.html#system-requirements

■VMware(Omnissa)

https://techzone.omnissa.com/resource/horizon-cloud-service-next-gen-architecture#introduction