Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

Jamf Connect の導入について(後編)

こんにちは。コーポレートシステム部の寺園です。
先日公開した 前編 に引き続き Jamf Connect についてご紹介させていただこうと思います。*1

今回は Jamf Connect の詳細な構築手順を...と思ったのですが、そこらへんは既に先達の優秀な記事がありますのでそれらをご参照いただくこととして、ここではもう一歩踏み込んで具体的に導入するにあたってポイントとなる構成要素や注意点などをご紹介させていただきます。

参考ブログ

私が環境構築をするうえで最も参考にさせていただいたのはJamf社の公式ブログで Sean Rabbitt 氏が書かれた記事です。こちらのブログは Jamf Connect の構成に必要なほぼ全ての要素が含まれていると言って過言ではない秀逸な記事ですので、まずはこちらを参考にすることをお薦めします。

www.jamf.com

本記事では上記ブログを参考にしつつも、実際に導入するにあたって調整が必要となったポイントをご紹介していきたいと思います。

カスタムパッケージ

構成要素で検討する必要があるのが自作のカスタムパッケージをインストールファイルに含めるかという点です。

Jamf Connect を利用するためには最低でも JamfConnect.pkg という公式パッケージのインストールが必須となります。ゼロタッチキッティングではADE(Automated Device Enrollment、旧DEP)を利用してパッケージをインストールするのが基本になりますが、この場合は署名のないパッケージはインストール出来ません。公式パッケージにはもちろん署名があるので、これをそのままインストールするのであればカスタムパッケージは不要です。

しかし、ブランディングのためのカスタマイズ用画像ファイルやスクリプト等を同時に配置したいとなった場合はカスタムパッケージの利用は不可避になります。そして後述するもう1点の課題から私はカスタムパッケージの利用は避けられないと考えています。

何故カスタムパッケージに言及しているのかというと、署名に利用する証明書の期限が1年であるという点です。カスタムパッケージを利用するということは、最低でも年次で証明書を更新する必要があり、同じくその証明書で署名したカスタムパッケージを更新(再作成)するという運用が発生することを意味しています。可能な限り余計な手動運用は避けたいのですがここに関してはカスタムパッケージを利用する場合はどうしても避けられない運用になります。

ログインウィンドウの表示タイミング問題

前編でも述べた通り Jamf Connect はデフォルトのログインウィンドウをインターセプトして Jamf Connect 独自のログイン画面を表示するツールです。この Jamf Connect ログイン画面は当然ながら Jamf Connect のパッケージがインストールされて初めて機能します。

ログインウィンドウは「設定アシスタント」の完了後に表示されるのですが、ここで関連してくるのが 回線速度 です。どういうことかと言うと、まずはこちらの図をご覧ください。

f:id:teddi:20210616111317p:plain

ADEによるパッケージインストールは設定アシスタントの実行中に実施されます。当然パッケージはインストール前にダウンロードしてくる必要があるのですが、このダウンロード時間には回線速度が影響します。回線速度が遅い環境だと Jamf Connect パッケージのダウンロード・インストールが完了するより先に設定アシスタントが完了してしまい、デフォルトのログインウィンドウが起動してきてしまいます。

こうなると Jamf Connect ログインウィンドウは表示されないため一度Macを再起動しなくてはなりません。再起動すれば良いだけと考える方もいらっしゃるかと思いますが、インストールが完了したかどうかは表示では判断がつかないためむやみに再起動するのは危険だと思われます。

postinstallerによる課題解決

この問題は紹介した参考ブログの中でも取り上げられており、そこでは JamfConnect.pkg を含めたカスタムパッケージを作成しそこにpostinstaller(パッケージインストール後に実行されるスクリプト)を含める手法が紹介されています。

このスクリプトでは設定アシスタントの完了状況をチェックし、先にデフォルトのログインウィンドウが表示されていた場合にログインウィンドウを再起動するという手法が取られています。この手法は大変優れており、検証したところ回線速度が遅い環境でもパッケージインストール完了後にログインウィンドウが切り替わることが確認出来ました。

