🍎

Jamf Proからジョーシスにデバイス登録を行ってみた(Mac編)

に公開

概要

みなさん!SaaS管理SaaSは利用していますか!?(唐突)
アカウントやデバイスの管理機能等が充実しているため、弊社でも絶賛利用中です
今回は、SaaS管理ツールのお話をしたいと思います

ことの発端

弊社では、タイトルにもある通り「ジョーシス」と呼ばれるSaaS管理ツールを導入しています
https://www.josys.com/jp

ジョーシスでは以下の作業を行っています

  • アカウント管理
    • ライセンス管理や退社のxx時にアカウントを停止する等。これめちゃ便利ですね
  • デバイス管理
    • Intuneと連携してデバイスを管理

Intuneと連携し、デバイス管理を行っておりました。
ただ、Jamf ProとMicrosoft Intune間の条件付きアクセスの接続方法が変更となりました。
https://learn.jamf.com/ja-JP/bundle/technical-paper-microsoft-intune-current/page/Migrating_from_macOS_Conditional_Access_to_macOS_Device_Compliance.html#task-8435

新しいデバイスコンプライアンスに移行されると、Intune管理センターからデバイス情報が表示されなくなります。つまりジョーシスにデバイス情報を渡すことができなくなってしまいます。

そのため、JamfProにデバイス登録がされたら、ジョーシスに登録できるように構成を行う必要がありした。今回はそのお話です。

あくまで、私個人で考えて作ったのでいい方法があったら先輩方教えて下さいmm

弊社の環境

以下ツールを使い、実装しました

  • Microsoft Power Automate
    • なんかライセンスが余っていたので、有料版ライセンス。無料ライセンスでもできるのかしら...

構築を行うにあたり、参考にしたドキュメントは一番下に書いておきます

必要なもの

Power Automate経由ですべて作業を行うため、APIキーなどを発行する必要があります
今回は以下2つを準備しました。簡単にこのあとに設定方法をまとめます

  • Jamf Pro
    • Webhook
      • JamfProから情報を得るために必要なもの
  • ジョーシス
    • APIキー
      • デバイス登録を行うために、必要になるため

構築1(ジョーシスからAPIキーを取得)

  1. JOSYSにログインする
  2. [デベロッパー] > [REST API] > [作成]をクリック
  3. わかりやすい名前を入力し、[作成] をクリック
    4. (PowerAutomate用に作成したので、今回はforPowerAutomateとしました)
  4. クリック後、APIキーが表示されるので値を控えたら[閉じる]をクリック

    (APIをユーザーキーはあとからでも見れるよ)

まずはAPIキーを発行できたら100点です!

構築2(PowerAutomateでJosysのBearerTokenを取得)

APIキーを取得したたけでは、ジョーシス上でデバイス情報の作成はできません。

  1. ユーザーキー + APIキーの2つを使い、Bearer Tokenを取得
  2. 取得したトークンを使い、APIを叩く

まずは1の部分の実装を行います

PowerAutomateを開き、作成 > インスタントクラウドフロー をクリック
以下設定し、次に進む

名前:ジョーシスBearer Token 取得
このフローをトリガーする方法を選択します:フローを手動でトリガーする

アクションを追加するをクリックし、HTTPを選択し以下入力する

URL:https://developer.josys.it/api/v1/oauth/tokens
Method:POST
Hearders:Content-Type application/json
Body

{
  "grant_type": "client_credentials",
  "api_user_key": "ジョーシス上で表示されているユーザーキー",
  "api_user_secret": "準備1で取得したAPIキー"
}

HTTPでPOSTされ、JSON形式でBearer Tokenが返ってくるため以下アクションを追加します
・JSONの解析

スキーマー

{
    "type": "object",
    "properties": {
        "token_type": {
            "type": "string"
        },
        "expires_in": {
            "type": "integer"
        },
        "id_token": {
            "type": "string"
        }
    }
}

取得できたトークンをこのあとに記載するフローにも使用するため以下アクションを追加します
・変数を初期化する

名前:Token(お好きなものでいいよ)

先ほど初期化した変数にJSONで取得したTokenを追加するため、以下アクションを追加します
・文字列変数に追加

名前:↑上で設定した変数名
Value:雷マークを押すと、右側にJSONの解析が出てくるのでそこから「Body id_token」を選択する

このあとに作成するフローに、Token変数を使用するため、以下アクションを追加します
・Power App またはフローに応答する

ここまでできたら、下書きに保存するかテストを行いましょう!
こんな感じに、チェックが入っていたら完璧です◎

構築3(ジョーシスにデバイス情報を追加)

まずはJamfProでコンピュータが追加されたときに、Webhookを飛ばすように設定します
https://learn.jamf.com/ja-JP/bundle/jamf-pro-documentation-current/page/Webhooks.html

  1. Webhookを受信しjsonを解析
  2. Bearer Tokenを利用し、ジョーシスにデバイス登録

まずは1の部分の実装を行います

PowerAutomateを開き、作成 > インスタントクラウドフロー をクリック
以下設定し、次に進む
名前:ジョーシスにMacを登録する
このフローをトリガーする方法を選択します:HTTP 要求の受信時

manualというのが出来上がっているのでこちらをクリックします

