整合 Jamf Pro 與 iOS 15 Account Driven 使用者註冊功能

Published by gleetsai on

蘋果在今年推出了 Account Driven 的使用者註冊(User Enrollment)功能。這個功能可以讓使用者的 Apple 裝置,如 iPhone、iPad 登入兩個 Apple ID,一個是個人的、一個是公司的。

個人的 Apple ID 很容易理解,直接到 https://appleid.apple.com 申請就可以了。但是公司的 Apple ID 並不是從上面的網址來產生,而是必須到公司的 Apple Business Manager 幫員工註冊與申請。

再更精準的說,不只是公司可以幫員工申請 Apple ID,學校也可以幫師生申請 Apple ID,只要來到學校的 Apple School Manager 就能完成。無論是公司或是學校所申請出來的 Apple ID,統稱為管理式 Apple ID(Managed Apple ID)。

當員工/師生使用管理式 Apple ID 登入 iPhone、iPad 時,會在設備上額外製作一個區域,專門存放公司或學校提供的資源,而這些資源可以透過 MDM 設定,禁止人員將上面的資源透過個人所下載的 App 傳到外面的世界去,以達成資料保護的功能。而當人員離開公司或學校時,因為這個 Apple ID 是由組織所製作的,所以組織有最大權限能直接註銷這個帳號,並且銷毀原本留在該裝置的公司資源。

另一方面,使用管理式 Apple ID 時,蘋果會提供給企業級管理式 Apple ID 基本 5GB 的 iCloud 空間;教育級管理式 Apple ID 則會有 200GB 的 iCloud 空間。

而在新的 iOS/iPadOS 15 起,使用者更可以從設定 > 一般 > VPN 與裝置管理登入企業或學校所派發的管理式 Apple ID,除了能拿到蘋果提供的 iCloud 空間外,也能自動取得公司資源,像是工作時所需要使用的 App 或電子書等等。

這種透過登入管理式 Apple ID 並且取得組織資源,且在離開組織後可自動銷毀裝置上的相關資源,同時兼顧使用者隱私,不賦予 IT 人員更多額外的管理權利,就稱為使用者註冊(User Enrollment)。而在上段內容所提到的,使用者可以從設定 > 一般登入管理式 Apple ID,並一系列取得相關資源的能力,就稱呼為 Account Driven User Enrollment。

不管是 User Enrollment 或是 Account Driven User Enrollment 都會需要以下工具才能完成:
– Apple Business Manager 或 Apple School Manager 帳號
– MDM 伺服器(以下使用 Jamf Pro 10.33 為例)

除此之外,如果想達成 Account Driven User Enrollment,還會另外需要有以下工具:
– 需註冊並持有網域控制權
– 需擁有該網域相對應的 SSL 憑證,且該憑證不得為自簽憑證
– 需架設一個 HTTPS 伺服器

以下為實現 Account Driven User Enrollment 的做法:

在網域註冊商加入 A Record

為了簡單起見,我在 Linode 上直接開了一個 Ubuntu 18.04 的伺服器,並且用 SSH 遠端連入。此時 Linode 會提供這個伺服器的 IP 出來,接下來就至網域服務註冊商登記一組 A Record 即可。

安裝 NGINX HTTP 伺服器

Nginx 是一種 HTTP 伺服器,輸入以下指令開始進行安裝:

apt update
apt upgrade
apt install nginx
systemctl enable nginx
systemctl start nginx
systemctl status nginx

輸入完最後一列指令後,應該會看到類似文字出現在畫面上,代表 NGINX 已開始服務

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabl
   Active: active (running) since Tue 2021-11-30 12:36:41 UTC; 24s ago
     Docs: man:nginx(8)
 Main PID: 19324 (nginx)
    Tasks: 2 (limit: 1105)
   CGroup: /system.slice/nginx.service
           ├─19324 nginx: master process /usr/sbin/nginx -g daemon on; master_proce
           └─19327 nginx: worker process

