PCのDocker環境にApp Connectorをたててみた

# はじめに
本記事はゼットスケーラー株式会社としては初の[Advent Calender 2023](https://qiita.com/advent-calendar/2023/zscaler)の一つとして投稿しています。以下の免責事項をご理解の上、記事を読んで頂けると幸いです。
# 免責事項
本記事のコンテンツや情報において、可能な限り正確な情報を掲載するよう努めておりますが、 誤情報が入り込んだり、情報が古くなったりすることもあり、必ずしもその内容の正確性および完全性を保証するものではございません。そのため、本記事をエビデンスとしたゼットスケーラーへの問い合わせなどはご対応致しかねることをご理解頂けると幸いです。掲載内容はあくまで個人の意見であり、ゼットスケーラーの立場、戦略、意見を代表するものではありません。当該情報に基づいて被ったいかなる損害について、一切責任を負うものではございませんのであらかじめご了承ください。
# App Connectorとは
弊社ZPAにてゼロトラストネットワークアクセスを行うには、お客様の環境にApp Connectorをデプロイする必要があります。
App ConnectorはProxyとして動作し社内アプリケーションにアクセスを行う役割を担いますが、VPNゲートウェイとは違いグローバルIPを公開する必要がなくZPA Cloudにアウトバウンドで接続できればよいため、セキュアな社内アプリケーションへのアクセスが可能になります。
詳しくはAdvent Calender 2023 2日目の記事をご参照ください。
https://qiita.com/kentarokoba/items/a94a21649a2264471a97

App Connectorは以下の環境へのデプロイが可能です。
・Amazon Web Services (AWS)
・Centos, Oracle, and Redhat
・Microsoft Azure
・Microsoft Hyper-V
・VMware vCenter or vSphere Hypervisor (ESXi)
・Nutanix
・Docker
・OpenShift
# なぜPCでDockerなのか
App Connectorは本来オンプレのサーバやIaaS環境に導入いただきますが、お客様によってはZPAのPoCを実施したいけれどもその環境をすぐに用意できないというケースもございます。
じゃあ余っているPCにApp Connectorを立ててとりあえず環境作ってしまえばいいのではないか？
ということでせっかくなので2023年にサポートを開始したDockerにApp Connectorをデプロイし、手軽にZPA環境を構築してみたいと思います！
下記イメージのように外部からZPA経由で自宅のファイルサーバにアクセスしてみるのがゴールです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659193/0c15810b-32d9-e2ab-7a8b-3a38da1d3ab5.png)

# 【セットアップ】ZPAの設定

ZPAのUIにて事前に以下の設定を行います。

**①App Connector Groupの作成**
DockerにデプロイするApp Connector用にApp Connector Groupを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659193/867bbad7-d426-67db-ad53-cb0bcdaef159.png)

作成が完了すると、Provision Keyが発行されますので。あとでApp Connectorに登録するのでコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659193/86ce6271-193f-310f-b963-ea673fa47d96.png)


**②App Segmentの作成**
アクセスするファイルサーバをApp Segmentにて定義します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659193/dd012cca-d924-cb7f-0156-a1378cab0bed.png)

**③Access Policyの設定**
②で作成したApp Segmentに対してAccess Policyを設定します。
App Connector Groupとしては①で作成した"Docker_Connectors"を指定しています。
今回はユーザ/グループ指定の細かいポリシーは設定していません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659193/f615ad45-bc4d-1649-b29c-3ac93d25735c.png)

ZPA側の事前準備はこれで完了です。

# 【セットアップ】PCへのDockerインストール、App Connectorデプロイ
続いて、いよいよDocker環境にApp Connectorをデプロイします。

まずはDocker Desktopを以下よりダウンロード、インストールします。
https://docs.docker.com/desktop/install/windows-install/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659193/22a0796f-8a1b-7807-96df-529e5da78efc.png)

インストールが完了したら、Docker Desktopを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659193/568c3acc-72e3-f16e-bcb9-dafa49df8b34.png)

次にコマンドプロンプトを起動し、以下のコマンドにてApp Connectorをデプロイします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659193/e9b9e055-6f5b-91d8-8123-4973dcd3be58.png)
マスクしているところはApp Connector Group作成時にコピーしたProvision Keyになります。
それぞれのオプションの意味はhelpページにてご確認いただけます。
https://help.zscaler.com/zpa/app-connector-deployment-guide-docker

ZPAのUIにてApp Connectorが登録されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659193/78a2f9fe-4638-a621-9116-bd03ae48376c.png)

ワンコマンドで簡単ですね！

# 【動作確認】外部にあるPCからのアクセス
それでは実際に外部環境のPCからApp Connector経由でファイルサーバにアクセスしたいと思います。

App Segmentにて指定したサーバに対して接続を試みます。今回の端末はADに参加していないため認証が聞かれています。ユーザ名/パスワードを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659193/34662a4c-28a5-9be2-6f0a-a9c534cbb8a1.png)

認証成功です。無事外部の環境からアクセスができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659193/bb175772-e679-fca6-4a0c-c448cda95e1c.png)

ZPA側でログからも確認してみます。Docker環境のApp Connector経由でアクセスできていることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659193/998286cf-0e19-acfb-0baa-c53287b13d8b.png)

# まとめ
Docker環境にApp Connectorをデプロイし、ゼロトラストネットワークアクセスが実現できることを確認できました。
Docker環境では非常に簡単にデプロイが可能ですし、検証用途であればPC1台でも環境構築が可能です。
尚、今回はあくまでも手軽にゼロトラストネットワークアクセス接続を実現することを目的として記事を書いておりますので、実運用ではパフォーマンス、可用性を考慮してApp Connectorをデプロイしてくださいね。