Cloudflare WARP クライアントの自動登録を macOS で確認する

# 概要

> [macOS · Cloudflare for Teams documentation](https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/deployment/mdm-deployment/macOS-Teams)

MDM を使った WARP クライアントの配布が可能ですが、Service Token のパラメータを指定することで登録・接続までを自動的に行うことができます。
今回は MDM を使わずに確認します。

# Service Token 作成

> [Create a service token · Cloudflare for Teams documentation](https://developers.cloudflare.com/cloudflare-one/identity/service-auth/service-tokens#create-a-service-token)

↑こちらの手順に従って https://dash.teams.cloudflare.com からService Token を事前に作成します。
`Client Secret` は一度しか表示されませんので、控えておいて後で使います。

![image-20211020121028882](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20211020121028882.png)
![image-20211020121143621](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20211020121143621.png)

# Device enrollment rule の作成

https://dash.teams.cloudflare.com の Settings > Devices > Device enrollment permissions > Manage > Device enrollment rules > Add a policy から以下のようなルールを作成し Save します。

- Rule action --> Service Auth
- Include --> Service Token --> Select Service Token name

![image-20211020122050634](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20211020122050634.png)

# WARP クライアントダウンロード

> [macOS desktop client · Cloudflare WARP client docs](https://developers.cloudflare.com/warp-client/setting-up/macOS)

`zip` をダウンロードし、`pkg` ファイルを取り出しておきます。

```shell
curl -o ~/Downloads/Cloudflare_WARP.zip https://www.cloudflarewarp.com/Cloudflare_WARP.zip
unzip -o ~/Downloads/Cloudflare_WARP.zip -d ~/Downloads
```

または

https://gist.github.com/kyouheicf/921426637a9f139e8386eb693a4a3c1f

# `plist`ファイル作成

> [Parameters · Cloudflare for Teams documentation](https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/deployment/mdm-deployment/parameters)

WARP インストール時に設定可能なパラメータを `plist` ファイルで作成します。

- `organization` は、Settings > General から `ORG_NAME.cloudflareaccess.com` を確認できます
- `onboarding` のステップをスキップします。
- `switch_locked` と `auto_connect` を使って起動時に自動接続させます。
- `auth_client_id` と `auth_client_secret` を使って起動時に自動登録させます。

その後、バイナリフォーマットに変換し、所定のディレクトリに配置します。

```shell
export ORG_NAME='YOUR_ORG_NAME'
export CLIENT_ID='YOUR_CLIENT_ID'
export CLIENT_SECRET='YOUR_CLIENT_SECRET'
```

```shell
cat << EOS > com.cloudflare.warp.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>organization</key>
    <string>$ORG_NAME</string>
    <key>service_mode</key>
    <string>warp</string>
    <key>onboarding</key> 
    <false />
    <key>switch_locked</key> 
    <true />
    <key>auto_connect</key> 
    <integer>0</integer> 
    <key>auth_client_id</key>
    <string>$CLIENT_ID</string>
    <key>auth_client_secret</key>
    <string>$CLIENT_SECRET</string>
</dict>
</plist>
EOS

plutil -convert binary1 com.cloudflare.warp.plist
sudo chown root:wheel com.cloudflare.warp.plist
sudo mv com.cloudflare.warp.plist /Library/Managed\ Preferences
```

# WARP クライアントインストール

インストールします。

```
sudo installer -pkg ~/Downloads/Cloudflare_WARP.pkg -target /
```

先ほどの `plist` ファイルを読み取り、自動で登録・接続までが行われたことが確認できます。

![image-20211020122925602](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20211020122925602.png)

![image-20211020123347434](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20211020123347434.png)

![image-20211020123429691](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20211020123429691.png)

# [Cloudflare for Teams ダッシュボード](https://dash.teams.cloudflare.com/)で確認

User Email は `non_identity@ORG_NAME.cloudflareaccess.com` となるため、`Gateway ID` がユニーク値になります。

![image-20211020123614614](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20211020123614614.png)

ログでは以下のように表示されます。（`Device ID` = `Gateway ID`）

![image-20211020123923150](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20211020123923150.png)

# 参考：WARP アンインストール

> [Remove WARP · Cloudflare for Teams documentation](https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/remove-warp)

```shell
echo Y | /Applications/Cloudflare\ WARP.app/Contents/Resources/uninstall.sh
sudo rm /Library/Managed\ Preferences/com.cloudflare.warp.plist
```

```
Do you want to uninstall Cloudflare WARP app? Enter Y to proceed or N to exit. Y
Proceeding with uninstallation.
Stopping and unloading CloudflareWARP daemon.
Password:
Stopped and unloaded 'CloudflareWARP' daemon process.
Removed daemon plist file.
Stopping 'Cloudflare WARP' GUI process.
'Cloudflare WARP' GUI process running with pid: 1508.
Killed 'Cloudflare WARP' GUI process.
Removing 'Cloudflare WARP' app folder.
Forgot package 'com.cloudflare.1dot1dot1dot1.macos' on '/'.
Removing settings and log files folder.
Finished uninstallation!
```

# 参考：トラブルシューティング

以下のコマンドでログファイルを出力できます。

```shell
cd /Applications/Cloudflare\ WARP.app/Contents/Resources
warp-diag
```

```text
Debugging information stored in: ~/Desktop/warp-debugging-info.zip
```