打開瀏覽器輸入已註冊的網址,應該會出現下圖,代表服務正常運作中。

加入 Apple Management 檔案

回到 Ubuntu 伺服器裡,移動至 /var/www/html 資料夾,先行建立一個 .well-known 資料夾,並在裡面建立一個新的 com.apple.remotemanagement 檔案。

mkdir .well-known
touch com.apple.remotemanagement 

編輯 Apple Management 檔案

利用 vi 文字編輯器,加入以下的文字到 com.apple.remotemanagement 裡。

{
	"Servers":[
		{
			"Version": "mdm-byod",
			"BaseURL": "https://Jamf Pro 網址/servicediscoveryenrollment/v1/userenroll"
		}
	]
}

使用 Certbot 在 Nginx 上安裝 Let’s Encrypt SSL 憑證

因為我沒有另外為網域購買 SSL 憑證,所以我使用 Let’s Encrypt 的免費憑證服務,搭配 Certbot 自動簽發與安裝在 NGINX 伺服器上。

snap install core; sudo snap refresh core

snap install --classic certbot

ln -s /snap/bin/certbot /usr/bin/certbot

certbot --nginx

跟著上面一行行走完後的最後一步,Certbot 就會把憑證安裝在 Nginx 上,此時就可以打開瀏覽器並輸入網址,看看網址前面是不是有鎖頭了。一定要確認有鎖頭,才代表服務正在使用安全連線的方式進行通訊。

修改 Header 為 application/json

蘋果要求這個 com.apple.remotemanagement 必須要帶上 application/json 的 MIME 格式,所以需要修改一下 Nginx 的設定檔。直接使用 vi 文字編輯 /etc/nginx/sites-available/default 文件,並且找到 server { # SSL Configuration… } 這段內容,在原本的大括弧裡面加上以下內容。

location /.well-known/ {
                default_type application/json;
}

這上面的意思是,將 /.well-known/ 資料夾下面的檔案帶上 application/json 的 MIME 格式。完整的設定檔大概長得像這個樣子:

server {

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
    server_name 你的網域; # managed by Certbot


        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        location /.well-known/ {
                default_type application/json;
        }

...略
}

接著輸入 systemctl restart nginx 重新啟動 nginx 伺服器。

驗證 Apple Management 文件正常服務

在 macOS 電腦上打開終端機,並且輸入以下指令:

curl -v https://你的網域/.well-known/com.apple.remotemanagement

畫面上應該要出現以下內容:

< HTTP/1.1 200 OK
< Server: nginx/1.14.0 (Ubuntu)
< Date: Tue, 30 Nov 2021 12:59:27 GMT
< Content-Type: application/json   #這邊超重要,一定要出現 application/json
< Content-Length: 108
< Last-Modified: Tue, 30 Nov 2021 12:59:22 GMT
< Connection: keep-alive
< ETag: "61a6202a-6c"
< Accept-Ranges: bytes
<
{
	"Servers":[
		{
			"Version": "mdm-byod",
			"BaseURL": "https://你的 Jamf Pro 網址/servicediscoveryenrollment/v1/userenroll"
		}
	]
}

啟動 Jamf Pro Account Driven User Enrollment 服務

前往 Settings > Global Management > User-Initiated Enrollment > Platforms > iOS > Account-Driven User Enrollment > 啟用 Enable for personally owned devices。

最終測試是否成功

取得管理式 Apple ID 後,打開 iOS / iPadOS 15 的設備,前往設定 > 一般 > VPN 與裝置管理 > 登入公司或學校帳號,試試看是否能正常運作。

你的下一步?

這個過程比較複雜,但是很適合公司裡面已有大量的 iPhone / iPad,絕大多數都是員工自己購買的,而且希望能用自己的設備工作,同時也能確保公司所提供的資源不會受到濫用,其實很值得準備一套 Jamf Pro ,並且開啟這項功能試一試。

Categories: JamfUbuntu