🍎

macOSのゼロタッチデプロイをJamfProとJamfConnectで実現してみた

2022/11/21に公開

自己紹介と目次

はじめまして!株式会社ココナラの情報システムグループのCorporateITチーム(CIT)に所属する石浦と申します。

この記事は主にmacOSのゼロタッチデプロイ(自動キッティング)を実現したい情シス or 総務 or エンジニア の方々に向けて執筆しました。記事の内容は以下になります。

  1. 導入の背景とメリット

  2. ユーザー体験

  3. 構成要素

  4. (この記事でできる限りの)具体的な構成手順と苦労したところ

  5. 今後の展望

  6. 最後に

導入の背景とそのメリット

背景

現在ココナラは組織が拡大するフェーズにあります。それに伴い嬉しいことに、入社者数は毎月平均5名も!と同時に、PCのキッティング作業も一定以上の工数が必要であり、下記のような課題がありました。

  • キッティング作業はある程度自動化されていたものの、手作業の部分も多く残っていた

  • MacCPUがIntel→Appleシリコンへ切り替わった際や、OSアップデートによって、上記の自動化されている仕組みが動かなくなることがあり、それらをメンテナンスする作業に工数が多く必要だった

    • 一部のキッティング用スクリプトがpythonで記述されており、それらが動作不全を起こす(macOSでサポートされるpythonのverは、OSアップデートで変わるため)

    • kextがmacOSで推奨されなくなったことにより、一部の構成プロファイルが動かなくなる→ポリシーで自動インストールされるよう設定しているアプリケーションが動作しない

  • ココナラの業務用PCは約9割がmacOS

以上の背景から、少ないメンテナンスで恒久的に動作するMacのキッティング自動化の仕組みを作ることは大きい効果を上げる施策と言えます。また右肩上がりで増加する社員数に対応するために、ゼロタッチデプロイのリリースは急務でした。

メリット

ゼロタッチデプロイのリリースにより、上記の課題を解決し、以下のメリットを得ることができました。

  • macキッティングに必要な工数が激減しました

    • キッティング工数 = 3h/台 として、毎月の入社者がおよそ5名とする

      • 3h x 5名 x 12ヶ月 = 180h/年の工数が浮きます

    なので、これらの工数を別の施策に充てることができます。つまり、機械に任せれば良いことは任せ、人は頭を使う業務に工数を投下することができます。

  • リモートワークへのハードルがさらに下がりました

    現在ココナラはリモートと出社を組み合わせたハイブリッド制度を取り入れています。しかし、今後社会情勢の変化など、フルリモートへの対応が必要になるかもしれません。その場合でも、macをベンダーから直接メンバーの自宅に届け、そこで起動した瞬間からキッティングが始まるため、出社を強制しない対応が可能です。

また、jamfConnectを導入することにより、macOSのログイン認証に、組織で使用しているIdPの認証方式を流用することができます。

つまり、IdPログインに多要素認証を導入していれば、ゼロトラストライクかつセキュアな環境を構築できます。

さらに、DEPNotifyを利用することにより、JamfPro単体では実現が難しい、明確に指定した順序でポリシーを起動させる処理が可能になります。

ユーザー体験

読んでいただいているあなたが仮にココナラに入社していただいたと想定して、貸与されたmacを開くとどのような挙動を見せるかご紹介します。

  1. macを起動し、NWに接続するとJamfサーバーとmacが同期され、リモートマネジメントが起動します。これにより、JamfProで設定している各種構成要素がmacにダウンロードされます。
    remote

2- 次にIdPのログイン画面が表示されます。GWSに作成したユーザーアカウントがそのまま使用できます!

JCLogin

  1. ログインが完了すると、GWSに登録されているユーザーアカウントの情報をもとに、macOSローカルアカウントが作成されます。
    JCMakeAccount

  2. 一通りの初期セットアップが終了し、作成されたローカルアカウントにログインすると、以下の画面が表示されます。
    画面下部のシークバーで、アプリケーションのインストールが進行している様子が表示されています。この間ユーザーはmacを操作することができないため、セットアップが予期せぬエラーを起こす可能性が低くなります。

image1

セットアップが完了すると、ボタンが表示されます。このボタンをクリックするとmacが操作できるようになります。以上でキッティング終了です!

構成要素⚙

ゼロタッチデプロイを構成するSaasサービスやツールを紹介します

全体図

