Jamf Pro 上で選択できない PPPC 設定を Mac 端末に配信してみる
はじめに
おはこんばんちはなら!みなさんセキュリティしてますか?どうも NaGym_t です。私は SODA のセキュリティ担当として、弊社のプロダクトである SNKRDUNK や情シスとして社内の端末やネットワークのセキュリティを担当しています。今回は情シス的な業務の面でのやってみた系の記事です。
弊社では Mac 端末の管理に Jamf Pro (以下、Jamf) を採用しています。基本的な設定を Jamf で管理することにより、セキュリティ設定の平準化、設定変更を行う場合の一括配信を実現しています。
しかし、Mac の機能リリースも多いことから、すべての設定を Jamf で即日配布できる訳ではありません。その場合、どうにか配布する方法はあるのか?という興味のもと、今回はプライバシー設定ポリシー制御 (PPPC) の一部の設定を配布する方法を探っていきます。
免責事項
本記事は、おそらく推奨していないであろう配布方法を検証したものです。設定する場合は自己責任でお願いします。
また、本記事で例として紹介している BluetoothAlways の設定は、Jamf Pro 11.23.0 から標準機能として設定できるようになっています。日本では 2025/12/13(土) 8:00 (JST) から使用できる予定のため、BluetoothAlways を設定する場合はそちらをご利用ください。
通常の(選択可能な) PPPC の設定方法
通常、Jamf から PPPC の設定を配布する場合は以下の手順で行います。
- [コンピューター] > [構成プロファイル] > [+新規] から新規構成プロファイルを作成する
- [プライバシー環境設定ポリシーコントロールの構成] を構成し、任意の App またはサービスに対して設定を行う
例えば、セキュリティ上の理由から Google Chrome に対してカメラやマイクへのアクセスを禁止する場合は以下のように設定します。
| 設定項目 | 値 |
|---|---|
| 識別子 | com.google.Chrome |
| 識別子タイプ | Bundle ID |
| コード要件 | (identifier "com.google.Chrome" or identifier "com.google.Chrome.beta" or identifier "com.google.Chrome.dev" or identifier "com.google.Chrome.canary") and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists / and certificate leaf[field.1.2.840.113635.100.6.1.13] / exists */ and certificate leaf[subject.OU] = EQHXZ8M8AV |
| スタティックコード要件の検証 | チェック有り |
| APP またはサービス | Camera 拒否, Microphone 拒否 |

※ 識別子、コード要件は Google Chrome をインストールした後に、以下コマンドを実行することで確認できます。
$ codesign --display -r - /Applications/Google\ Chrome.app
Executable=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
designated => (identifier "com.google.Chrome" or identifier "com.google.Chrome.beta" or identifier "com.google.Chrome.dev" or identifier "com.google.Chrome.canary") and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = EQHXZ8M8AV
$
構成プロファイルの配布後、実際に meet でカメラとマイクが使用できるかを確認すると、使用できなくなっていることが分かります。Jamf 上で選択できる項目についてはこの方法で設定できます。

選択不可能な PPPC の設定方法
前述したとおり、通常 Jamf から設定できるのはプルダウンで選択可能な項目のみです。では、プルダウンに表示されない項目はどう設定していけば良いのでしょうか?今回は例として Bluetooth の使用許可を与える際に使用する BluetoothAlways の項目を例にして検証していきます。

全体の流れ
今回は以下の流れで実施します。
- Jamf にてテスト用の構成プロファイルを作成する
- 作成した構成プロファイルダウンロードする
- Jamf にてテスト用の構成プロファイルを削除する
- ダウンロードした構成プロファイルを手動で更新する
4-1. 構成プロファイルの署名の削除
4-2. 構成プロファイルの編集
4-3. 構成プロファイルへの再署名 - 更新した構成プロファイルをインポートする
1. Jamf にてテスト用の構成プロファイルを作成する
テスト用の構成プロファイルを作成します。この際、設定する内容は BluetoothAlways 以外の項目は実際に使用する設定と同じにすると後続の手順が楽になります。

2. 作成した構成プロファイルダウンロードする
作成した構成プロファイルをダウンロードします。