要求本文のJSONスキーマーとあり、何をいれるねん!と思いますが以下を入れます
参考

{
    "event": {
        "alternateMacAddress": "string",
        "building": "string",
        "department": "string",
        "deviceName": "string",
        "emailAddress": "string",
        "ipAddress": "string",
        "jssID": "integer",
        "macAddress": "string",
        "model": "string",
        "osBuild": "string",
        "osVersion": "string",
        "phone": "string",
        "position": "string",
        "realName": "string",
        "reportedIpAddress": "string",
        "room": "string",
        "serialNumber": "string",
        "udid": "string",
        "userDirectoryID": "string",
        "username": "string",
        "managementId": "string"
    },
    "webhook": {
        "eventTimestamp": "epoch",
        "id": "integer",
        "name": "string",
        "webhookEvent": "ComputerAdded"
    }
}

このままでは、JSON形式では読み取れない&必要な情報だけを抜き出したいので、以下アクションを追加します。弊社では以下情報を取るようにしましたが、他に必要なものがあれば適宜追加します
・JSONの解析
Content:本文
Schema

{
    "type": "object",
    "properties": {
        "event": {
            "type": "object",
            "properties": {
                "deviceName": {
                    "type": "string"
                },
                "serialNumber": {
                    "type": "string"
                },
                "model": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                },
                "osVersion": {
                    "type": "string"
                }
            },
            "required": [
                "deviceName",
                "serialNumber",
                "model",
                "username",
                "osVersion"
            ]
        }
    },
    "required": [
        "event"
    ]
}

取得できたjsonをこのあとに記載するフローにも使用するため以下アクションを追加します
・変数を初期化する

名前:DeviceName
値:devicename

上記と同じ工程をserialNumber、modelも同様に追加します

先ほど初期化した変数にJSONで取得した値を追加するため、以下アクションを追加します
・文字列変数に追加

名前:↑上で設定した変数名
Value:Body osVersionとか・・・適宜。

上記と同じ工程をserialNumber、modelも同様に追加します

必要な情報を変数に入れれることができたら、先程工程2で作成したジョーシスのBearer Tokenを呼び出すフローを呼び出します

アクション:子フローを呼び出す
子フロー:工程2で作成したフロー名

ここまでできたら、最後はジョーシスに登録するためのリクエストを作成します!
アクション:HTTP 要求の受信時
URL:https://developer.josys.it/api/v1/devices
Method:POST
Hearders
|Content-Type|application/json|

| Content-Type | application/json |
| Authorization | Bearer (雷マーク > 工程2で作成したフロー名の中のbearer token |

Body

{
  "asset_number": "@{body('ParseJSON')['event']['deviceName']}",
  "device_type": "PC",
  "manufacturer": "Apple",
  "model_number": "@{body('ParseJSON')['event']['model']}",
  "model_name": "@{body('ParseJSON')['event']['deviceName']}",
  "operating_system": "macOS @{body('ParseJSON')['event']['osVersion']}",
  "serial_number": "@{body('ParseJSON')['event']['serialNumber']}"
}

「device_type」や、「manufacturer」は固定なのであえて取得はしていません。

ここまでできたら、必ず一度下書きを保存しましょう

保存後、再度フローを開き一番上にあるmanualをクリックします
HTTP URLが生成されますのでこれをJamfPro側のWebhookに追加します

WebhookURLが出てきたら完璧です◎

構築4 JamfPro側の設定

最後は、JamfProでPowerAutomateが作成したWebhookに情報を飛ばすようにします!

  1. JamfProにログインする

  2. [設定] > [グローバル] > [Webhook] をクリック

  3. 右上の[+新規] をクリックする

  4. 以下画像のように設定します

    ・ 表示名:PowerAutomate-Add-Macとか(
    ・ Webhook の URL:PowerAutomateで生成されたURL:

・認証タイプ:なし
・接続タイムアウト:そのまま
・リードタイムアウト:そのまま
・コンテンツ タイプ:JSON
・Webhook イベント:ComputerAdded

右下にある【保存】をクリックして保存します。

検証機があるようであれば、一度デバイス情報をJamfProから削除し再度追加してみて登録できるか確認してみましょう!
(検証機がないようであれば、ComputerCheckInなどで試してもOKです)

最後に

前職では、ZapierやWorkato、makeなどをのiPaaSを使ってみましたがPowerAutomateは初めてでした。最初は慣れませんでしたが、なれると楽です。

あとは、ジョーシスさん!弊社のような環境もあると思うのでIntune/JamfProから両方デバイスマスタとして利用できるようになってください!!(希望)

https://blog.intracker.net/archives/5361
Hikkyさんは、「ADE登録されたらmakeを使って、JOSYSにデバイスを登録する」という記事も公開されているようなので、「ADEに登録されたらPowerAutomateを使って、JOSYSにデバイスを登録する」もできるなーと思いました!

参考にしたドキュメント様

JamfPro関連
https://learn.jamf.com/ja-JP/bundle/jamf-pro-documentation-current/page/Webhooks.html
https://developer.jamf.com/developer-guide/docs/webhooks

ジョーシス
https://developer.josys.com/docs/ja/kzinidl39fpjk-overview

Discussion