IdPを介してMacにログインできるツールとしては、Jamf社が開発しているJamf Connectが有名です。 しかし、Jamf Connectは有償であり、追加でJamf Connect用のJumpStartの費用がかかり、最小スロットが25ライセンスからであるため、導入のハードルが高い場合があります。

今回は、IdPを介してMacにログインできるXCredsを検証してみました。

XCredsとは

XCredsとはTwocanoes Software社がオープンソースソフトウェア(OSS)として開発している、IdPを介してMacにログインできるツールです。 XCredsは、

  • XCreds Login
  • XCredsアプリケーション

の2つのコンポーネントで構成されています。

執筆現在、

  • Azure Active Directory
  • Google Workspace
  • Okta

および、任意のOIDCをサポートするIdPで使用可能です。

また、IdP側の認証が、

  • パスワード認証
  • パスワード認証および多要素認証

である場合のみサポートしています。セキュリティキーなどのパスワードレス認証はサポートしていません。

XCreds Login

XCreds Loginは既存のmacOSのログインウィンドウを、IdPのWebViewを介した認証画面に切り替える、セキュリティエージェントです。

認証が完了すると、OIDCのレスポンスから取得できる、

  • アクセストークン
  • IDトークン
  • リフレッシュトークン

および、IdPの認証に使用したパスワードをそれぞれKeychainに保存します。 XCredsでは、これらを合わせてXCredsトークンと呼びます。

また、macOSのローカルパスワードとIdPのパスワードが異なっていた場合は、MacのローカルパスワードをIdPのパスワードに変更します。

XCredsアプリケーション

XCredsアプリケーションは、IdPのパスワードとローカルパスワードを同期するためのアプリケーションです。

アプリケーションは、Keychainに保存されているアクセストークンの有効期限を確認します。 アクセストークンの有効期限が切れていた場合は、リフレッシュトークンを使用して、新たなアクセストークンを取得します。

もしIdP側でパスワードの変更などにより、トークンが無効になっていた場合は、WebViewを介しがIdPの認証画面が表示されます。

認証に成功すると、XCreds Loginと同様にXCredsトークン、つまり、

  • IdPのパスワード
  • アクセストークン
  • IDトークン
  • リフレッシュトークン

がKeychainに保存されます。

また、macOSのローカルパスワードとIdPのパスワードが異なっていた場合は、MacのローカルパスワードをIdPのパスワードに変更します。

XCredsアプリケーションはユーザーがログインウィンドウにログインした際に起動するように設定することが推奨されています。

代替ツールとの比較

XCredsとJamf Connectは、IdPを介してMacにログインする機能のみにフォーカスすると、ほぼ同じと言ってしまってよいと思います。

その中で、特に選択において参考になる部分を比較してみました。

項目 XCreds Jamf Connect
OSバージョン 11.0 以降1 10.15.4 以降
IDプロバイダ Azure Active Directory
Okta
Google ID
OneLogin
任意のOIDCプロバイダ
Azure Active Directory
Google ID
IBM Security Verify
OneLogin
PingFederate
任意のOIDCプロバイダ
費用 無償(OSS)
オプションでサポートが$999/年または$4999/年
$24/年
別途JumpStart(研修)代
25ライセンスから
sudoコマンド - Pluggable Authentication Moduleの提供
パスワード以外の手段 - Jamf UnlockのiOSアプリケーション

ゼロタッチデプロイにXCredsを統合

ここで言うゼロタッチデプロイは、組織の管理者などがキッティングを行わずにデバイスをエンドユーザーに直接渡したとして、最低限のアカウント設定などのデバイスの設定が自動で行われることを想定しています。

また、ディスク暗号化も有効にすることを想定しています。

検証環境

  • Mac
    • MacBook Air (13-inch, 2018)
    • macOS Monterey 12.5.1
    • Apple Business ManagerにAutomated Device Enrollmentデバイスとして設定済み
  • XCreds
  • IdP
    • Azure Active Directory
  • MDM
    • Jamf Pro 10.40.1

Azure Active Directoryの設定

Microsoft Azure Portalにアクセスして設定します。

