IdPを介してMacにログインできるXCredsを検証してみた
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の統合
-
[Azure サービス] > [アプリの登録] > [新規登録] をクリックします。
- リダイレクトURIと任意のアプリケーション名を設定し、[登録]をクリックします。
- 名前:
XCreds
- 名前は任意の文字列で可
- サポートされているアカウントの種類:
この組織ディレクトリのみに含まれるアカウント(xxxxxのディレクトリのみ - シングルテナント)
- ユースケースに合わせて設定
- リダイレクトURI:
xcreds://auth/
- パブリッククライアント/ネイティブ(モバイルとデスクトップ)として登録
- 名前:
- [概要]から以下の値を取得しておきます。
- アプリケーション(クライアント)ID
- ディレクトリ(テナント)ID
-
[証明書とシークレット] > [新しいクライアントシークレット] から[説明]と[有効期限]を設定し、[追加]をクリックします。
- 発行したシークレットの[値]を取得しておきます。
- パブリッククライアント/ネイティブ(モバイルとデスクトップ)として登録しているため、この値は秘匿情報として扱う必要はない
-
[APIのアクセス許可] > [xxxxのディレクトリに管理者の同意を与えます]をクリックし、[はい]をクリックします。
XCredsへのログイン許可
アプリケーションにログインできるように、ユーザーまたはまたはグループにアクセス権限を付与します。
-
[Azure サービス] > [エンタープライズアプリケーション] > [XCreds(アプリの登録で登録した名前)] をクリックします。
-
[ユーザーとグループ] > [ユーザーまたはグループの追加] をクリックします。
-
[ユーザー]または[グループ] > [対象となるオブジェクト] > [選択] > [割り当て]をクリックします。
Jamf Proの設定
Jamf Proサーバーにアクセスして設定します。
事前に、XCredsで使用したいバージョンのpkg
をリリースページからダウンロードしておきます。
XCredsパッケージの登録
- [設定] > [コンピュータ管理] > [パッケージ] > [新規] をクリックします。
- [ファイル選択]から事前にダウンロードしておいたXCredsの
pkg
ファイルを選択して[保存]をクリックします。- [カテゴリ]の設定は任意
XCredsのプロファイルの設定
- [コンピュータ] > [構成プロファイル] > [新規] をクリックします。
- [一般]の項目を選択し、各項目を設定します。
- 名前:
XCreds
- 名前は任意の文字列で可
- レベル:
Computer Level
- 配布方法:
Install Automatically
- 説明、サイト、カテゴリは任意
- 名前:
- [ログイン項目] > [構成] > [項目] > [追加] から、Itemに
/Applications/XCreds.app/
を設定して[Save]をクリックします。- 末尾に
/
がないと正しく動作しないので注意
- 末尾に
- [アプリケーションとカスタム設定] > [外部アプリケーション] > [追加] から[ソース]と[環境設定ドメイン]を設定し、[スキーマ追加]をクリックします。
- ソース:
カスタムスキーマ
- 環境設定ドメイン:
com.twocanoes.xcreds
- ソース:
-
XCredsのJSON Schemaの内容を入力、またはアップロードし、[保存]をクリックします。
- [環境設定ドメインのプロパティ]の[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の暗号化が実行される
- Client ID:
- [Scope]をクリックして、配布したいスコープを設定します。
- 検証のため[ターゲットコンピュータ]を
All Computers
として設定
- 検証のため[ターゲットコンピュータ]を
- [保存]をクリックします。
特に環境設定は、例えば作成するユーザーに管理者権限を付与するCreate Admin User
など、お使いのワークロードに適する設定などもあるため、必要な場合は適宜設定を変更してください。一部記載されてないプロパティがありますが、詳しくはXCreds AdminGuideを参照してください。
FileVaultのプロファイルの設定
今回、FileVaultの設定は別のプロファイルとして設定していますが、XCredsのプロファイルにまとめることも可能です。
- [コンピュータ] > [構成プロファイル] > [新規] をクリックします。
- [一般]の項目を選択し、各項目を設定します。
- 名前:
FileVault
- 名前は任意の文字列で可
- レベル:
Computer Level
- 配布方法:
Install Automatically
- 説明、サイト、カテゴリは任意
- 名前:
- [セキュリティとプライバシー] > [FileVault] をクリックして各項目を設定します。
- FileVault オプションのユーザによる変更:
[FileVaultの無効化を防止]としてトグルをON
- 設定は任意
- 特別な理由がない限りは、FileVaultを無効化させる必要はない
- ユーザに休止状態からの復帰後 FileVault の解除を要求:
[有効]としてトグルをON
- 設定は任意
- 個人所有のリカバリキーのエスクロー:
トグルをON
- 暗号化の方法:
リカバリーキーを自動的に暗号化/復号
- エスクローの場所の説明:
Jamf Pro
- 任意の文字列
- 暗号化の方法:
- FileVault オプションのユーザによる変更:
- [Scope]をクリックして、配布したいスコープを設定します。
- 検証のため[ターゲットコンピュータ]を
All Computers
として設定
- 検証のため[ターゲットコンピュータ]を
- [保存]をクリックします。
XCredsのプロファイル側でもFileVaultを有効化しましたが、別途FileVaultのプロファイル設定が必要なのには2つの理由があります。
- XCredsの
Save PRK
とJamf Proとの相性が良くない-
Save PRK
はMDMのエクスローサービスがパーソナルリカバリーキーを収集できるように、デフォルトでは/var/db/FDE/FDESetup.plist
に情報を保存するが、Jamfエージェントはそのファイルを読み込まないため、Jamf Proサーバーにパーソナルリカバリーが収集されない
-
- MDMのAPI(構成プロファイル)でログイン時にFileVaultを有効化すると、XCredsの処理と競合してしまう
- FileVaultの有効化のポップアップが表示されてしまい、XCredsがログインウィンドウへのログイン処理が実行できずにログインが失敗したと認識されてしまう
- FileVaultの有効化のポップアップをログアウト後にすることで、XCredsの設定側ではFileVaultの設定をしないことも可能だが、ログアウト後にFileVaultを有効化する場合、強制終了やエンドユーザーのライフサイクルを考慮しないといけないため、あまり推奨されない
PreStage Enrollmentsの設定
- [コンピュータ] > [Prestage Enrollments] > [新規] をクリックします。
- [一般]から各値を設定します。
- 表示名:
kenchan0130 HQ
- 任意の文字列
- 設定アシスタントオプション:
[プライバシー]をアンチェック
- [設定アシスタントによる自動アドバンス]や[設定アシスタントオプション]をすべてチェックしてしまうと、XCredsのパッケージがログインウィンドウに到達する前に展開されない可能性があるため、何かしら設定アシスタントの項目を残しておくことが推奨される
- 表示名:
- [アカウント設定] > [構成] をクリックして、各値を設定します。
- セットアップアシスタントの前にローカル管理者アカウントを作成する:
有効
- ユーザー名:
kenchan0130admin
- 任意の文字列
- パスワード、 パスワードの確認:
任意のパスワード
- ローカルアカウントユーザータイプ:
アカウントの作成をスキップ
- XCredsがアカウントを作成するためスキップしておく必要がある
- ユーザー名:
- セットアップアシスタントの前にローカル管理者アカウントを作成する:
- [構成プロファイル] > [構成] をクリックして、有効化したいプロファイルを選択します。
- 先程作成した構成プロファイルのXCredsとFileVaultを選択
- [登録パッケージ] > [構成] をクリックして、使用したいパッケージを選択します。
- 先程登録したXCredsのパッケージを選択
- [Scope]をクリックして、配布したいスコープを設定します。
- [保存]をクリックします。
動作確認
初期化状態での挙動
初期化状態のMacを起動して確認していきます。
最初は、
- 言語
- 国または地域
- 文字入力および音声入力
- アクセシビリティ
- ネットワーク
が順に表示されるため、指示に従い、設定します。
-
リモートマネジメントの表示を確認して[続ける]をクリックします。
- データとプライバシーの表示を確認して[続ける]をクリックします。
- PreStage Enrollmentsで表示するように設定したため表示されている
-
時間帯を適切に選択し、[続ける]をクリックします。
- IdPのログイン画面が表示されるため、認証情報を入力します。
- 今回はAzure ADのユーザーに対してパスワードリセットを施して、そこで提供されたワンタイムのパスワード入力
- IdPの認証が成功すると、FileVaultの有効化を確認するポップアップが表示されるため、[OK]をクリックします。
- このポップアップで[Don’t Allow]を選択すると、再度IdPのログイン画面が表示される
ここまで完了すると、ユーザーが作成され、FileVaultも有効化されている状態になります。
IdPの認証パスワードとMacのローカルパスワードが異なっている場合の挙動
運用をしていると、IdPの認証パスワードとMacのローカルパスワードが異なるという事象は多く発生します。
XCredsはMacのローカルパスワードをIdPの認証パスワードに更新しようとします。 また、XCerdsはKeyChainを引き継ごうとするため、以前のMacのローカルパスワードを要求します。
さらに、ログインウィンドウでも同様に、以前のMacのローカルパスワードを要求します。
しかし、以前のMacのローカルパスワードが分からない場合は、XCredsが以前のMacのローカルパスワードを要求するダイアログが出続けてしまいます。 FileVaultが解除されていない場合は、合わせてJamf Proに保存されているリカバリーキーで暗号化を解除します。
FileVaultの暗号化が解除されれば、Jamf Proなどのポリシーが動作するため、Jamf Proのローカルアカウントのポリシーを使用して、Macのローカルパスワードがリセットできます。2
これらを組み合わせることで、以前の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の解除がパスワードおよびリカバリーキーのみしかサポートしていないため、パスワードレスになるわけではありません。 あくまで、複数のパスワードを覚える必要がなくなり、エンドユーザーの体験が向上するだけであることに注意が必要です。