3. Jamf にてテスト用の構成プロファイルを削除する
ダウンロードが完了したらこの構成プロファイルは使用しない、かつ後続の手順の変更箇所を少なくするため削除します。

4. ダウンロードした構成プロファイルを手動で更新する
今回の肝です。
4-1. 構成プロファイルの署名の削除
ダウンロードした構成プロファイルの証明書を削除します。デフォルトでは Jamf の認証局(JSS Built-In Signing Certificate)で署名されています。しかし、署名されたままだと編集ができないため、署名を削除します。
### 署名の削除
$ openssl smime -inform DER -verify -in test.mobileconfig -noverify -out test-unsigned.mobileconfig
Verification successful
$
### フォーマットの変換
$ plutil -convert xml1 test-unsigned.mobileconfig
$
### 変換されたことを確認
$ grep "AddressBook" test-unsigned.mobileconfig
<key>AddressBook</key>
$
4-2. 構成プロファイルの編集
署名を削除した test-unsigned.mobileconfig を開くと構成プロファイルの内容が表示されます。その中に以下の記載があるため、key を AddressBook から BluetoothAlways に書き換えます。
<key>Services</key>
<dict>
<key>AddressBook</key>
<array>
<dict>
<key>Allowed</key>
<true/>
<key>CodeRequirement</key>
<string>(identifier "com.google.Chrome" or identifier "com.google.Chrome.beta" or identifier "com.google.Chrome.dev" or identifier "com.google.Chrome.canary") and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists / and certificate leaf[field.1.2.840.113635.100.6.1.13] / exists */ and certificate leaf[subject.OU] = EQHXZ8M8AV</string>
<key>Identifier</key>
<string>com.google.Chrome</string>
<key>IdentifierType</key>
<string>bundleID</string>
<key>StaticCode</key>
<false/>
</dict>
</array>
</dict>
4-3. 構成プロファイルへの再署名
前項で更新した構成プロファイルに署名します。
検証環境の場合は自己証明書でも問題ないかもしれませんが、本番環境に展開する場合は正式なものを使用しましょう。
5. 更新した構成プロファイルをインポートする
作成した構成プロファイルをアップロードして設定は完了です。

確認
Jamf 上で確認
BluetoothAlways が通常選択できない項目のため、Jamf の画面で見ても何も設定が表示されません。何の設定を配布したのかが確認できないのは運用していく面では大きなマイナスです。

Mac のシステム設定で確認
Mac 端末のシステム設定で確認しても設定が反映されているかどうかは確認できません。今回の設定に限らず、Jamf で配布したいくつかの項目は Mac 上で確認できないことがあるため今回もそれに該当しているのだと思います。

実動作で確認
通常、Google Chrome に Bluetooth の許可を与えていない場合、パスキーでログインしようとすると以下のように Bluetooth の使用許可を求める TCC プロンプトが表示されます。

一方、構成プロファイルの配布後は TCC プロンプトは表示されず、以下のようにパスキーでのログイン画面に遷移します。そのため構成プロファイルが正常に適用されていることが分かります。

さいごに
今回は通常 Jamf からは選択できない項目を設定する検証を行いました。Jamf にインポートした構成プロファイル自体が正常であれば、Jamf 上で設定が表示されなくても端末には問題なく配布することができ、設定自体も問題ないことが確認できました。そのため、Apple Configurator 2 などで作成した構成プロファイルの場合でも同様のことができるのではないかと考えています(未確認)
しかし、設定を行うことはできましたがおそらく推奨されている方法ではなく、かつ運用していくとなると Jamf から設定内容が見えないことはリスクになり得ます。Jamf の機能が追いついておらず、どうしても緊急で設定する必要がある場合の回避策の一つとしては使用できるかもしれませんが、今回の BluetoothAlways のように時間が経てば正式に実装されると思われるため通常はそちらを待つ方が良さそうです。
今回の件を通じて Jamf の動作を理解することができたのは大きな収穫でした。今後も他の機能の動作検証を行っていきたいと思います。
株式会社SODAの開発組織がお届けするZenn Publicationです。 是非Entrance Bookもご覧ください! → recruit.soda-inc.jp/engineer
Discussion