XCredsとAzure ADの統合

  1. [Azure サービス] > [アプリの登録] > [新規登録] をクリックします。

    Azure Portalのアプリの登録一覧

  2. リダイレクトURIと任意のアプリケーション名を設定し、[登録]をクリックします。
    • 名前: XCreds
      • 名前は任意の文字列で可
    • サポートされているアカウントの種類: この組織ディレクトリのみに含まれるアカウント(xxxxxのディレクトリのみ - シングルテナント)
      • ユースケースに合わせて設定
    • リダイレクトURI: xcreds://auth/
      • パブリッククライアント/ネイティブ(モバイルとデスクトップ)として登録

    Azure Portalのアプリの登録の新規登録

  3. [概要]から以下の値を取得しておきます。
    • アプリケーション(クライアント)ID
    • ディレクトリ(テナント)ID

    XCredsアプリの概要

  4. [証明書とシークレット] > [新しいクライアントシークレット] から[説明]と[有効期限]を設定し、[追加]をクリックします。

    XCredsアプリの証明書とシークレットのクライアントシークレット発行

  5. 発行したシークレットの[値]を取得しておきます。
    • パブリッククライアント/ネイティブ(モバイルとデスクトップ)として登録しているため、この値は秘匿情報として扱う必要はない

    XCredsアプリの証明書とシークレットのクライアントシークレット発行

  6. [APIのアクセス許可] > [xxxxのディレクトリに管理者の同意を与えます]をクリックし、[はい]をクリックします。

    XCredsアプリのAPIのアクセス許可の管理者の同意

XCredsへのログイン許可

アプリケーションにログインできるように、ユーザーまたはまたはグループにアクセス権限を付与します。

  1. [Azure サービス] > [エンタープライズアプリケーション] > [XCreds(アプリの登録で登録した名前)] をクリックします。

    Azure Portalのエンタープライズアプリケーションの一覧

  2. [ユーザーとグループ] > [ユーザーまたはグループの追加] をクリックします。

    エンタープライズアプリケーションのユーザーとグループ

  3. [ユーザー]または[グループ] > [対象となるオブジェクト] > [選択] > [割り当て]をクリックします。

    エンタープライズアプリケーションのユーザーまたはグループのアサイン

Jamf Proの設定

Jamf Proサーバーにアクセスして設定します。

事前に、XCredsで使用したいバージョンのpkgリリースページからダウンロードしておきます。

XCredsパッケージの登録

  1. [設定] > [コンピュータ管理] > [パッケージ] > [新規] をクリックします。
  2. [ファイル選択]から事前にダウンロードしておいたXCredsのpkgファイルを選択して[保存]をクリックします。
    • [カテゴリ]の設定は任意

    Jamf ProにおけるXCredsパッケージのアップロード

XCredsのプロファイルの設定

  1. [コンピュータ] > [構成プロファイル] > [新規] をクリックします。
  2. [一般]の項目を選択し、各項目を設定します。
    • 名前: XCreds
      • 名前は任意の文字列で可
    • レベル: Computer Level
    • 配布方法: Install Automatically
    • 説明、サイト、カテゴリは任意

    Jamf ProにおけるXCredsの構成プロファイルの一般設定

  3. [ログイン項目] > [構成] > [項目] > [追加] から、Itemに /Applications/XCreds.app/ を設定して[Save]をクリックします。
    • 末尾に/がないと正しく動作しないので注意

    Jamf ProにおけるXCredsの構成プロファイルのログイン項目設定

  4. [アプリケーションとカスタム設定] > [外部アプリケーション] > [追加] から[ソース]と[環境設定ドメイン]を設定し、[スキーマ追加]をクリックします。
    • ソース: カスタムスキーマ
    • 環境設定ドメイン: com.twocanoes.xcreds

    Jamf ProにおけるXCredsの構成プロファイルのアプリケーションとカスタム設定の外部アプリケーション設定

  5. XCredsのJSON Schemaの内容を入力、またはアップロードし、[保存]をクリックします。

    Jamf ProにおけるXCredsの構成プロファイルのアプリケーションとカスタム設定の外部アプリケーション設定におけるカスタムスキーマの追加

  6. [環境設定ドメインのプロパティ]の[Add/Remove properties]から必要およびカスタムしたい項目を選択し、値を設定します。
    • Client ID: Azure ADで取得した[アプリケーション(クライアント)ID]
    • Client Secret: Azure ADで発行したシークレット
    • Discovery URL: https://login.microsoftonline.com/<Azure ADで取得した[ディレクトリ(テナント)ID]>/.well-known/openid-configuration
    • Scopes: profile openid offline_access
      • OIDCの認証時に必要なクレームを設定できる
    • Show Support Status Message: false
      • 設定は任意
      • WebViewのログイン画面を表示する際にXCredsのサポートを訴求するメッセージを表示される
      • 今回は特に必要ないため非表示にしている
    • Enable Full Disk Encryption (FED): true
      • 設定は任意
      • ユーザーが初めてログインしたタイミングで、FileVaultの暗号化が実行される

    Jamf ProにおけるXCredsの構成プロファイルのアプリケーションとカスタム設定の外部アプリケーション設定におけるプロパティの設定

  7. [Scope]をクリックして、配布したいスコープを設定します。
    • 検証のため[ターゲットコンピュータ]をAll Computersとして設定
  8. [保存]をクリックします。

