【プライベートアクセス編】一般公開されたMicrosoft Entra Global Secure Access の動作確認(2/3)

# 1.はじめに

Microsoft Entra Global Secure Accessは、Microsoft Entra Internet AccessとMicrosoft Entra Private Accessの2つのネットワークセキュリティを提供しています。
今回は、ZTNA型のリモートアクセスの機能を提供する***Microsoft Entra Private Access編***です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/a3d4b8fc-70cb-520e-5f05-18edccf2cde4.png)

ちなみに、前回の記事のインターネットアクセス編は、以下となります。

https://qiita.com/mokonacl/items/c5dc460bc86a6afc1617

# 2.現状のまとめ

Microsoft Entra Private Accessは、***ZTNA型のリモートアクセス***を実現します。

### 2-1.ZTNAとは
ZTNAとは、ゼロトラストネットワークアクセスの略称であり、アタックサーフェス（攻撃対象領域）がない状態で、リモートアクセスをすることができます。

以下図のように、VPN型のアクセスの場合は、内部ネットワークのDMZ上に、グローバルIPを保有することで、外部ネットワークからのアクセスを実現することができます。
このとき、***内部ネットワークとつながるグローバルIPが、インターネット上に露出***します。そのため、VPN装置の脆弱性を狙われて攻撃を受ける恐れがあります。

対して、ZTNA型の場合は、内部ネットワーク上にあるコネクタから、***内から外方向への通信***のみで、リモートアクセスを実現します。このため、***内部ネットワークとつながる攻撃表面がありません***。

ただし、VPN型は、宛先をネットワークセグメント(例：192.168.0.0/24)のように設定することができ、ネットワークを拡張するような使い方ができますが、ZTNA型は、明示的に、特定のアプリ（IPアドレス/FQDN/ポート)を指定する必要がありますので、導入における一定のハードルがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/e5ecd14a-34a3-9c3d-f792-00f146bacb63.png)
<br>

:::note info
ランサムウェア被害の傾向について
警察庁が提供している情報に、「サイバー空間をめぐる脅威の情勢等」というデータがあります。
これはインターネット上での脅威（犯罪）を統計的にまとめたものとなります。

参考：警察庁「サイバー空間をめぐる脅威の情勢等」
https://www.npa.go.jp/publications/statistics/cybersecurity/

このデータに、ランサムウェアの被害にあった原因に関する記載があります。
令和５年時点でも、ランサムウェアの感染経路として、VPN機器から侵入された事例が最も多く報告されています。
これは、先ほどVPN型の図で説明したVPN装置のグローバルIPが、攻撃表面となり、脆弱性からクラッキングされたことが伺われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/61205a18-42da-2a1a-4211-8c6ecfe29abf.png)

引用：P28「ランサムウェアの感染経路」
https://www.npa.go.jp/publications/statistics/cybersecurity/data/R5/R05_cyber_jousei.pdf

:::

### 2-2.構成

Entra Private Accessを利用するには、以下図のように、

* アクセスしたいアプリがあるネットワーク上に、「プライベートネットワークコネクタ」を設置
* Entra管理センター上で、転送プロファイルの有効化、宛先となるアプリの設定
* 条件付きアクセスの設定（オプション）
* エンドポイントにGlobal Secure Access クライアントのインストール

を実施することで、実現できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/dd932173-3658-3586-120a-6770731a2651.png)

画像引用：https://learn.microsoft.com/ja-jp/entra/global-secure-access/how-to-get-started-with-global-secure-access#configure-global-secure-access-apps-for-per-app-access-to-private-resources


### 2-3.サポートされるエンドポイント

Global Secure Access クライアントを***インストール可能なOSは、WindowsとAndroid***となります。

ただし、Windowsにおいては、以下前提条件があり、Entra JoinedやEntra Hybrid Joinedという観点は、導入のハードルになりやすいかと思います。

* Windows 11 または Windows 10 
* Azure Virtual Desktop シングルセッション、Windows 365
※Azure Virtual Desktop のマルチセッションはサポートされていません
* Microsoft Entra 参加済みまたは Microsoft Entra ハイブリッド参加済み
※Microsoft Entra 登録済みデバイスはサポートされていません。

### 2-4.プライベートネットワークコネクタ

