CLOMO MDM を使って Cloudflare Zero Trust の Device UUID デバイスポスチャを iOS に実装する

# 目的

CLOMO MDM を使って、iOS の Cloudflare One Agent に UUID を使った Managed App Configuration の適用を実装します。

```mermaid:
graph LR

subgraph CLOMO [CLOMO MDM]
    MDMconf[MDM構成プロファイル設定]
    VPNconf[VPN構成プロファイル設定]
    Certconf[証明書プロファイル設定]
    Appconf[アプリ管理設定<br>プロファイル設定]
subgraph User [ユーザー情報]
    UUID[カスタムユーザー情報<br>UUID]
end
    Appconf ~~~ UUID --> |埋め込み|Appconf 
    UUID ~~~ Appconf
    デバイス情報 <--> |紐付け|User
end

subgraph iOS
    MDM[MDM構成プロファイル]
    VPN[VPN構成プロファイル]
    Cert[Cloudflare Zero Trust<br>Root CA 証明書]
subgraph Cloudflare One Agent
    App[Managed App Configuration]
end
end

MDMconf ---> |Install|MDM
VPNconf ---> |Install|VPN
Certconf ---> |Install|Cert
Appconf ---> |Install|App
デバイス情報 <-.-> iOS
```

# CLOMO MDM とは
https://www.i3-systems.com/

無料トライアルを利用させてもらいました。

> - 本番環境と同等の機能が10デバイスまでご利用いただけます。
> - トライアル環境がそのまま本番環境に移行できます。
> - トライアル期間中のお困りごとは、サポートスタッフが対応します。

# プロファイル設定
## Mobile Device Management for iOS 基本設定
MDM構成プロファイル設定を、以下の手順に沿って進めます。

https://support.clomo.com/?page_id=2211

- ベンダー署名付き CSR ファイルの作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/ccf6abb8-6389-4d43-2442-c8e6d659cd8f.png)

- Apple Push Certificates Portal で証明書を作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/f8d509f0-4f8e-6fcf-4a2b-6bdb300bc6f2.png)

- 証明書ファイルをアップロード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/f05bee73-6f21-32f5-c577-ca1ae564316b.png)

## 証明書プロファイルの設定
iOS では、手動で Cloudflare のルート証明書をインストールする必要があります。

https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/user-side-certificates/install-cert-with-warp/

> On mobile devices, you will need to install the certificate manually.

そのため、以下の手順に沿って証明書プロファイルの設定を進めます。

https://support.clomo.com/?page_id=48569

Cloudflare Zero Trust のルート証明書を下記リンクの手順に従ってダウンロードします。

https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/user-side-certificates/install-cloudflare-cert/#download-the-cloudflare-root-certificate

> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/3a0eebde-3908-b299-3c82-2d3d3810d294.png)


ダウンロードした証明書ファイルを利用して「証明書プロファイル設定」を追加して設定を完了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/6a68db74-16b3-ad0c-fb1f-f7d3fab7dba7.png)

## VPN 構成プロファイルの設定
VPN 構成プロファイルの設定を、以下の手順に沿って進めます。

https://support.clomo.com/?page_id=33453

- 識別子 = `com.cloudflare.cloudflareoneagent`
- VPN 識別子 = `com.cloudflare.cloudflareoneagent`
- サーバ = `cloudflare-dns.com`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/b816d654-8208-2f82-1001-4a474ce50b91.png)


## iOS Marketplace アプリの追加

以下の手順に沿って「Cloudflare One Agent」iOS Marketplace アプリの追加します。

その後、アプリ管理設定プロファイルの設定が可能です。

:::note info
以下の修正が反映された Cloudflare One Agent **Version 1.7** 以降の表示となることを確認してください。

- [Cloudflare One Agent on the App Store](https://apps.apple.com/us/app/cloudflare-one-agent/id6443476492)

> 1.7 (Nov 21, 2024)
> - Resolved an issue preventing users from connecting to the WARP tunnel after updating the app to version 1.5.
> - Fixed a crash while deserializing the data from the MDM file.
:::

https://support.clomo.com/?page_id=34438

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/0e67c163-dccf-aa55-f1c6-79376fd9a492.png)

## アプリ管理設定プロファイルの設定
以下の手順に沿って、アプリ管理設定プロファイルの設定をします。

アプリケーションは「Cloudflare One Agent」を指定します。

https://support.clomo.com/?page_id=33464

Cloudflare One Agent で設定可能なパラメータは下記リンクを参照ください。

https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/deployment/mdm-deployment/parameters/

例えば、以下のような値に設定します。

- `organization` = `YOUR_TEAM_NAME` （文字列 > 固定値）
- `auto_connect` = `0` （整数）
- `onboarding` = `false` （真偽値 > いいえ）
- `service_mode` = `warp` （文字列 > 固定値）
- `switch_locked` = `false` （真偽値 > いいえ）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/e53a7446-ef99-17df-d989-c4fb2383f6a3.png)