特に環境設定は、例えば作成するユーザーに管理者権限を付与するCreate Admin Userなど、お使いのワークロードに適する設定などもあるため、必要な場合は適宜設定を変更してください。一部記載されてないプロパティがありますが、詳しくはXCreds AdminGuideを参照してください。

FileVaultのプロファイルの設定

今回、FileVaultの設定は別のプロファイルとして設定していますが、XCredsのプロファイルにまとめることも可能です。

  1. [コンピュータ] > [構成プロファイル] > [新規] をクリックします。
  2. [一般]の項目を選択し、各項目を設定します。
    • 名前: FileVault
      • 名前は任意の文字列で可
    • レベル: Computer Level
    • 配布方法: Install Automatically
    • 説明、サイト、カテゴリは任意

    Jamf ProにおけるFileVaultの構成プロファイルの一般設定

  3. [セキュリティとプライバシー] > [FileVault] をクリックして各項目を設定します。
    • FileVault オプションのユーザによる変更: [FileVaultの無効化を防止]としてトグルをON
      • 設定は任意
      • 特別な理由がない限りは、FileVaultを無効化させる必要はない
    • ユーザに休止状態からの復帰後 FileVault の解除を要求: [有効]としてトグルをON
      • 設定は任意
    • 個人所有のリカバリキーのエスクロー: トグルをON
      • 暗号化の方法: リカバリーキーを自動的に暗号化/復号
      • エスクローの場所の説明: Jamf Pro
        • 任意の文字列

    Jamf ProにおけるFileVaultの構成プロファイルのセキュリティとプライバシーのFileVault設定

  4. [Scope]をクリックして、配布したいスコープを設定します。
    • 検証のため[ターゲットコンピュータ]をAll Computersとして設定
  5. [保存]をクリックします。

XCredsのプロファイル側でもFileVaultを有効化しましたが、別途FileVaultのプロファイル設定が必要なのには2つの理由があります。

  1. XCredsのSave PRKとJamf Proとの相性が良くない
    • Save PRKはMDMのエクスローサービスがパーソナルリカバリーキーを収集できるように、デフォルトでは/var/db/FDE/FDESetup.plistに情報を保存するが、Jamfエージェントはそのファイルを読み込まないため、Jamf Proサーバーにパーソナルリカバリーが収集されない
  2. MDMのAPI(構成プロファイル)でログイン時にFileVaultを有効化すると、XCredsの処理と競合してしまう
    • FileVaultの有効化のポップアップが表示されてしまい、XCredsがログインウィンドウへのログイン処理が実行できずにログインが失敗したと認識されてしまう
    • FileVaultの有効化のポップアップをログアウト後にすることで、XCredsの設定側ではFileVaultの設定をしないことも可能だが、ログアウト後にFileVaultを有効化する場合、強制終了やエンドユーザーのライフサイクルを考慮しないといけないため、あまり推奨されない

PreStage Enrollmentsの設定

  1. [コンピュータ] > [Prestage Enrollments] > [新規] をクリックします。
  2. [一般]から各値を設定します。
    • 表示名: kenchan0130 HQ
      • 任意の文字列
    • 設定アシスタントオプション: [プライバシー]をアンチェック
      • [設定アシスタントによる自動アドバンス]や[設定アシスタントオプション]をすべてチェックしてしまうと、XCredsのパッケージがログインウィンドウに到達する前に展開されない可能性があるため、何かしら設定アシスタントの項目を残しておくことが推奨される

    Jamf ProにおけるPreStage Enrollmentsの一般設定

  3. [アカウント設定] > [構成] をクリックして、各値を設定します。
    • セットアップアシスタントの前にローカル管理者アカウントを作成する: 有効
      • ユーザー名: kenchan0130admin
        • 任意の文字列
      • パスワードパスワードの確認: 任意のパスワード
      • ローカルアカウントユーザータイプ: アカウントの作成をスキップ
        • XCredsがアカウントを作成するためスキップしておく必要がある

    Jamf ProにおけるPreStage Enrollmentsのアカウント設定

  4. [構成プロファイル] > [構成] をクリックして、有効化したいプロファイルを選択します。
    • 先程作成した構成プロファイルのXCredsFileVaultを選択

    Jamf ProにおけるPreStage Enrollmentsの構成プロファイル設定

  5. [登録パッケージ] > [構成] をクリックして、使用したいパッケージを選択します。
    • 先程登録したXCredsのパッケージを選択

    Jamf ProにおけるPreStage Enrollmentsの登録パッケージ設定

  6. [Scope]をクリックして、配布したいスコープを設定します。
  7. [保存]をクリックします。