プライベートネットワークコネクタは、Windows Server 2012 R2 以降のWindows Serverにインストールすることで、利用できるエージェントです。
ZTNA型となるため、インバウンドの穴あけは不要で、ポート80,443のアウトバンド通信が可能であれば利用できます。なお、可用性のため、複数のエージェントを用意することが推奨されます。

https://learn.microsoft.com/ja-jp/entra/global-secure-access/how-to-configure-connectors#windows-server

加えて、ドメインに参加していないマシンで実行することができます。
ただし、統合 Windows 認証 (IWA) を使用するアプリケーションへのシングル サインオン (SSO) が必要な場合は、ドメイン参加済みマシンで、プライベートネットワークコネクタを構築する必要があります。

https://learn.microsoft.com/ja-jp/entra/global-secure-access/concept-connectors#domain-joining


### 2-5.POP

現在提供されているPOPは、以下となり、日本では東京と大阪にロケ―ションがある模様です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/2c80fec4-98e9-ff14-9f98-6060bbefe920.png)

https://learn.microsoft.com/ja-jp/entra/global-secure-access/reference-points-of-presence#microsoft-entra-internet-access-and-microsoft-entra-private-access

### 2-6.ログの保持期間

トラフィックログに関しては、30日間保持されます。
監査ログに関しては、Entra ID P1/P2の場合は、30日間保持されます。
ログのエクスポートに関しては、診断設定機能から実現することができます。

https://learn.microsoft.com/ja-jp/entra/global-secure-access/concept-global-secure-access-logs-monitoring#log-retention-and-storage

### 2-7.未提供機能(2024年7月時点)

ICMPやDNS over HTTPS、IPv6は、サポートされません。
また、Learn上では、UDPもサポートされていないようですが、アプリケーションセグメントにUDPの設定もできる模様です。
たぶんQUICなど利用できないものがあるため、まだ限定的なサポートかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/37342cdf-1753-f373-f80e-07cb61a5e4b9.png)


:::note info
内部アプリ（FQDN）の名前解決
宛先として登録済みのエンタープライズアプリケーション（FQDN）の名前解決（DNS）は、可能でした。
例えば、宛先に、web.example.localのようなFQDNを利用することができます。

しかし、ポート53番のDNSに関しては、プライベートネットワークコネクタが代理応答するため、期待される結果とならないことがあります。これはZTNA型のリモートアクセスの場合、いったんEntra Global Secure Access側のPOPに接続した後、宛先のプライベートネットワークに到達するため、Entra Global Secure Access側のグローバルIP情報が必要となるためと考えられ、アプリ側のプライベートAレコードを設定しても、Entra Global Secure Access側のグローバルIPが返されるようです。
:::

# 3.環境準備

それでは、動作確認をしていきます。
利用するユーザに関しては、ライセンス割り当て済みであることを前提とします。

:::note alert
2024年7月末時点の検証での確認結果となります。
そのため、記載内容を保証するものではなく、テスト環境ならびに設定値によって、異なる結果となる場合がございます。
掲載内容に問題がある場合は、ご指摘いただければ修正させていただきます。
:::

### 3-1.構成

今回のテスト構成は、以下となります。

特徴としては、PCを２台用意し、それぞれHyper-Vを有効化しています。
片方のPC Aには、Windows 11 PCを仮想的に作っており、もう片方のPC Bには、Windows Server 2022とWindows Server 2025 Previewを仮想的に作っています。
そして、PC B上のWindows Server 2025 Previewには、DNSも有効化しており、アプリのFQDNを名前解決できるようにしています。このDNSをプライベートネットワークコネクタは、登録済みアプリの名前解決に利用しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/1a2417f1-63c1-1dd0-a896-d633f1c3dd61.png)
<br>

アクセス回線には、IPv6を使っております。ただし、DS-Lite（Dual-Stack Lite）と呼ばれている技術で、IPv6のみの通信環境でも、IPv4 over IPv6技術を利用し、IPv4での通信も可能にしています。特徴としては、混雑しがちなIPv4ネットワークを避けて、IPv6のアクセスを利用できる点となります。

Windows 11の仮想マシン上で、nperfというサイトで、スループットを測定すると以下のようになりました。
無線区間が、802.11acとなり、ボトルネックになっていますので、下りは、209.4Mbps、上りは122.1Mbps、遅延は6msという結果です。


https://www.nperf.com/ja/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/36084d5a-bf79-ec7b-a3d1-77d55017279e.png)


後ほど、このアクセス回線を利用して、ctsTraffic.exeというツールを使いスループットを測定してみます。

