Jamf ProでMacを管理する際によく使う拡張属性を大集合させてみた
拡張属性(とスマートグループ)によってJamf Proは真の力を発揮する・・・
突然ですが、拡張属性、使ってますか?
テキストフィールドやスクリプトなどの入力タイプによって、追加のインベントリ情報を収集・管理することが可能となるJamf Proの特徴的な機能です。
「スクリプトによって追加のインベントリ情報を収集する」これ自体は他のMDM、例えばMicrosoft Intuneにも「カスタム属性」として実装されています。
ですが、両者を比較するといくつかの機能差が見えてきます。
その中でも決定打となるのが、「収集した情報をスマートグループの条件に指定」することができるかどうか、という点になります。
そんな拡張属性とスマートグループを活用することで例えば「会社ドメイン以外(=私用)のApple IDでサインインしているデバイス」「30日以上起動しっぱなしのデバイス」に対してアラートを通知したり、「JISキーボードレイアウトのデバイス」のみに特定のアプリケーションを配布したり、など様々な運用を実現することが可能になったりします。
今回は、そんな拡張属性でよく使われる(あるいはたまに使われる)サンプルを一気にまとめていきます。
基本的にはJamf Pro導入時に実施する「Jamf Pro Premium Onboarding Plus - macOS 2Day(旧名称:JumpStart)」内でご紹介しているものがほとんどですので、すでに実装済のお客様も多いかとは思います。
また、文量としてはかなり長くなりますので、目次の気になる項目からジャンプして確認してもらえればと思います!
目次
はじめに
各サンプルに入る前に、簡単に拡張属性についておさらいしておきたいと思います。
拡張属性は大きく2つのパターンに分類することができます。
ひとつはテキストフィールドやポップアップメニューによってJamf Pro上に追加の情報を持たせておくパターン、もうひとつはスクリプトによってデバイスから追加の情報を収集するパターンです。
※LDAPディレクトリと統合済の場合、LDAP属性情報をマッピングすることも可能ですが、今回は割愛させて頂きます。
前者は手動で記述、CSVでアップロード、APIを活用して代入、など任意のタイミングでJamf Pro上に定義することが可能です。
後者はインベントリのアップデート時にデフォルトの情報と併せて収集される形になります。
それぞれ活用方法は異なってきますので、順番に見ていきましょう。
よく使う拡張属性(テキストフィールド・ポップアップメニュー)
サンプル1:デバイス利用状況の管理
まずはテキストフィールド・ポップアップメニューを用いてデバイス利用状況の管理を行うためのサンプルです。
拡張属性は以下のような形で作成します。
その後、インベントリ詳細(「一般」カテゴリの一番下)を確認すると、作成した拡張属性が表示されています。
右上の「編集」ボタンをクリックすることで、先程POP-UP MENU CHOICESで定義した選択肢から選ぶことが可能です。(選択後は右上の「保存」ボタンをクリックしてください。)
これによって、「利用中」といういわばタグのような情報がデバイスのインベントリ上に付加された状態になりました。
この情報はもちろんスマートグループで活用することが可能です。
例えば以下のように、「利用中」だがチェックインやインベントリのアップデートが30日以上行われていないデバイスをピックアップするグループを作成し、該当する場合は個別に利用状況の確認、本当に利用されていないものであれば「在庫中」にステータスを変更する、などの運用を行うこともできたりします。
TIPS1:CSVを活用して一括アップロード
テキストフィールド・ポップアップメニューによる拡張属性は上述のようにJamf Proのコンソール上で手動で定義することも可能ですが、その他にもいくつか手法があります。
ひとつは、CSVによって情報を一括でアップロードする手法です。
設定 > グローバル > インベントリのプリロード > テンプレートからダウンロードしたCSVファイルに以下のような形で定義していきます。
A列、B列は必須項目です。A列にはデバイスのシリアル番号、B列にはMacなら「Computer」(iPhoneやiPadなら「Mobile Device」)と記述します。
C〜W列には必要に応じてユーザ情報や購入情報などを定義可能ですが今回は割愛します。
X列以降に今回の拡張属性を追加していきます。1行目に「EA 利用状況」というように、拡張属性の表示名の前に「EA 」(EAの後ろには半角スペース)をつけることによって定義可能です。
※ちなみに、日本語など2バイト以上の文字も利用可能です。
2行目以降に拡張属性の選択肢を定義していきます。テキストフィールドの場合は任意の情報を記述可能ですが、今回はポップアップメニューですので、事前にPOP-UP MENU CHOICESで定義した選択肢のいずれかを記述するようにしてください。
保存の際には「UTF-8形式のCSVファイル」になっていることを確認してください。
Macで作業している場合は問題ないことが多いかと思いますが、Windowsで作業しているとShift-JISになっていることがあるかと思いますのでご注意ください。
最後にCSVをアップロードします。以下のようにJamf Pro上で情報が確認できます。
ただし、CSVのアップロード後に一度インベントリのアップデートが発生しないと、デバイスのインベントリ側には情報が反映されないのでご注意ください。
TIPS2:APIを活用して代入
もうひとつはAPIを活用して情報を代入する手法です。Jamf ProのAPIに関しては、以前公開したBearer認証に関する記事でも触れさせて頂いているため詳細は割愛しますが、例えば以下のようなスクリプトによって定義することが可能です。
※Jamf ProのURL(4行目)、認証ヘッダ(5行目)、拡張属性のID(8行目)、拡張属性内に格納する情報の選択肢(11行目)をそれぞれ任意の値に変更してください。
例えば、このスクリプトを含むポリシーをSelf Serviceに公開しておくことにより、以下のようにデバイス側から拡張属性内に格納する情報を定義、更新することが可能となります。
※デバイス側で選んでもらう必要がない(=特定の情報で定義、更新できれば良い)場合は、スクリプトの9〜16行目をシンプルに「 eaValue="〇〇〇"」などの記述に置き換えてください。
今回のサンプルである利用状況調査の場合あまりそういった機会はないかもしれませんが、例えば部署や建物情報を追記する、などの場面では活用できるかもしれないので、参考情報として頭の片隅に留めておいて頂ければ幸いです。
サンプル2:期間の管理
次にテキストフィールドを用いて、開始日〜終了日などの期間を管理するサンプルです。
想定されるケースとしては、1日だけBluetoothを許可する、1週間だけ管理者権限を付与するなどでしょうか。
Jamf社のGitHubには、時限的に管理者権限を付与するMakeMeAnAdminなどの便利な仕組みも公開されていますが、今回の運用もJamf Proの標準機能を活用する一例としておさえておいて頂くと良いかもしれません。
※また、今回のケースに関するさらに発展的な事例としてまとめてくださっている以下の記事についてもぜひご参照頂くと良いかと思います。
Jamf Pro のグループに期限付きでユーザを入れたい - Qiita
拡張属性は以下のような形で作成します。
作成後は「YYYY-MM-DD hh:mm:ss」の形で、日付を定義することが可能です。UTC(日本時間で考えると9時間前)で記述する必要がありますのでご注意ください。
これをもとに以下のようなスマートグループを作成することで、グループに含まれている間は○○を許可する、といった上述の運用が可能となります。
ちなみに、スマートグループの再計算は即時反映されないため注意が必要です。
Jamf Proドキュメントに記載されているように一部のクライテリアはデバイスのチェックインに依存しており、今回のサンプルの場合も開始日(2023年3月1日 10:00 JST)から7日経過後、デバイス側でチェックインが発生することによって更新され、上記グループの対象から外れました。
※そのため、ユーザさんが意図的にオフライン状態を継続した場合はチェックインが発生せず、上記グループの対象に含まれ、許可した設定もそのまま...、なんてことが可能性としては起こりうる形になります。(そんなことをする人はいないと信じたいですが...。)
よく使う拡張属性(スクリプト)
サンプル3:サインインしているApple IDの確認
ここからはスクリプトを用いるパターンです。
まずは、要件として一番頻出する「現在MacにサインインしているApple IDの情報」を収集するための拡張属性です。
サンプルスクリプトは以下のような形になります。
こちらに関しては、すでに多くの方がブログ等で情報を発信してくださっています。
[Jamf]利用しているコンピュータの拡張属性についてまとめる | やるったら、やる!
Jamfを使ってiCloudに設定しているAppleIDを取得する
ポイントは、4行目のMobileMeAccounts.plistのパスを記述する方法です。
「~/Library/Preferences/MobileMeAccounts.plist」のように「~(チルダ)」でホームディレクトリを定義する場合、インベントリ更新のタイミングによっては情報が取得できず、拡張属性が空欄になってしまう可能性がありますので、事前にログインユーザ名を変数(userName)で取得しておくパターンがより安全かと思われます。
また、7行目以降は必ずしも必須ではありませんが、インベントリが取得できていないデバイス(空欄)と、Apple IDでサインインしていないデバイス(No logins)を区別できたほうが良いかと思い、サンプルで記述しています。
※必要ない場合はシンプルに「 echo "<result>$appleId</result>"」などの記述に置き換えてください!
この拡張属性をもとに以下のような条件のスマートグループを作成することで、冒頭で挙げた「会社ドメイン以外(=私用)のApple IDでサインインしているデバイス」をピックアップすることができるようになります。
サンプル4:キーボードレイアウトの確認
次にキーボードレイアウトの確認を行う拡張属性です。
JISキーボードの場合は「Japanese」、USキーボードの場合は「U.S.」といった情報が出力されます。
サンプル1の利用状況と併せて、社内Macのキーボード別在庫管理などに活用するのもアリかもしれません。
サンプル5:起動してからの経過日数の確認
サンプル5はMacを起動してから経過した日数を収集する拡張属性です。
※こちらの拡張属性はJamf Nation Communityの以下のディスカッションに投稿されているスクリプトを引用させて頂いております。
Solved: Re: EA for uptime check in days/minutes - Jamf Nation Community - 130221
「7(日)」といったシンプルな日数で表示されますのでデータタイプは必ず「Integer」を選択するようにしてください。
サンプル6:アプリケーションのバージョン情報の確認
サンプル6は特定のアプリケーションのバージョン情報を収集する拡張属性です。
デフォルトのインベントリ情報としてもアプリケーションのバージョン情報は収集可能ですが、この情報は文字列として扱われているため、スマートグループの条件に指定する際、「〜以上」や「〜未満」といった指定ができません。
パッチ管理レコードに含まれているアプリケーションであれば、そちらで代用可能ですが、一部のセキュリティソフトなど、残念ながらレコードに含まれていないアプリケーションも存在しますので参考としておさえておいて頂ければ幸いです。
今回のサンプルではCotEditorのバージョン情報を収集する内容になっています。
アプリケーションによってはこのサンプルどおりとならない可能性がありますが、基本的に/Applications/〇〇.app/Contents/Info.plist" CFBundleShortVersionString にバージョン情報が格納されていることが多いですので、まずは検証してみて頂ければと思います。
ちなみに、サンプル5同様データタイプは「Integer」を選択するようにしてください。
サンプル7:「プライバシー」パネルで許可されているアプリケーションの確認
サンプル7はシステム環境設定のセキュリティとプライバシー > プライバシーパネル内で許可されているアプリケーションの情報を収集する拡張属性です。
※macOS 13 Ventura以降ではシステム設定のプライバシーとセキュリティから確認可能です。
macOSには「User Consent」と呼ばれるプライバシー保護機能が搭載されており、アプリケーションが特定のフォルダや情報、またはサービスにアクセスする場合にユーザの許可が必要になっています。
構成プロファイルの「プライバシー環境設定ポリシー制御(=Privacy Preferences Policy Control / PPPC)」ペイロードを利用することで、MDMからUser Consentを制御することも可能ですが、以下のようなサンプルによってユーザ自身が現在許可しているアプリケーションの一覧情報を収集することが可能になります。
※"kTCCService〇〇〇〇"の部分を、プライバシー環境設定ポリシー制御ペイロードに記載されているApp or Serviceの名称をもとに、以下のように収集したい値に変更してください。
注意点として、この拡張属性を利用するためには、あらかじめターミナル.appにフルディスクアクセスを許可しておく必要があります。以下のような構成プロファイルを作成し、併せて展開をお願いします。
サンプル8:接続したことのあるネットワークの一覧を確認
サンプル8は接続したことのあるネットワークのSSIDを一覧で確認する拡張属性です。
利用頻度は限られているかもしれませんが、例えば疑わしき野良Wi-Fiに接続しているデバイスがいないか、あるいは会社のポリシーとして社内ネットワークのみに利用を制限しているにも関わらず、それ以外のネットワークに接続していないか、といったことを確認する際に活用できるかと思います。
サンプルスクリプトは以下のような形になります。
サンプル9:直近1ヶ月間に特定のアプリケーションを利用した時間を確認
サンプル9は直近1ヶ月間に特定のアプリケーションを利用した時間を確認する拡張属性です。
こちらも利用頻度は限られているかもしれませんが、例えばAdobe Creative CloudやZoom (ビジネスプラン)など有償ライセンスを割り当てているデバイスに対して、そのアプリケーションの利用時間を確認し、あまり利用されていないようであればライセンスの回収やプランの見直しを検討する、といった際に活用できるかと思います。
サンプルスクリプトは以下のような形になります。
※基本的な流れは以前公開したBearer認証に関する記事で紹介させて頂いているサンプルと同様です。
ちなみにこのスクリプトが参照しているのは、Jamf Proのインベントリ詳細 > 履歴タブ > アプリケーション使用ログ で収集されている時間となります。
こちらはアプリケーションが起動していた時間ではなく、アプリケーションがアクティブウインドウだった時間となりますので、思ったよりは少ない時間で集計されていることが多いかと思います。(例えば1日中Zoomミーティングをしていたとしても、途中でGoogle Chromeでブラウジングをしていた場合、その間はZoomの利用時間としてはカウントされません。)
あくまでも利用時間の参考値程度に捉えて頂ければ幸いです。
まとめ
いかがでしたでしょうか?
今回記載した各種サンプルはあくまでも現時点で動作を確認している内容になります。Apple、Jamf側の仕様変更に伴って都度改修が必要となる場合もございますので、必ずお手元の環境でテスト、検証の上ご利用頂けますと幸いです。
今回取り上げたサンプル以外にも、拡張属性やスマートグループを活用することでデバイスの運用で抱えている様々な問題が解決できることもあるかもしれません。
その他にもJamf Proには様々な機能が搭載されており、柔軟なデバイス管理を実現することが可能です。気になることやお困りごとがあれば色々とサポートさせて頂ければと思いますので、ぜひお気軽にお問い合わせください!
今後も、Apple デバイス管理、Jamf にまつわる情報をブログ 、YouTube を通じて発信していきますので、よろしければぜひご覧ください!
記事は2023年3月17日現在の内容です。
この記事に付けられたタグ
おすすめ記事を見る