rela1470のブログ

rela1470がブログです。

Macの初期化をJamfで"完全に"自動化した

Macの初期化をJamfで "完全に"*1*2*3 自動化しました! 勝利!

だれ

株式会社Kyash
Information Security Team
Corporate Engineering
のわたなべです。

これはなに

KyashのTech Team内で、夏のアドベントカレンダー的な感じでブログを集中的に書くぞキャンペーンをやっています!
今回はプロダクト側ではないチームから記事をお届けします!

blog.kyash.co

ということで

今回はJamf ProでMacの初期化を自動化した話を書きます。

他のネタも、冬のアドベントカレンダーまでには...書きますね...きっと...may be...

さてさて、Macの初期化に関しては色々とプロダクトがあり、今回も先人の知恵を組み合わせての対応になります。
感謝の心を忘れずにいきましょう🙏🙏🙏🙏

いままで

OffBoardingや交換の際に行うMacの初期化ですが、今まではCorporate Engineeringメンバー内で行っていました。

流れとしては

  • エンドユーザーには特に何もせずに返却してもらう
  • リカバリーモードのディスクユーティリティでディスクの消去
  • ⌥ ⌘ Rで最新のOSをネットワークインストール
  • Macが喋るのを聞いたらDone! *4

といった感じです。普通ですね。

弊社ではEFIパスワードやFileVault2をMDMで強制していることもあり、1台あたりの手間が結構かかります。
台数が少ないうちは良かったのですが、やはり組織規模が拡大するにあたって段々と手が追いつかなくなってきました。

f:id:rela1470:20210728181452p:plain
いっぱい並べて初期化してると達成感はあるんですけどね

自動化第一弾

そこで、返却後にCorporate Engineeringメンバーが対応するのではなく、エンドユーザーに返却前に対応してもらうように運用を変更しました。
これは運用負荷対策だけでなく、自分の目で情報を初期化されるところを確認できるという心理的負荷の改善の面もありますし、PCの返却は宅急便を利用していますので、輸送事故などの紛失時におけるリスクヘッジにもなります。

まずは自動化の第一段階として、有名な以下のコマンドをJamf Pro Self Serviceで誰でも実行できるようにしました。

sudo /usr/sbin/softwareupdate --full-installer-version 11.4 # bigsur バージョンは書き換えてください
sudo /Applications/Install\ macOS\ Catalina.app/Contents/Resources/startosinstall ‑‑eraseinstall --agreetolicense ‑‑newvolumename "Macintosh HD"

これでしばらくは運用が回っていたのですが、だんだんとトラブルが発生してきました。

f:id:rela1470:20210728182703p:plain
例えば、ディスク容量が足りない
f:id:rela1470:20210728180505p:plain
例えば、インストーラーのダウンロードに失敗する

そのため、これは初期化の前に、もう少し込み入った事前チェックが必要だろうという結論に至りました。

導入したツール

そこで今回導入したのが、macOSUpgradeというJamfのJoshua Roskosさんが開発しているツールです。
今回は初期化ツールとして使用していますが、ツールの名前の通り、OSのアップデート時にも使用できるツールです。

github.com

このツールはJamf Pro Self Service経由で呼び出されることを期待して作られており、Jamf ProでMacを管理している環境下ではベストマッチではないかと思います。

  • AC電源に接続されているかのチェック
  • OS イメージのダウンロード、SUMチェック
  • ディスクの空き容量のチェック
  • システム要件のチェック

などが主な機能です。

他にも同じようなツールとしてerase-installなどがあります。

kenchan0130.github.io

これで"完全に"自動化できたでしょうか?

Apple ID のチェック

わたなべ的にもう一つチェックすべきと考えている要素があります。それがApple IDの紐付けです。
そもそも論としてManaged Apple IDに移行するべき、という話はありますが、それはそれとして...*5

特にMacを探すを有効化されたまま返却されるのが一番厄介です。

f:id:rela1470:20210728173747p:plain
初期化したあともApple IDに紐付いている
PCを初期化したあともApple IDに紐付いており、あとからアクティベーションロックを掛けられる可能性があります。

このため、Macの返却前にApple IDの紐付けを本人に削除してもらうことが大切です。
今回紹介するスクリプトではApple IDに対してのチェックは行っていなかったので、スクリプトの先頭に自分で追加しました。

APPLE_ID=`sudo /usr/libexec/PlistBuddy -c "print" ~/Library/Preferences/MobileMeAccounts.plist | grep AccountID | wc -l`;