https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/networking/overview-of-tcpip-performance#testing-tool-for-tcp-throughput

### 3-2.転送プロファイルの有効化（初回のみ）

本セクションは、初回作業時のみです。
Microsoft Entra 管理センターに移動し、「セキュリティで保護されたグローバルアクセス > 接続 > トラフィック転送」に移動します。
ここで、今回利用するプロファイルとなる「プライベート アクセス プロファイル」を有効化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/a98a2195-25ef-d180-2227-f5e9a6a1b04b.png)

### 3-3.クライアントアプリの展開

Global Secure Access クライアントアプリをIntuneで展開します。
なお、インターネットアクセスとプライベートアクセスは、同じクライアントを利用しますので、前回の記事で、既に展開自体は完了しています。

https://qiita.com/mokonacl/items/c5dc460bc86a6afc1617#3-3%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E5%B1%95%E9%96%8B

### 3-4.各種制限の適用

各種制限の適用も、前回の記事で実施済みです。
特に、DNS over HTTPSは、プライベートアクセスにおいて、FQDNを利用する場合は影響を受けると思います。
理由ですが、DNS通信が暗号化されている場合は、通信途中で、プライベートネットワークコネクタがDNSの代理応答ができなくなると思われるためです。（たぶん）

https://qiita.com/mokonacl/items/c5dc460bc86a6afc1617#3-4%E5%90%84%E7%A8%AE%E5%88%B6%E9%99%90%E3%81%AE%E9%81%A9%E7%94%A8

### 3-5.プライベートネットワークコネクタのインストール

リモートアクセスしたいアプリとIP到達性があるネットワークセグメントにWindows Server (2012 R2以降)を構築します。
インストーラーは、「接続 > コネクタ」から、「コネクタサービスのダウンロード」を選択し、「規約に同意してダウンロード」からダウンロードすることが可能となります。
このインストーラを対象となるWindows Serverにインストールしましたら、完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/f0a50d4b-0107-10b4-7529-04ccda762a3f.png)
<br>

コネクタグループにまとめることで、 同じコネクタ グループに属するコネクタが、高可用性と負荷分散のために単一のユニットとして動作することが可能となります。そのため、少なくとも２つのコネクタを同一のグループに割り当てることが推奨されます。

### 3-6.プライベートアクセス用のエンタープライズアプリケーションの登録と設定

それでは、いよいよプライベートアクセス用のエンタープライズアプリケーションの登録と設定をしていきます。
「エンタープライズアプリケーション」に移動し、「＋新しいアプリケーション」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/e7c6d4a2-afd7-6b46-6526-390b125a6552.png)
<br>

すると、ネットワークアクセスのプロパティの画面になります。
ここで、コネクタグループ（複数のプライベートネットワークコネクタを束ねるグループ）を設定し、宛先となるアプリケーションセグメントを設定します。
既に設定済みなので、以下図のように設定しました。FQDNやIPなどは、実際の環境に置き換えましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/ea30a14e-1f12-7536-3a4f-99cb56fd70a1.png)

::: note
ポートの書き方
ネットワークアクセスプロパティにおけるポートの書き方ですが、***コンマ[,]*** で区切ることもできますし、***ハイフン[-]*** でレンジを指定することもできる模様です。
例えば、HTTP,HTTPSを対象にしたい場合は、```80,443```と記載したり、ポートを気にせず、IPだけ考慮したい場合は、```0-65535```のようにレンジで指定することも可能となります。
:::

ちなみに、「＋アプリケーションセグメントの追加」をクリックすると、以下のような画面で、設定することができます。
Public Previewのときはできなかった***完全修飾ドメイン名***や***UDP***が追加されていますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/5656b178-eb99-4ad2-b15a-c8222cec3bba.png)
<br>

「ユーザとグループ」もありますので、利用ユーザまたはグループを登録しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/d398d752-42a5-0df6-cd56-31e3f15f8b5d.png)
<br>

最後は、条件付きアクセスへの適用です。
ターゲットのところに、先ほど作成したエンタープライズアプリケーションとなっているプライベートアプリを選択します。
特に、Entra Private Accessの特殊な要素はないですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/16f01466-8ddd-9d10-e927-067c724fb7b7.png)
<br>

# 4.動作確認

動作確認をした結果としては、SSH, HTTP, HTTPS, SMB, RDP,FTPに関して、正常に動作することが確認できました。