しかし、この方法そのままでは Jamf Connect のパッケージがアップデートされる度にカスタムパッケージも再作成をする必要があるのであまり現実的ではありません。

そこでこの問題に対応したpostinstallerスクリプトを参考ブログを執筆されたのと同じ Sean Rabbitt 氏がGithub上に公開しています。

github.com

こちらは JamfConnect.pkg 自体はカスタムパッケージには含めず、postinstallerの中でパッケージをダウンロードしてインストールする方式が取られています。(パッケージ化する中身はカスタマイズ用のロゴ画像などを含めます)

こちらをそのまま採用したかったのですが、そのままでは常に最新バージョンの JamfConnect.pkg をインストールする仕様になっているため、バージョンアップによる不具合を考慮するとパッケージバージョンはコントロール出来るようにする必要がありました。そこで自社独自のクラウドストレージを作成してそちらにパッケージを配置することにして、以下のようにスクリプトを修正して利用することにしました。

# Download URL Prefix
URL_PREFIX="https://cloud_storage_for_upload_packages"

# Download vendor supplied DMG file into /tmp/
/usr/bin/curl $URL_PREFIX/$VendorDMG -o "$TMP_PATH"/"$VendorDMG" > /dev/null

カスタムパッケージが必要な理由

以上の説明でカスタムパッケージが必要である理由がご理解いただけたかと思います。

単純にブランディングのためのカスタマイズ用のロゴ画像だけでもカスタムパッケージは必要となるので、ここは諸々の課題を合わせて解決するためにもカスタムパッケージは必要なものと判断し、年1回のパッケージ更新も必要な運用と考えていただく方が良いと思われます。

Notify Screen

前編の記事で掲載した動画をご覧いただくと分かりますが、初回のログイン後にパッケージのインストール状況を表示する画面が表示されています。
これは Notify Screen(通知画面)という機能で Jamf Connect ログイン画面の後に独自のユーザ向けお知らせ画面を表示させることが出来る機能です。

f:id:teddi:20210610234242p:plain

PC初期セットアップでは色々とアプリのインストールや設定などが必要になりますが、出来れば完了するまでユーザには触って欲しくないですよね。
そんな場合に全画面にメッセージを表示して待機してもらうために利用します。

実はこちらは DEPNotify *2というJamf社の公開しているOSSの組み込み版です。機能的にはDEPNotifyの方が優れている(独自のインプット画面や完了後に確認ボタンを表示したり出来る)のですが、余計なパッケージインストールを出来る限り減らしたかったのと、DEPNotifyは起動までのタイムラグがあって一瞬デスクトップが表示されてしまうという点も気になったため公式パッケージ内の Notify Screen 機能を利用することにしました。

Notify Screen の起動方法

こちらも参考ブログをご覧いただくとほぼ全て解決するのですが、少し分かりづらい箇所があるので解説させていただきます。

Authchanger

公式ドキュメント では Notify Screen の起動には

/usr/local/bin/authchanger -reset -JamfConnect -Notify

というコマンドを指定することになっていますが、この他の方法として構成プロファイルで com.jamf.connect.authchanger に対してプロファイルをプッシュすることでも機能します。Scopeで対象範囲の調整が出来るのでこちらの指定方法の方がお勧めです。

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
    <key>Arguments</key>
    <array>
        <string>-reset</string>
        <string>-JamfConnect</string>
        <string>-Notify</string>
    </array>
</dict>
</plist>
RunScript

こちらは Notify Screen ではなく Jamf Connect Login の機能ですが Jamf Connect のログイン成功後に指定したスクリプトを実行することが可能です。先程のAuthchangerで起動した通知画面と合わせて使うことでバックグラウンドでインストールを実行しつつ動的に通知内容を変更することが可能になります。