if [ $APPLE_ID = "1" ]; then
    sudo /Library/Application\ Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper -icon "$HOME/Library/Application Support/com.jamfsoftware.selfservice.mac/Documents/Images/brandingimage.png" -windowType utility -description "Apple ID がPCに設定されています。初期化前にサインアウトし、Macを探すをオフにしてください。サインアウト後、再度実行してください。" -button1 OK -defaultButton 1
  exit 1;
fi

MobileMeAccounts.plistの中身が設定内容なので、そのファイルの中にAccountIDが存在したらApple IDに紐付いていると判断し、ダイアログを出したあとにスクリプトを異常終了させます。
Macを探すだけをチェックすることも可能ですが、特にApple IDをサインインされたまま返却されるメリットはないと思ってるので、今回は全体のチェックとしました。
ダイアログはjamfHelperにSelfServiceのアイコンをくっつけてますが、ユーザーに伝われば何でもいいので、必要に応じて差し替えてください。そのままでも動くとは思います。

f:id:rela1470:20210728174256p:plain
Apple IDに紐付いている場合にダイアログを出す

ということで、これで"完全に"自動化できました!!!!!

Jamf Proに登録

さて、それではJamf Proに設定を行いましょう!
とはいっても、設定内容的にはマニュアル通り、といった感じです。

設定>コンピュータ管理>スクリプト
に以下スクリプトを登録します。

github.com

上の方にApple IDのチェックを追加します。

f:id:rela1470:20210730170914p:plain
こんなかんじ

Self Service用のポリシーを作成します。

f:id:rela1470:20210730171110p:plain
使ってるアイコンはいらすとやさんのリセットボタンです。

先程登録したスクリプトを指定します。

f:id:rela1470:20210730171227p:plain
引数いっぱい
引数が何個もあるので、準備をします。

スクリプト引数の準備

基本はスクリプトの中身を見ればわかりますし、必要に応じてスクリプト内で指定する方式に変更もできます。

パラメータ 4

パラメータ 5

パラメータ 6

  • OSインストーラーのダウンロードに使われるJamf トリガー名
  • 例)download-bigsur-20210720 後述します。

パラメータ 7

  • OSインストーラーのhash値
  • 例)a96c86cfb851fb89760b4b083eca8619 後述します。

パラメータ 8

  • アップグレードは0、初期化は1。今回は初期化ツールとして利用するので1。
  • 例)1

OSインストーラーのダウンロードトリガーを作る

さて、"完全な"自動化を目指しているので、OSインストーラーのダウンロードに関しても今回のツールで制御をすることにします。 READMEを見ると何個も方式がありますし、ただのトリガーなのでインストーラーさえ準備できれば中身は自由なのですが、今回はパラメーター7のhash値を同時に作れる方式を紹介します。

ヘルパーツールでdmgファイルを作り、それをJamfにパッケージ登録する方式です! github.com

まずは作業するPCにOSインストーラーをダウンロードします。

f:id:rela1470:20210730174538p:plain
App Storeとか
f:id:rela1470:20210730174609p:plain
ソフトウェア・アップデートとかで

ヘルパーツールにOSインストーラーの場所を引数として渡して実行します。

f:id:rela1470:20210730180339p:plain
実行すると、いい感じにパラメーター例とdmgを作成してくれます。

設定>コンピュータ管理>パッケージでアップロードします。

f:id:rela1470:20210730180556p:plain
基本デフォルトのままで

パッケージをダウンロードするポリシーをカスタムOngoingで作成します。

f:id:rela1470:20210730180704p:plain
トリガー名にセンスが要るんだよな
ここで作成したトリガー名をパラメータ 6に指定すればdoneです!

done!

ここまでくれば完成です!
Self Serviceからポチっとしちゃいましょう!

f:id:rela1470:20210730181032p:plain
どきどき

フルスクリーンで進捗が出ながら、いい感じで初期化されていくと思います。
いやー便利ですね!

f:id:rela1470:20210730181743p:plain
https://github.com/kc9wwh/macOSUpgrade
ちなみにフルスクリーンをやめたい場合もオプションで変更できるので、必要に応じて変更してください。

それでは!
良い初期化ライフを〜

*1:2021-08-06 わたなべ調べ

*2:完全とはわたなべの中での完全という意味で100%をカバーしているという責任は負いかねます

*3:でもちゃんと動いてるよ

*4:響き渡る"Mac OS には ボイスオーバーと呼ばれる"...

*5:現実問題大変ですし、弊社も道半ばです...