<table>
  <caption>テスト結果</caption>
  <thead>
    <tr>
      <th>ポート</th> <th>説明</th><th>結果</th>
    </tr>
  </thead>
  <tr>
    <td>22</td> <td>SSH</td><td>成功</td>
  </tr>
  <tr>
    <td>80,443</td> <td>HTTP,HTTPS</td><td>成功</td>
  </tr>
  <tr>
    <td>445</td> <td>SMB</td><td>成功</td>
  </tr>
  <tr>
    <td>3389</td> <td>RDP</td><td>成功</td>
  </tr>
  <tr>
    <td>4444</td> <td>テスト用ポート</td><td>成功</td>
  </tr>
　<tr>
    <td>21,エフェメラルポート</td> <td>FTP パッシブモード</td><td>成功</td>
  </tr>
</table>

:::note 
FTP通信
FTPに関しては、アクティブモードの場合は、サーバ発通信が発生することから、ZTNA型としては上手く動作させられないようです。
パッシブモードの場合は、データコネクションのポートがエフェメラルポートとなってしまうので、広くポートを開ける必要があります。
:::

### 4-1.PsPing

ICMPは利用できないので、TCPによる疎通確認を実施します。
以下URLより、クライアントにPsPingをダウンロードします。

https://learn.microsoft.com/ja-jp/sysinternals/downloads/psping

以下のように、クライアントからPsPingを実行します。

```powershell
.\psping.exe -n 5 [serverip]:[port]
```

実行結果は以下となり、正常に疎通しているように見受けられます。

```powershell
PS C:\work> .\psping.exe -n 5 10.10.20.42:4444

PsPing v2.12 - PsPing - ping, latency, bandwidth measurement utility
Copyright (C) 2012-2023 Mark Russinovich
Sysinternals - www.sysinternals.com

TCP connect to 10.10.20.42:4444:
6 iterations (warmup 1) ping test:
Connecting to 10.10.20.42:4444 (warmup): from 172.23.249.32:50372: 10.80ms
Connecting to 10.10.20.42:4444: from 172.23.249.32:50373: 21.80ms
Connecting to 10.10.20.42:4444: from 172.23.249.32:50374: 25.90ms
Connecting to 10.10.20.42:4444: from 172.23.249.32:50375: 15.84ms
Connecting to 10.10.20.42:4444: from 172.23.249.32:50376: 17.87ms
Connecting to 10.10.20.42:4444: from 172.23.249.32:50377: 19.62ms

TCP connect statistics for 10.10.20.42:4444:
  Sent = 5, Received = 5, Lost = 0 (0% loss),
  Minimum = 15.84ms, Maximum = 25.90ms, Average = 20.21ms
```



### 4-2.SSH

SSHのテストには、以下URLを参考に、宛先となるWindows ServerにOpenSSHの設定をしています。

https://learn.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_install_firstuse?tabs=gui

SSHサーバの設定が完了しましたら、クライアントから```ssh [username]@[ssh server fqdn]```を入力し、アクセスを実施します。
すると、無事アクセスでき、プロンプトが```[username]@[hostname]```になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/16f714e7-3be5-dd10-a1f8-3e49ea857fd7.png)

### 4-3.HTTP,HTTPS

HTTP,HTTPSに関しては、宛先となるWindows Serverに、IISの設定をしています。

なお、HTTPSに関しては自己証明書を使う簡易構成となっていますので、httpsのところが赤くなり、セキュリティ保護なし、となりました。これは証明書の問題なので、いったんOKとしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/781b6403-85ac-f975-c7b2-fd91d157db8f.png)

### 4-4.SMB

SMBについては、宛先となるWindows ServerのCドライブ配下にshareというフォルダを作り、共有設定をします。
そして、クライアントからフォルダが見えるかの確認を実施します。
フォルダパスに、```\\10.10.20.42\share```と入力すると、対象フォルダのファイルを閲覧や編集することができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/e303b17a-6368-6116-8c5b-4da5b293eaf2.png)

### 4-5.RDP

RDPについては、宛先となるWindows Serverで、RDPの許可（システム > リモートデスクトップ）し、対象となるユーザを許可します。
そして、クライアントから「mstsc.exe」を実行することで、リモートデスクトップ可能となりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/d244b583-8cc4-7a54-6280-d5b97e1a9958.png)

### 4-6.FTP