動作確認

初期化状態での挙動

初期化状態のMacを起動して確認していきます。

最初は、

  1. 言語
  2. 国または地域
  3. 文字入力および音声入力
  4. アクセシビリティ
  5. ネットワーク

が順に表示されるため、指示に従い、設定します。

  1. リモートマネジメントの表示を確認して[続ける]をクリックします。

    セットアップアシスタントのリモートマネジメント画面

  2. データとプライバシーの表示を確認して[続ける]をクリックします。
    • PreStage Enrollmentsで表示するように設定したため表示されている

    セットアップアシスタントのデータとプライバシー画面

  3. 時間帯を適切に選択し、[続ける]をクリックします。

    セットアップアシスタントの時間帯の画面

  4. IdPのログイン画面が表示されるため、認証情報を入力します。
    • 今回はAzure ADのユーザーに対してパスワードリセットを施して、そこで提供されたワンタイムのパスワード入力

    XCredsのログインウィンドウにおけるAzure ADのユーザー名入力画面 XCredsのログインウィンドウにおけるAzure ADのパスワード入力画面 XCredsのログインウィンドウにおけるAzure ADのパスワード変更画面

  5. IdPの認証が成功すると、FileVaultの有効化を確認するポップアップが表示されるため、[OK]をクリックします。
    • このポップアップで[Don’t Allow]を選択すると、再度IdPのログイン画面が表示される

    IdPの認証が成功したあとのFileVaultの有効化確認画面

ここまで完了すると、ユーザーが作成され、FileVaultも有効化されている状態になります。

IdPの認証パスワードとMacのローカルパスワードが異なっている場合の挙動

運用をしていると、IdPの認証パスワードとMacのローカルパスワードが異なるという事象は多く発生します。

XCredsはMacのローカルパスワードをIdPの認証パスワードに更新しようとします。 また、XCerdsはKeyChainを引き継ごうとするため、以前のMacのローカルパスワードを要求します。

IdPのパスワードとMacのローカルパスワードが異なっていた場合の以前のMacのローカルパスワードの確認ダイアログ

さらに、ログインウィンドウでも同様に、以前のMacのローカルパスワードを要求します。

IdPのパスワードとMacのローカルパスワードが異なっていた場合の以前のMacのローカルパスワードの確認ダイアログ IdPのパスワードとMacのローカルパスワードが異なっていた場合のKeychainの更新

しかし、以前のMacのローカルパスワードが分からない場合は、XCredsが以前のMacのローカルパスワードを要求するダイアログが出続けてしまいます。 FileVaultが解除されていない場合は、合わせてJamf Proに保存されているリカバリーキーで暗号化を解除します。

Jamf Proにおけるインベントリのディスク暗号化項目

FileVaultの暗号化が解除されれば、Jamf Proなどのポリシーが動作するため、Jamf Proのローカルアカウントのポリシーを使用して、Macのローカルパスワードがリセットできます。2

Jamf Proにおけるポリシーのローカルアカウント項目のローカルパスワードリセット設定

これらを組み合わせることで、以前のMacのローカルパスワードが分からない場合でも、復旧が可能です。

終わりに

XCredsについて解説するとともに、ゼロタッチデプロイにおいてXCredsが機能するかを検証してみました。

XCredsはIdPを介してMacにログインするための最低限の機能を有していることがわかりました。

ただ、Jamf Connectは有償なだけあり、リリースノートなどを見る限り、高機能かつ、UXも洗練されているように見受けられるという印象を受けます。

また、macOS Venturaから導入予定のPlatform Single Sign-onとも競合する可能性があります。 お使いのIdPがPlatform Single Sign-onをサポートする場合は、そちらを使用するのが良い可能性があります。 ただ、もしIdPのサポートが実施されない、またはサポートに時間がかかる場合は、XCredsが引き続き有効な手段となると思いました。

XCredsやJamf Connect(おそらくPlatform Single Sign-onも)すべてに言えることですが、これらを導入してもFileVaultの解除がパスワードおよびリカバリーキーのみしかサポートしていないため、パスワードレスになるわけではありません。 あくまで、複数のパスワードを覚える必要がなくなり、エンドユーザーの体験が向上するだけであることに注意が必要です。

  1. XCredsのVersion2.0を使用すると、macOS Big Sur環境ではアプリケーションが動作しません。未確認ですが、PreBeta版では修正されている模様です。 

  2. ローカルパスワードをリセットすると、Keychainも再生成されるため、Keychainに保存されていた値にはアクセスできなくなります。