システム全体はこのようなつながりになっています。

allOverFlow

サービス

internet

構成する主なSaasサービスは以下になります。

IdP

  • Google Cloud Identity

    • 弊社はGWSのBusinessPlusプランを利用しており、プラン内に上記が含まれていたため、スムーズに構築できました。

AppleBusinessManager

  • 法人でApple製品を利用されているのであれば、すでに導入されているかと思います。ABM登録に対応しているベンダーからApple製品を購入すると、ABMにそのデバイスを登録してくれます。そうすることで初めて、企業が所有するデバイスとして管理することができるようになり、また下記MDMで制御ができるようになります。
  • 詳しくはこちら

JamfPro

  • 製品サイト

    • MDM(Moblie Device Management)と呼ばれる、組織で使用しているITデバイスを一元管理するツールです。またJamfProに登録されているmacOSへアプリケーションや設定を配布することができます。

JamfConnect

  • 製品サイト

    • 上記JamfProからクライアントmacへ配信することにより、以下の機能を実現できます。

      • 指定したIdPに登録されているアカウントが持つIDPWと同じ情報でMacにローカルアカウントを作成する

      • 定期的に(デフォルトは60分おき)IdPのPWとMacローカルアカウントのPWの一致を確認し、異なる場合はローカルアカウントのPW変更を促す

ツール

local

ローカルで操作が必要な各種ツールです。

DEPNotify

  • bash(DEPNotify.sh)で指定したポリシーを順番通り実行できるツールです。

    • カスタムトリガーという、上記Shellのみで利用できるトリガーによって、ポリシー順番通り起動できるよう制御できます。

    • 上記カスタムトリガーで設定したポリシーがインストールされている間、ユーザーへその進行状況を示すシークバーがウィンドウに表示されます。

    • OSSなので、JamfConnectを購入していなくてもJamfProが導入されていれば使用できます。

JamfConnectConfigration

  • JamfConnectの設定を編集するためのツールです。

    • JamfConnectはXML形式で記述したスクリプトで挙動を制御する必要があります。このツールはそのスクリプトをGUIで設定できるようにしてくれるものです。

    • JamfConnectを購入するとついてきます。

Composer

  • JamfProユーザー向けのpkgビルドツールです。ここでは、DEPNotifyのインストール進捗を示すウィンドウに、何かしら画像(ここではココナラロゴ)を表示させたいときに使用します。ユーザーガイドはこちら

  • クライアントmacにロゴイメージを格納したpkgを配布し、その配布先ディレクトリをDEPNotifyで指定することで表示させる仕組みになっています。

  • JamfNationから、JamfProのパッケージをインストールするとその中に入っています。

開発手法

agile

番外編的な紹介になりますが、このプロジェクトには、ココナラ情シスの提供価値最大化を目指してスクラムを導入しました。

結果として、プロジェクト進捗の可視化とリリースするプロダクトの価値を最大化するために大きな効果があったため、これからも続けていきたいと思っています。

参考にした書籍は以下です。私のようなアジャイル初心者にもとてもわかりやすい内容でしたので、気になる方はぜひ手に取ってみてください。

構築手順と苦労したところ

JamfConnectを用いたゼロタッチデプロイの構築方法については、JamfConnectを購入すると受講することができる、ベンダーさんのオンボーディングでほぼ設定できますし、またそれをなんらかの理由で受講することができなかった方だとしても、Jamf公式ドキュメントに詳しく記載がありますので、それらを参照いただければ設定は行えるはずです。

ですが、私と同じ境遇の「ここドキュメント通りに設定しているはずのなのに、なんで動かないんだ……」という方もきっといらっしゃると思います。

ですので、公式ドキュメントを参照すればわかる部分は、概要を記載するにとどめますが、実際に私が構築を行なっていて苦労したところについてはその手順をできるだけ詳細に記載し、皆さんの一助になれればと思います。

IdPとJamfConnectの連携設定を行う

Jamf公式ドキュメントがかなり詳しく設定手順を記載してくれているので、この通りに進めれば問題なく設定できます。ポイントとしては、ここでクライアント ID とクライアントシークレットの情報が入手できるので、忘れずに保存しておくことです。下記のJamfConnectConfigrationの設定を行う際に使用します。

JamfConnectConfigrationの設定を行う

