SaaS

macOS向けOkta Device Trust試してみた


はじめに

どーもみなさんこんにちは。ねもてぃです。
今日はmacOS向けに展開されているOktaのDevice Trust機能を実装してみたいと思います。

Okta Device Trust for macOSってなにができるの?

Okta Device Trust for macOSを有効にすることで、Oktaに登録されているアプリケーションのアクセス条件(Access Policy)に「Jamf Proに登録されていること」を追加できるようになります。つまり、Jamf Proで管理されていないmacOSからOktaで管理しているアプリケーションへのアクセスをブロックすることができるようになります。

公式ドキュメントに仕組み等記載があるのでご参照ください。

Enforce Okta Device Trust for Jamf Pro managed macOS devices より

大雑把に説明すると、

  1. OktaとJamf Proを連携させます
  2. Jamf ProでmacOSにOktaから証明書を配るスクリプトを実行します
  3. Oktaは登録されているアプリケーションにアクセスがあった時に、発行した証明書を所持しているかを確認します
  4. 証明書を持っていればアクセスOK、持っていなければブロックします

といった感じです。

要件

  • Oktaがサポートするバージョン(過去3年以内)のmacOS
  • Jamf Pro
  • Oktaキーチェーンにアクセスできるブラウザ(SafariまたはChrome)

など

検証環境

  • MacBook Pro (13-inch, M1, 2020)
  • macOS 11.4 Big Sur
  • Jamf Pro 10.29.2

Okta Device Trustの有効化

それでは実際に設定していきます。

  • Okta管理コンソール > Security > Device Trust > macOS Device Trust から”Edit”を押します。
  • 「Enable macOS Device Trust」にチェックを入れ必要な情報を入力します。
    • Jamf Pro URL:Jamf ProのURLを入力します。(ex.https://hogehoge.jamcloud.com)
    • API Username:「Computers」「Jamf Pro User Accounts & Groups」「Users」のRead権限があるJamf Proアカウントのユーザー名を入力します。(私は連携用にアカウントを一つ作成しました)
    • API Password:上で設定したアカウントのパスワードを入力します。

“Test API Credentials”から疎通のテストができるので確認しておきましょう。

確認ができたら”Next”を押します。

macOSで実行するスクリプトのダウンロードができるので”Download”をクリックしてダウンロードしておきます。(MacOktaDeviceRegistrationTaskSetup.1.3.1.pyというファイル名でした)

また、Secret Key valueとOrg URLをどこかにコピペしておきます。
※)Secret Key valueはこのタイミングでしか確認できないので忘れずに!

“Done”を押してOkta Device Trustの有効化作業は完了です。

Jamf Pro側の設定

登録用スクリプトの設定

続いてJamf Proから配布するスクリプトを準備していきます。

ダウンロードしたスクリプトをテキストエディットなどで開き、内容をコピーします。

Jamf Pro管理コンソール > 設定 > コンピュータ管理 > スクリプト > +新規 > スクリプトタブ に移動し、コピーしたスクリプトを貼り付けます。

このスクリプトはPythonで書かれているので、スクリプトコンテンツは「Python」にしておくといいと思います。

このスクリプトは変更しなければならないところが2つあります。

  • ORG_TOKEN(33行目)
  • URL(34行目)

※)該当行数はMacOktaDeviceRegistrationTaskSetup.1.3.1.pyのものになります。

ORG_TOKEN:OktaでDevice Trustを有効にした時に発行されたSecret Key valueを入力します
URL:同様にOrg URLを入力します
最初から'{$ORG_TOKEN$}''{$URL$}'と入っていますが、''は残して置き換えます。

一般タブは任意の内容で設定して”保存”をします。

以上でスクリプトの準備は完了です。

Pythonに関する注意事項

最新版のスクリプトの実行にはPython3が必要となります。私の環境では問題ありませんでしたがOS Verによって実行できない可能性があるのでできない場合は古いバージョンのスクリプトを使用するか、Python3のインストールが必要になります。Python3をインストールするスクリプトに関しては公式ドキュメントに記載があるのでこちらからProdures > STEP 3. Install Python 3 and Device Trust dependencies の項をご参照ください。

Pythonモジュールのインストール

登録用スクリプトを実行するためには追加でPythonモジュールのインストールをしておく必要があります。 下記内容のスクリプトも登録用スクリプトと同様にJamf Proに登録しておきましょう。

#!/bin/sh
echo "Running pip3 install --upgrade pip"
sudo pip3 install --upgrade pip
echo "Running pip3 install pyobjc-framework-SystemConfiguration"
sudo pip3 install pyobjc-framework-SystemConfiguration
echo "pip3 install pyOpenSSL"
sudo pip3 install pyOpenSSL
exit

ポリシー配布設定