参考ブログではエンドユーザライセンスの表示と合わせて使う紹介がされていますが、スクリプトのみの使用であれば以下の設定のみで大丈夫です。(com.jamf.connect.login に設定します)

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
    <key>ScriptPath</key>
    <string>/path/to/script.sh</string>
</dict>
</plist>

先程のAuthchangerとRunScriptの構成を合わせて構成プロファイルを作成し、初回のみ機能するようなScopeを設定すれば準備完了になります。

起動スクリプト

Prepare the onboarding script for Jamf Connect notify mechanism

参考ブログの上記見出し箇所の説明です。
サンプルでは NotifyMech.sh というスクリプト名になっています。こちらのスクリプトをカスタムパッケージに組み込んでデバイスにインストールされるようにします。そしてそのスクリプトを先程のRunScriptで呼び出すように指定します。

$JAMFBIN policy -event JamfConnectLoginInstalled

スクリプトの最後でJamfのポリシーをカスタムイベントで呼び出すように構成している上記のコマンドがポイントです。これによりインストール内容の変更が発生してもカスタムパッケージの再作成ではなくJamfポリシーの変更で対応出来るようになります。

Notify Screen用スクリプト(ポリシー)

Updating the notify mechanism for users

参考ブログの上記見出し箇所の説明です。
ここが Notify Screen の一番の見せ場ですね。ここは好みに応じてカスタマイズすることになります。スクリプトの設定次第で通知内容のアイコンやメッセージを変更出来るので、何をインストールしているかをユーザに表示したり進行状況のプログレスバーを進めたりすることが可能です。

そして作成したスクリプトをJamfに登録しポリシーとしてそのスクリプト実行を指定します。ポリシーはカスタムイベントで起動する構成として、先程の起動スクリプト最後で呼び出すようにしたカスタムイベントキーを指定します。

Jamf Connect 構成図

以上の構成をしていくことで Jamf Connect は最終的にこのような構成になります。

f:id:teddi:20210611014351p:plain

  • 設定アシスタント後にパッケージがインストールされて Jamf Connect ログイン画面が表示され、ユーザはIdPの認証情報でログインします
  • IdPアカウント情報でユーザアカウントが作成され、その後バックグラウンドでアプリケーションインストールなどの初期セットアップが実行されます
  • Notify Screen によりユーザはその進行状況を把握しつつ待機するうちにセットアップが完了することになります

これで Jamf Connect を利用したゼロタッチキッティング展開のための構成が完成です。(もちろん本番展開のためには他にも色々と準備が必要ですが...)

まとめ

今回は Jamf Connect を利用するうえで必要となる仕様の理解、運用課題、設定のポイントについて前後編に渡って記事にしてみました。

Jamf Connect はまだまだ不具合もあり発展途上なツールではありますが、頻繁にアップデートも行われているので今後のアップデートによってはこの記事で述べた課題への対応も期待できると考えています。

アカウント認証周りは AppleからはWWDC21で passkey が発表されたり、Oktaでは FastPass がリリース予定だったりとこれからより技術革新が進む分野だと思いますので Jamf Connect と合わせて注目していきたいと思います。

さて、今回はホットな Jamf Connect をテーマにしましたが、また機会があれば次は我々コーポレートシステム部のその他の取り組みについても記事にしたいと考えています。お楽しみに!

追記:Jamf Connect 2.4.0 及び Jamf Pro 10.30 について

この記事を書き上げた直後に製品アップデートが発表されました。

Jamf Connect 2.4.0 では Jamf Unlock という機能が実装され、Jamf Pro 10.30 では本記事でも取り上げた Jamf Connect パッケージのインストールがより簡易になるようです。残念ながらそこの検証までは至らなかったので、また機会があれば記事にしたいと思います。


buildersbox.corp-sansan.com

*1:本記事で紹介している Jamf Connect の機能はバージョン2.3.3を元にしています

*2:余談ですが Jamf Connect を用いずにゼロタッチキッティングを構成するのであればこのDEPNotifyを利用すると良いと思います

© Sansan, Inc.