FTPについては、宛先となるWindows Serverで、FTPを有効化しておきます。
暗号化も適用しているため、以下サイトの手順を利用すると良いかもしれません。
加えて、クライアントソフトとしては、WinSCPを利用し、明示的なTLS/SSL暗号化によるFTPを実施しています。WinSCPに関しても、下記URLからダウンロードすることが可能です。

https://winscp.net/eng/docs/guide_windows_ftps_server

https://winscp.net/eng/docs/lang:jp#winscp_%E3%81%AE%E5%8F%96%E5%BE%97%E3%81%A8%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

こちらも、SMBと同様のフォルダを見ることができ、クライアントにファイルをダウンロードしたりすることができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/a9414819-98c4-58cc-0902-e3dad8e935dc.png)

### 4-7.ctsTrafficによるテスト

最後は、ctsTrafficによるスループットテストを実施します。
以下URL先にあるリンクからGitHubに移動し、ctsTraffic.exeをダウンロードします。

https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/networking/overview-of-tcpip-performance#testing-tool-for-tcp-throughput

サーバIPは適切に置き換えて頂き、以下コマンドを実行します。
指定がない場合は、ポート4444で、TCP通信によるスループットを測定できます。

```powershell
#サーバー
 .\ctsTraffic.exe -listen:* -consoleverbosity:1

#クライアント
 .\ctsTraffic.exe -target:[サーバーIP] -consoleverbosity:1
 ```

実行結果は、以下で、速度は約86Mbpsでした。
無線区間を2回通過しており、上りが約100Mbpsのアクセスを利用していることを考えると期待通りかもしれません。また、NetErrorや、DataErrorも特に出ておらず、良好な結果と思われます。

 ```powershell
#実行結果

PS C:\work> .\ctsTraffic.exe -listen:* -consoleverbosity:1
  Configured Settings
-----------------------
        Protocol: TCP
        Options: KeepAlive InlineIOCP MsgWaitAll
        IO function: Iocp (WSASend/WSARecv using IOCP)
        IoPattern: Push <TCP client send/server recv>
        PrePostRecvs: 1
        PrePostSends: 1
        Level of verification: Connections & Data
        Port: 4444
        Buffer used for each IO request: 65536 [0x10000] bytes
        Total transfer per connection: 1073741824 bytes
        Accepting connections on addresses:
                0.0.0.0:4444
                [::]:4444
        Server-accepted connections before exit : 0xffffffffffffffff

Legend:
* TimeSlice - (seconds) cumulative runtime
* Send & Recv Rates - bytes/sec that were transferred within the TimeSlice period
* In-Flight - count of established connections transmitting IO pattern data
* Completed - cumulative count of successfully completed IO patterns
* Network Errors - cumulative count of failed IO patterns due to Winsock errors
* Data Errors - cumulative count of failed IO patterns due to data errors


 TimeSlice      SendBps      RecvBps  In-Flight  Completed  NetError  DataError

     0.001            0            0          0          0         0          0
     5.001           59      6383206          8          0         0          0
    10.004            0      6300782          8          0         0          0
    15.009            0      9008744          8          0         0          0
    20.005            0      9444739          8          0         0          0
    25.006            0     10693336          8          0         0          0
    30.010            0     10686925          8          0         0          0
    35.007            0     13206874          8          0         0          0
    40.004            0     12931458          8          0         0          0
    45.016            0     11938221          8          0         0          0
    50.013            0     13980663          8          0         0          0
    55.007            0     10511480          8          0         0          0
    60.000            0     13860608          8          0         0          0

  **** ctrl-break hit -- shutting down ****


  Historic Connection Statistics (all connections over the complete lifetime)
-------------------------------------------------------------------------------
  SuccessfulConnections [0]   NetworkErrors [0]   ProtocolErrors [0]

  Total Bytes Recv : 653787136
  Total Bytes Sent : 296
  Total Time : 60825 ms.
PS C:\work>
PS C:\work> 653787136 / 60.825 *8 / 1000000
85.989265729552

```

# 5.おわりに

昔のAzure AD Application Proxyは、HTTP/HTTPS通信が対象でしたが、Microsft Entra Global Secure Accessでは、TCP（＋設定としてはUDPも可能）まで拡張され、さらに、宛先にFQDNも利用できるようになってました。
さらに、iPhoneからも利用できるようになったら、便利ですね。

次回は、GSAのMicrosoft トラフィック編です。

https://qiita.com/mokonacl/items/54bdbf736965282afaa5