JamfConnectConfigrationを操作して、JamrProにアップロードするための、xml形式の設定値を作成します。このツールを操作して、Login Connect2つの設定値を作成し、それぞれを構成プロファイルにアップロードすることで、JamfConnectの設定を変更できます。

基本的にはJamf Connect 設定参照 - Jamf Connect ドキュメント | Jamfを参考いただければ問題なく設定できるかと思いますが、ツールのローカライズ上、日本語の意味を取りづらいと感じた部分を解説します。

loginタブの設定

  • ユーザー作成役割を無視

    • IdPのロールをローカルに適用する設定です。macローカルの管理者や通常ユーザーのことではないので注意。GoogleIdentityでは使用できない機能なので、弊社ではfalseにしています。

loginタブ

  • FIleVault   FileVaultリカバリキーを保存してください

    • ここにチェックをいれても、JamfProに保存されるわけではなく、ローカルに保存されます。MDMコンソール上でリカバリキーを管理したい場合は別途JamfProで設定が必要です。

JCCFV

connectタブの設定

  • password における数値設定

    • この数字を見る限り、15分おきにローカルとIdPの情報が同期されるように見えますが、実は60分おきがデフォルトの設定になっており、ここは数値を変えない限りその間隔で同期が行われています。変更したい場合は入力が必要です。

JCCPW

Composerの設定を行う

ここでは私が少し苦戦した、ロゴ画像を置くディレクトリの設定について解説します。今回は展開先のmacローカルにロゴ画像を配置するのが目的です。

1.まず作業しているmac上で、展開したいディレクトリにロゴ画像を置きます。そのファイルをcomposer上にドラッグ&ドロップすると、SOURCES欄に作成されます。

COmp1

2.展開したいファイルに、展開先のmacで読み取れるように権限を付与しておきます。ファイルを選択して、チェックを画像のようにつけます。

Comp2

3.最後に、右上のBuild as PKGをクリックすると、pkgとしてビルドしてくれます。保存先を選択して、出来上がったpkgを後ほどJamfProにアップロードしましょう。

image3

DEPNotifyの設定を行う

こちら からDEPNotify.pkgDEPNotify.shを入手し、DEPNotify.shを編集します。

DEPNotifyを利用する最大の理由はカスタムトリガーという、JamfPro単体では使用できない、ポリシーを起動させるトリガーを使えるようになることです。カスタムトリガーとして記載した文字列がDEPNotify.shで呼び出された順番にポリシーが起動します。

DEPNotify

以下、DEPNotify.shで編集した箇所を記載します。

  • 42行目 falseにすると実行される。trueにするとテストモードで実行されます(みかけだけの挙動になり、実際の設定は走らない)

    TESTING_MODE=false # Set variable to true or false

  • 53行目 depnotifyicon.pkgによってクライアントMacに展開したロゴ画像のディレクトリアドレスを指定する BANNER_IMAGE_PATH="/usr/local/depnotify/coconala_symbol_rgb_color.png"

  • 55行目 変数に文字列を代入する。

    ORG_NAME="ココナラ"

  • 60行目 インストール中のUIに表示されるタイトル

    BANNER_TITLE="ようこそ $ORG_NAME へ!"

  • 68行目 インストール中のUIにおいて、作業進行中に表示されるメッセージMAIN_TEXT=' ただいまあなたのMacをセットアップしています。10~20分ほどお待ちください。

  • 74行目 インストール完了時に表示されるメッセージ

    INSTALL_COMPLETE_TEXT="設定が完了しました!"

  • 94行目 インストール完了時押すことができるボタンに表示されるメッセージCOMPLETE_BUTTON_TEXT="ここを押して始めてください!"

  • 154行目〜 起動したい順番に上からARRAY配列で

    ”表示させたい文字列,カスタムトリガー名”と記載 *下記は実際に使用しているものではなく一例です。

    下記の記載ですと、RosettaChromeSlackZoomの順にインストールが走ります。

POLICY_ARRAY=(
"Installing Rosetta02,Rosetta"
"Installing Chrome,chorme"
"Installing Slack,Slack"
"Installing Zoom,Zoom" )

JamfProの設定

あとは、今まで設定してきたスクリプトやpkgをJamdProにアップロードし、実行させたいmacをscopeに設定すればOKです。

設定するポリシー

以下の設定でセットします。

