使用 Jamf API 自動停用鏡頭

在上一篇文章裡已經說明了實作理論,透過 Jamf Pro 的 API 讓人員在打卡或進入到特定地理位置時,自動關閉 iPhone 或 iPad 上的相機。當然,也適用於 macOS 上的相機就是了。

在上一篇文章裡已經說明了實作理論,透過 Jamf Pro 的 API 讓人員在打卡或進入到特定地理位置時,自動關閉 iPhone 或 iPad 上的相機。當然,也適用於 macOS 上的相機就是了。

這個系列有兩篇,主要是講如何滿足自動關閉相機的需求,主要會用 Jamf Pro API 及 Swift 語法完成相關內容。

這一篇會著墨在程式碼的實作部分,因為 Jamf Pro 有 Smart Group 功能的關係,只要符合條件,就會自動掉入到相對應的智慧群組,強制關閉相機的設定就會自動打到這個群組裡的所有設備裡。當設備不符合條件時,就會自動被移出這個智慧型群組,也就自動 關閉iPhone照相功能 。

因為 Jamf Pro 有提供 Restful API 可供串接的好處,上文的功能建議實作在伺服器上。或是像這篇文章一樣,假設員工是用 iPad 進行打卡上班(無論形式是輸入工號、人臉辨識或是感應員工卡等),我們也可以把這個功能實作在 iPad 上。

參考 上一篇文章,在 Jamf Pro 開立好延伸式屬性(Extension Attribute)後,我們可以利用 Jamf Pro 的 API 更新這項屬性就好。例如我在 Jamf Pro 上面開了一個延伸式屬性叫做 ShouldLockCamera ,接下來只要透過 Jamf Pro API 把這個屬性的內容從 false 改為 true 就能鎖相機。

從員工工號到找到設備

參考 Jamf Pro API 文件 ,可以找到跟使用者有關的 Jamf Pro API 為:

GET /users/name/{name}

不過需要先通過認證才能呼叫這個 API,Jamf Pro 接受 Basic Authentication 或 JWT 的方式呼叫。如果是 Basic Authentication 的話,要把帳號密碼組合成 的形式,並且將其使用 base64 雜湊過後使用。

假設帳號是 admin,密碼是 123456,就是要組合成 admin:123456 這樣的字串,並且用 base64 雜湊一下。在 macOS 裡面的終端機可以打以下指令,找到 base64 過後的值:

printf "admin:123456" | iconv -t ISO-8859-1 | base64 -i -

結合以上資訊,當要找到 glee 有哪些裝置在公司裡登記在案的話,就可以用這個 API 來找:

curl "https://你的 Jamf 網址/JSSResource/users/name/glee" \ -H 'Accept: application/json' \ -u '帳號:密碼'

因為是要寫在 iPad 上的打卡系統,所以用 Swift 寫的話,Request 大概會長這樣:

let urlString = "\(Jamf網址)/users/name/glee" let url = URL(string: urlString) var request = URLRequest(url: url!) request.httpMethod = "GET" request.addValue("application/json", forHTTPHeaderField: "Accept") request.addValue("Basic \(base64過後的帳密)", forHTTPHeaderField: "Authorization")

這個使用者的裝置可能會有多台,會在 mobile_devices 這個物件下被找到,底下是回傳的 JSON 型式,由此可知 Glee Tsai 有一台設備,在 Jamf Pro 裡面的管理 ID 是 2 號:

{ "user": { "id": 1, "name": "glee", "full_name": "Glee Tsai", "email": "", "email_address": "", "phone_number": "", "position": "", "managed_apple_id": "", "enable_custom_photo_url": false, "custom_photo_url": "", "ldap_server": { "id": -1, "name": "None" }, "extension_attributes": [], "sites": [], "links": { "computers": [], "peripherals": [], "mobile_devices": [ { "id": 2, "name": "Glee's iPad" } ], "vpp_assignments": [], "total_vpp_code_count": 0 }, "user_groups": { "size": 0 } } }

更新裝置上的延伸式屬性資訊

既然知道這個裝置的管理編號是 2 號了,接下來使用 Jamf 的更新資訊 API 來把 shouldLockCamera 這個屬性改成 true。

PUT /mobiledevices/id/{id}

因為 Jamf Pro Classic API 僅接受用 XML 更新資料,如果用 Swift 寫 Request 的話大概會長這樣:

let urlString = "\(apiEndpoint)/mobiledevices/id/\(裝置管理編號)" let url = URL(string: urlString) var request = URLRequest(url: url!) request.httpMethod = "PUT" request.addValue("application/json", forHTTPHeaderField: "Accept") request.addValue("Basic \(base64後的帳密)", forHTTPHeaderField: "Authorization") let bodyString = "<mobile_device><extension_attributes><extension_attribute><id>\(裝置管理編號)</id><name>延伸式屬性名稱</name><type>String</type> <multi_value>\(true或false二擇一)</multi_value><value>\(true或false二擇一)</value></extension_attribute></extension_attributes></mobile_device>" request.httpBody = bodyString.data(using: .utf8, allowLossyConversion: true)

更新裝置上的延伸式屬性資訊

最後一步,回到 Jamf Pro 上新增一個 Configuration Profile 的 Restrictions,把相機關閉選項打勾,並且 Scope 到 shouldLockCamera 為 true 的智慧型群組。這樣就完成了。

範例程式碼可由此下載

https://github.com/gds21/LockCameraUsingJamfPro


Originally published at https://gleetsai.me on September 11, 2020.

Read more

Apple 生態系的真實威脅—我們都可能是目標

Apple 生態系的真實威脅—我們都可能是目標

從一場分享開始的警醒 前陣子在 Jamf Nation Live Taipei 分享了 2024-2025 年 Apple 裝置威脅報告,深入探討了全球 Apple 生態系正面臨的資訊安全威脅。 許多人對 Apple 產品有一種根深蒂固的信心—拿著 Mac 或 iPhone,就像拿到了數位世界的「免死金牌」。說實話,Apple 在軟硬體整合上的安全設計確實領先業界,這不是誇大其詞。但也正因為這份信心,我開始想更深入地了解真實情況。 從 Jamf Security 360 報告開始,我觀察了全球情報機構(如 Citizen Lab、Google TAG、Kaspersky)揭露的真實案例。那時我才意識到一個有點殘酷的事實,也正好對應了同事最常對我說的那句話:Apple 設備並非堅不可摧,使用者自身往往才是最大的弱點。 為什麼 Apple 用戶成了高價值目標

By Glee Tsai

從 Jamf Pro 自定義註冊畫面帶使用者資訊至 Jamf Connect 失敗的處理方式

Jamf Pro 在設定裡面的 Enrollment Customization,本來可以設定在使用者完成設備註冊的當下,同步把 SAML 裡的資訊帶給後面的 Jamf Connect Login,這樣就可以減少一步使用者還需要登入的步驟。但在撰文的當下,Jamf Pro 11.1 仍在這個功能上有問題,在跟 Jamf Support Team 了解後,大概能用一種 Workaround 來解決,只是要特別留意以下事情: 1. 在 Jamf Pro 裡的 Enrollment Customization 不要再打勾 Enable Jamf Pro to pass user information to Jamf Connect 了(因為勾了也沒有用) 2. 確保

By Glee Tsai

在 Apple 零接觸部署下僅允許某個群組啟動設備

在 Jamf Pro 有整合 Single Sign On 的情況下,可以前往 Settings > Enrollment Customization 設定僅允許一個群組中的成員啟用設備。如果這個成員沒有在這個群組裡面的話,就不能夠開箱設備。如果以 Entra ID 為例,需要把 Object ID 填在下方的欄位即可。 對照到我在 Entra ID 上的群組設置: 至於如果不是 Entra ID,而是其它的 SSO Provider 的話,最好可以用 SAML Tracer 這一套 Google Chrome 外掛去看一下自己的 SAML 文件是如何表達群組的,例如下圖能看到這個使用者屬於以下五個群組。 接著有另外一個很重要的事情要提醒,如果你要阻擋註冊的成員,可以登入到 Jamf Pro

By Glee Tsai

在 Conditional Access 條件下設置 Jamf Connect Login 的 MFA 挑戰

Mac 世界的零接觸話題,每年都可以有新的話題出現。圍繞著使用者體驗,讓用戶在拿到電腦的那一刻,就能自動化配置所有公司要求的設定,不需 IT 人員幫忙。這不僅是節省 IT 人員的時間而已,更是讓整個出機流程變得更為流暢。 除了軟體與設定可以全自動化部署以外,使用者帳號當然也可以自助化的設定在電腦裡,而且完全按照公司的規範。所以如果公司正在使用 Entra ID 這樣的目錄服務時,當然也可以把 Entra ID 上面的帳密同步化成電腦本機電腦上的帳密,減少人員帳密疲疺的風險。然而,要求更高等級的公司,可能會要求人員在登入 Entra ID 時必須通過兩階段驗證,而這可能就為同步密碼帶來挑戰。 以 Jamf Connect 來說,這一套軟體可以在 Mac 設備開箱時自動就安裝在電腦上,並且出現一個可客製化的登入視窗給用戶登入 Entra ID。剖析這套軟體,事實上是由兩個 OIDC 授權類別完成的,一個是 Authorization Code Grant,

By Glee Tsai