スクリプトの準備ができたら配布の設定を行います。

Jamf Pro管理コンソール > コンピュータ > ポリシー > “+新規” > スクリプトペイロード > “Configure” を押し、先ほど設定したMacOktaDeviceRegistrationTaskSetup.1.3.1.pyを”Add”します。

※)登録タスクを一回だけ実行することを想定する場合は「Pythonモジュールのインストール用スクリプト」をここで”Add”してもOKです。その場合は「優先順位」を”Before”と設定し、MacOktaDeviceRegistrationTaskSetup.1.3.1.pyより先に実行されるように設定します。

パラメータ値の設定は必要ないのでGeneralペイロードに移り、表示名やトリガー、実行頻度を設定します。
Oktaのドキュメントでは

  • トリガー:登録完了Recurring Check-in
  • 実行頻度:Once per computer per user

と記載されていますが環境やユースケースに合わせて適切なトリガー、実行頻度を設定しましょう。

Generalとスクリプトの設定が完了したらScopeの設定をします。Scopeタブに移り、Okta Device Trustを適用させたいデバイスやグループを”Add”して保存します。

Scopeの考え方なのですが、Smart Computer Groupを利用して「セキュリティ設定が適切に設定されているデバイスグループ」を作成し適用する、といった運用も良いかもしれません。

ポリシーの実行状況の確認は該当ポリシーの”ログ” > “Details” から確認できます。実行がうまくいかない場合はこちらからログをみて原因を探りましょう。

Pythonモジュールのインストールを忘れていた時の失敗ログ
スクリプトの「’」を誤って消してしまっていたために起きたエラーログ

登録が完了すると、Mac上のキーチェーンアクセス.app内でカスタムキーチェーンとして「okta」が登録されていることが確認できます。

Sign On Policyの設定(Okta)

最後にOkta側で各種アプリケーションにサインインする条件としてデバイストラストが有効になっている、というポリシーを設定します。

Okta管理コンソール > Application > 設定したい任意のアプリケーション > Sign Onタブ > Sign On Policy > “+Add Rule”を押します。


Device Trustの有効化に必要な設定としては、

  • CLIENT:macOSにチェックを入れます
  • DEVICE TRUST:TrustedまたはNot trusted
  • ACCESS:AllowdまたはDenied

なのでこれらを設定して”Save”します。

以上でSign On Policyの設定は完了です。

動作確認

それでは実際にアプリケーションへアクセスをしてみます。
まずはDevice Trustの登録がされていないMacからアクセスをしてみます。

「管理者が設定したポリシーにより、このアプリケーションへのアクセスが拒否されています」という画面になり、アクセスできないことが確認できます。

Device Trustの登録がされているMacからアクセスをすると、証明書を選択する画面が表示され、選択することでアクセスができるようになります。

Safari
Edge

※)Firefoxは対応していません

無効化する方法

Macのデバイストラストを無効化する方法としては二つあります。

  • Okta側で証明書をRevokeする
  • Jamf Proからアンインストールスクリプトを実行する

Okta側から証明書をRevokeする場合は、Okta管理コンソール > Directory > People > 有効化したユーザー > “More Action” より”Revoke Trust Certificate”を実行することで配布した証明書を無効化することができます。

Jamf Proからアンインストールスクリプトを実行する場合は、登録スクリプトの実行と同様にMacOktaDeviceRegistrationTaskSetup.1.3.1.pyを実行するポリシーを作成し、パラメータ値のパラメータ4にuninstallと入力したポリシーを実行します。

注意事項

最後に注意事項についてです。大きな注意事項としては以下となります。

  • デバイスの最大登録回数は5回まで
  • 複数のOktaテナントには対応していない
  • ブラウザ認証においてFirefoxは対応していない

特にデバイスの最大登録回数ですが、検証等で登録→解除→登録を繰り返したり、Smart Computer Groupでセキュリティ設定の準拠状態をCriteriaとして登録→日準拠状態になったら解除といった構成しようとするとあっという間に上限に達してしまうので念頭に置いておく必要があります。

おわりに

Azure AD条件付きアクセスのようにデバイスの状態をみて許可/拒否を行う機能はありませんが、Okta Device Trustを有効にすることでMDMで管理していないMacからのアクセスを拒否することは可能になりました。

今後のアップデートが期待されるOkta Devicesによってデバイスの状態を動的に確認することができるようになりそうではあるので、こちらの機能が実装されるのを楽しみにしています。現状できることは今回紹介した範囲にはなりますが、アクセス制御に関してできることからやっていく、というのも一つの選択肢かと思います!それでは!

ねもてぃ(nemotea)

2020年10月入社。デバイスチーム所属。
前職ではAppleデバイスとMDM周りのエンジニアをしていました。
漫画・アニメとお酒が好きなギタリストです。