ポリシーで行うこと トリガー Packages scripts Priority
JamfConnect.pkgをインストールするポリシー Custom 任意の文字列 JamfConnect.pkg - -
JamfConnectLaunchAgentをインストールするポリシー Custom 任意の文字列 JamfConnectLaunchAgent.pkg - -
DEPNotifyのインストールと起動 Enrollment Complete DEPNotify.pkg Rosetta2をインストールするスクリプト before
depnotifyicon.pkg DEPNotify.sh after

上記表について補足を少しだけ

  • DEPNotifyのトリガーについて

    • Enrollment Complete→JamfConnectがローカルアカウント作成を終え、ログインした後起動する設定です

    • scripts

      • Rosetta2をインストールするスクリプトをセットします

      • priority : before

        →priorityをbeforeにすることで、まずRosseta2がインストールされます。Appleシリコンを搭載したmacの場合必要な設定です。

      • DEPNotify.sh

      • priority : after

        →ここはafterにすることで、ポリシーで展開されるRosseta2が必要なアプリが問題なくインストールされるようになります。

設定する構成プロファイル

以下のようにセットします。

行う設定 Certificate Application & Custom Settings
GoogleCloudとLDAP通信するための設定 GoogleCloudとLDAP通信するための証明書(p.12ファイル)をセットします -
JamfConnectConfigrationのconnectで作成したplistを設定 - JamfConnectConfigrationで設定したXML形式のplistをセットします
JamfConnectConfigrationのloginで作成したplistを設定 - JamfConnectConfigrationで設定したXML形式のplistをセットします

PrestageEnrollmentの設定

これまで設定してきたポリシーや構成プロファイルの一部をここにセットします。JamfProにmacがエンロールした直後の初回起動時に、JamfConnectがインストールされ、起動するようになります。

PrestageEnrollmentに設定した設定した構成プロファイルは、MDMに登録された直後の初回起動時にのみ適用され、次回起動時以降は適用されません。つまり、ここにセットした構成プロファイルは、別途適応したいmacをscopeに含めることを忘れないようにしなければなりません。

下記の設定をセットします。

  • 構成プロファイル

    • GoogleCloudとLDAP通信するための設定

    • JamfConnectConfigrationのconnectで作成したplistを設定

    • JamfConnectConfigrationのloginで作成したplistを設定

  • Enrollment Packages

    • JamfConnect.pkg

    • JamfConnectLaunchAgent.pkg

以上で設定は終了です。お疲れ様でした!

今後の展望

ゼロタッチデプロイを実現できたことで、ハード面のユーザー対応においては相当の工数を削減することができました。

次は、ユーザーアカウントのオートプロビジョニングを進めることで、ハードソフト両方の工数を削減し、今後よりスケールしていく組織に対応したいと考えています。その取り組みの一部として、ジョーシスというITデバイスとSaasを総合管理できるクラウドサービスを導入しています。これにより、ジョーシスに連携できるSaasであればワンクリックでまとめてユーザーアカウントを発行する仕組みを構築しています。

弊社でのジョーシス活用事例は、ジョーシスさんのコーポレートサイトに掲載いただいています。

今後は可能な限りユーザーアカウントをオートプロビジョニング化していき、工数とヒューマンエラーがなくなる世界を作りたいと考えています。

イメージとしては下図のようになるのが理想ですね。

AsIs

AsIs

ToBe

ToBe

最後に

JamfProおよびJamfConnectの設定構築において、ベンダーであるTooさんには大変お世話になりました。とてもわかりやすいオンボーディングや、導入した後もホスピタリティ溢れるサポートをしてくださり、そのおかげで無事ゼロタッチデプロイをリリースすることができました。この場を借りて改めてお礼を申し上げます。

上記の導入および活用についてのインタビューを、Tooさんのコーポレートサイトで公開いただきました!Jamf製品をココナラに取り入れた背景や目指すビジョンについて掘り下げていただいていますので、ぜひ併せてご確認いただけますと幸いです。

さて、ココナラでは一緒に事業のグロースを推進していただける様々な領域のエンジニアを募集しています。

もう少し話を聞いてみたいと思っていただけましたら、以下のカジュアル面談応募フォームからご連絡をいただけますと幸いです!

エンジニア | カジュアル面談 / 株式会社ココナラ

情報システム領域だけでなく、フロントエンド領域・バックエンド領域などでも積極的にエンジニア採用を行っておりますので、よろしければぜひ、エンジニア採用ページもご覧ください。

Discussion