# デバイス設定
## iOS デバイスを CLOMO MDM 管理下に登録
以下の手順で、設定した MDM 構成プロファイルをインストールします。

https://support.clomo.com/?page_id=33782

## VPN、証明書プロファイルインストール
以下の手順で設定した VPN、証明書プロファイルをインストールします。

https://support.clomo.com/?page_id=1707

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/578b3b48-39a6-ec60-c56e-1fa38a1b35cf.png)

また、以下のように自動適用プロファイルに設定することもできます。

https://support.clomo.com/?page_id=2092

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/f8a3a3a7-0df9-0ba3-734c-e8fe9773c3f7.png)

## Cloudflare One Agent アプリをインストール
アプリケーションのインストールを通知する方式では、デバイス上でポップアップが表示されます。

デバイスユーザーがアプリケーションのインストールを許可すると、インストールがおこなわれます。

https://support.clomo.com/?p=19318

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/11da32b7-786c-8c21-ab18-abbfd7f4e4a2.png)

![IMG_1382.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/06125b95-6d9d-d3e5-05bd-d7220c2f6ee0.jpeg)

## アプリ管理設定プロファイルをインストール
Cloudflare One Agent アプリのインストール後に、アプリ管理設定プロファイルをインストールすることで、Cloudflare One Agent アプリの各種パラメータ設定が適用されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/8ff41fe7-50d1-1c9a-b5e0-556759713afb.png)

この時点で、組織の設定に紐づいた形で Cloudflare Zero Trust を使い始めることができます。

# Device UUID デバイスポスチャの実装
[`unique_client_id`](https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/deployment/mdm-deployment/parameters/#unique_client_id) パラメータに、デバイスごとに異なる UUID を埋め込む手順を確認します。

## カスタムユーザー情報設定

カスタムユーザー情報として、UUID を追加して保存します。

https://support.clomo.com/?page_id=31061#6

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/98eca4f9-631f-b8ec-a4fa-df6a03404939.png)

## UUID を生成
`uuidgen` コマンドや以下のオンラインツールを使って UUID を生成します。

https://www.uuidgenerator.net/

## ユーザー情報に生成した UUID を追加
以下のようにユーザー情報を編集できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/389cb675-ead8-efcf-d1f7-2e3fe7da3a17.png)

## デバイスとユーザー情報の関連付け
以下の手順に沿って、デバイスとユーザー情報の関連付けをおこないます。

https://support.clomo.com/?page_id=2083#1

> CLOMO 管理中のデバイスもしくは事前登録デバイスのみ、所有者を関連付けることができます。
それ以外のデバイスの「所有者情報」は変更できません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/bbec57be-ca30-4570-a815-2ad1bcc5c909.png)

## アプリ管理設定プロファイルにパラメータを追加して再適用
以下のパラメータ設定をアプリ管理設定プロファイルに追加して再適用します。

- `unique_client_id` = `UUID` （文字列 > 値）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/0c34caf1-a547-f9fe-294d-3a10478a4d35.png)

Cloudflare One Agent の iOS アプリでは、「設定 ＞ 詳細 ＞ デバイスポスチャ」からパラメータで埋め込まれた `unique_client_id` の値を確認できます。

## Cloudflare Zero Trust 設定
以下のドキュメントを参考に、デバイス ID リストに、生成した UUID をエントリとして追加します。

https://developers.cloudflare.com/cloudflare-one/identity/devices/warp-client-checks/device-uuid/

https://qiita.com/khayama/items/b972fbfb3f765ade954f

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/11fd697c-7e40-2a70-f353-78077dc4a733.png)


## デバイスポスチャログ
以下のように Device UUID デバイスポスチャチェックをパスしたログが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/17a94e2d-15cb-eb43-730b-30edd4f35522.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/bcf1427c-2a51-5d9e-1f84-85e791e1e8b5.png)

```json:device_posture_results.json
{
  "ClientVersion": "6.81",
  "DeviceID": "xxx",
  "DeviceManufacturer": "Apple",
  "DeviceModel": "iPhone12,8",
  "DeviceName": "iPhone",
  "DeviceSerialNumber": "xxx",
  "DeviceType": "ios",
  "Email": "user1@example.com",
  "OSVersion": "17.6.1",
  "PolicyID": "xxx",
  "PostureCheckName": "iOS UUID",
  "PostureCheckType": "unique_client_id",
  "PostureEvaluatedResult": true,
  "PostureExpectedJSON": {
    "id": "xxx",
    "accountID": "xxx"
  },
  "PostureReceivedJSON": {
    "value": "CA69F736-7D5B-406E-9397-ABE1EF1F0B52"
  },
  "Timestamp": "2024-12-02T12:05:31Z",
  "UserUID": "xxx"
}
```

# まとめ

今回は CLOMO MDM を使って、問題なく iOS 端末に設定を埋め込んだ形で Cloudflare One Agent を配布できることがわかりました。

`unique_client_id` を使った Device UUID デバイスポスチャも iOS で実装できました。

引き続き、こうした連携についての実績が増えたらいいなと思います。