Okta Access Requests × Jamf Proで利用禁止しているアプリを一時的に使えるようにしてみた



# 前置き

この記事は[株式会社ビットキー 情シス Advent Calendar 2023](https://qiita.com/advent-calendar/2023/bitkey-corp-eng) の13日目の投稿です。

はじめまして。株式会社ビットキーの日浦です。
昨日に引き続きOkta Access Requestsのお話です。

https://qiita.com/h_r_w_t_r/items/181518fa2c3fe6694cfa

情シスアドカレを見に来てくださる方には釈迦に説法ですが、システムは単体で利用するだけでなく組み合わせることでより便利に使うことができます。今日は最近試したインテグレーションについて書こうと思います。

# 前提

- 弊社では社内の端末は99%がmacOSで、MDMにはJamfを利用しています。
- IDaaSにOktaを利用しており、アクセス権限の管理でOkta Access Requestsを活用しています。
- 今回はIDaaSであるOkta Access RequestsとMDMであるJamfを使って、
業務用PCで特定のアプリケーションを禁止したり、一時的に使えるようにする、という話を書こうと思います。

# 概要

情シスとして特定のアプリケーションの社内利用を禁止したい、というシチュエーションがあると思います。
が、そういう情シスが禁止にしたいアプリに限って利用者目線では便利なものが多いので、「◯◯な理由で必要なので、一時的に利用許可してほしい！」と相談が、まれによくあります。
- 一例としてありそうなのは業務利用は「Chromeブラウザだけ許可」「Safariは禁止」みたいなルールを敷いているが、どうしてもSafariでしか使えないWebサイトを利用したいときとか。
    - 堅めな日系サービスサイトだとたまに存在する

情シス側には禁止する理由があるし、利用したい側にもそれ相応の理由があるため、ディスカッションやリスクアセスメントを経て「一時的に利用を許可」などの判断をすることも珍しくないと思います。

その際、例えばJamfでアプリの利用を禁止している場合、下記のように「制限ソフトウェア」で制御をかけることが一般的ですが、**一時的に許可するためには当然この設定を変更する**必要があります。

Jamfの場合「Scope > Exclusions」で依頼者やシリアルを指定して登録するのが一般的かと思います。
![スクリーンショット 2023-12-08 18.02.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/f32d6d5f-34aa-3221-4998-a05721d0085e.png)


::: note
若干後半のネタバレになりますが、Exclusions指定するときはシリアル直指定ではなく、Groupを使うのがおすすめです
:::

この、「**一時的に許可するためには当然この設定を変更する」がめんどくさすぎる**ので、もうちょっと楽をする方法を考えてみました

# 結論

早速ですが結論です。下記のようなピタゴラスイッチを実装します。

- Jamfの制限ソフトウェア機能でアプリの利用を禁止する
- Okta→JamfにOkta Groupを連携しておく（拡張属性に入る）
- Jamfの制限ソフトウェアのExclusionsにSmart Computer Groupを指定する
    - 上述のOkta GroupをトリガーにSmart Computer Groupに入るようにしておく
- 利用したい時にOkta Access Requestsで申請してもらい、Okta Groupに入るようにする

さすがに文字だけだとイメージしづらいと思うので、
以下、**どうしてもChess.Appを禁止したい情シスと、どうしてもChess.Appを利用したいユーザー**を例に、手順を解説します。


# 1. JamfでChess.Appの利用を禁止する

- コンピュータ > 制限ソフトウェア
    - Scopeはなんでも良いですが、**全社での利用を禁止したい場合は `All Computers` を指定します**

        ![スクリーンショット 2023-12-08 18.19.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/d9080568-087b-36e9-0bfc-ec4481c79014.png)

        ![スクリーンショット 2023-12-08 18.21.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/206be932-8c2c-8908-35e6-c29f56ad644b.png)

        ![スクリーンショット 2023-12-08 18.28.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/e2d73988-8553-334e-e44f-b537d391d91a.png)

無事にチェスで遊べないようになりました。

# 2. Okta→Jamfに所属グループをLDAP連携する

今回は詳細な手順は割愛します。

下記スライドが非常に参考になりました。

https://speakerdeck.com/shimosyan/jamf-pro-de-okta-karayuzaqing-bao-yasuo-shu-gurupuwo-ldap-woshi-tutequ-de-sitemita

# 3. Okta上で利用を許可するグループを作成する

後にOkta Access RequestとJamfのSmart Computer Groupで利用する「Okta Group」を作成します。

弊社ではTerraformでグループを管理しているため下記のようなソースになります。

```terraform
resource "okta_group" "oig_temporary_chess_use" {
  name        = "oig_temporary_chess_use"
  description = "created by terraform"
}
```

適当な人をアサインしてJamf上に連携されているかどうかを確認しましょう

# 4. Jamf上でSmart Computer Groupを作成する

- スマートコンピュータグループ：なんでもOK
    - 今回は **`000_oig_temporary_chess_use`**
        ![スクリーンショット 2023-12-08 18.40.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/e6011453-51c4-b499-e7a1-add442c6aaea.png)

        
- クライテリア
    - クライテリア：OktaGroups
    - オペレータ：has
    - 値： `cn=oig_temporary_chess_use,ou=groups,dc=${yourtenant},dc=okta,dc=com`
        
        ↑ ここちょっと詰まった。拡張属性に連携されている、一行単位を使うらしい
        
        ![スクリーンショット 2023-12-08 18.45.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/ee186b2f-b9ab-11b0-0d31-d42e46230fd8.png)
        

# 5. Jamfの制限ソフトウェアででChess.AppのExclusionsにグループを指定する

![スクリーンショット 2023-12-08 18.49.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/4d798792-6f6f-ea65-29dc-9fe45ade71f8.png)

`000_oig_temporary_chess_use` のSmart Computer GroupをExclusionsに指定します。

この時点で、Okta上で `oig_temporary_chess_use` に所属しているメンバーはチェスで遊べる状態になっています。

::: note
**「原則利用不可、一部の人は利用許可」** というパターンのときは、これで終了です。
:::


# 6. Okta Access Requestsで「一時利用許可グループ」に所属するためのリクエストを作成する

今回の例では、申請（承認）後、8時間の間、 `oig_temporary_chess_use` のOktaグループに所属する事になります。

## 承認必須のパターン

![スクリーンショット 2023-12-08 19.53.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/ec083237-0c2a-b6fa-3778-9a8367fae1c2.png)

## 承認不要なパターン

![スクリーンショット 2023-12-08 19.55.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/910dad85-9b9d-06c4-bf1d-8818faf222d9.png)


# 7. 実際にやってみる

Okta Access Requestsから申請します

![スクリーンショット 2023-12-08 19.58.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/d3c6ec85-0327-064c-5625-91f9bc14d4ff.png)


![スクリーンショット 2023-12-08 19.59.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/3eba2933-17b8-250c-c31c-f9a0658d4ed3.png)

# 8. 無事、チェスで遊べるようになりました

![スクリーンショット 2023-12-08 19.48.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/927e6756-0814-ab8f-9279-ee1dfde80782.png)


実際は下記のようなピタゴラスイッチになるので、若干のタイムラグがあります。

特に4の反映は時間が読めない。一瞬のときもあれば15分くらいかかるときもある。

1. Okta Access Reqeusetにより申請者が `oig_temporary_chess_use` に所属
2. Jamf上でチェックインが走ってサーバサイドでSmart Computer Groupに入る
3. Smart Computer Groupに入ったので、制限ソフトウェアのExclusionsに入る
4. Jamfサーバサイドの設定がローカルPCに落ちてくる

# まとめ

- OktaとJamfのインテグレーションにより、**極端に表現すると情シスが一切手を動かさず**にアプリケーションの許可・禁止をコントロールできるようになりました。
- 当然ですが、**Jamf上でSmart GroupでScopeを指定する「構成プロファイル」や「ポリシー」でも同じようにユーザーのリクエストベースで、自動での適用が可能**です
    ex） CIS Controlsに則って「Air Drop」を原則禁止にしてるけど申請内容に応じて一時的に許可する、など
    
- この組み合わせは非常に拡張性が高いと思うので、他にもいろいろ試してみます。