
はじめに
株式会社hacomonoにて情シス(コーポレートIT)を担当しているさとこです。
入社時は5番目社員だった私もすっかりお局となり、いまは業務委託・派遣なども含めて500名超えの組織となりました。
組織を支えるコーポレートITとして日々あわあわしながらお仕事をさせていただいております。
貸与PCのMacBook率が90%を超えるhacomonoでは、MDMとしてJamf Proを利用しています。
これまでなかなか利活用まで辿り着けなかったのですが、最近設定を見直したり、アラート通知を出すよう仕組み化を進めています。
今回は「Netskopeと同期がとれないPCに対するアラート通知」についてまとめてみました。
hacomonoにおけるNetskopeの役目
フルリモート企業であるhacomonoにおいて、Netskopeはセキュリティの要となっているSaaSの一つです。
Netskopeを利用して例えば以下のような制限・監視を実施しています。
- 自社テナント以外のクラウドストレージへのファイルアップロード禁止
- 自社テナント以外のチャットツールへの投稿・ファイルアップロードの禁止
- 社内ストレージへの大量のファイルアップロードおよびダウンロードの監視
- 社内ツールへの秘密情報ファイルアップロードの監視
貸与しているMacBook PCは例外なくセットアップ時に自動でNetskope ClientをインストールするようJamf Proにて設定しています。
従業員自身でNetskope Clientをアンインストール・無効化することができないよう設定を強制化しています。
一時的措置であり、利用が終われば必ず再度有効化するよう案内してきました。
Netskopeが…動作してない…?
発端は社内問い合わせでしたが、こちらが設定しているNetskopeの制限がうまく動作していない端末があることに気がつきました。
Netskope Clientのインストール自体は完了していることをJamf Pro上では確認できているものの、Netskope管理コンソール側で同期を確認できていないという現象です。
PC起動時にNetskope Clientが自動立ち上がらない、不完全な状態でインストールされていることが原因のようでした。
Jamf Proを利用した端末へのアラート設定
当初はNetskope管理コンソール上から同期の取れていない端末リストを取得し、人力で個別連絡できないかを検討していました。
しかし、コーポレートITチームでリスト化から通知までを定常業務とするには作業負荷も高いため、Jamf Proを利用してアラート表示と自己解決ができないか?について挑戦してみることにしました。
どのように設定したのか、順に記載します。
Step1. 拡張属性の作成
設定 > コンピュータ管理 > 拡張属性を設定します。
「Netskopeのクライアントが保持している設定更新日時(Config Updated)を取得する」ような以下のスクリプトにて拡張属性を追加しました。
#!/bin/bash CONFIG_PATH="/Library/Application Support/Netskope/STAgent/nsconfig.json" if [ -f "$CONFIG_PATH" ]; then # statコマンドで最終更新日(Unix Time)を取得 LAST_MOD=$(stat -f "%m" "$CONFIG_PATH") if [ -n "$LAST_MOD" ]; then NOW=$(date +%s) # 差分(秒)を計算 DIFF_SECONDS=$(( NOW - LAST_MOD )) # 日数に変換(小数点以下切り捨て) DIFF_DAYS=$(( DIFF_SECONDS / 86400 )) echo "<result>$DIFF_DAYS</result>" else # statが何らかの理由で失敗した場合 echo "<result>-2</result>" fi else # ファイルが見つからない場合 echo "<result>-1</result>" fi
Step2. スマートコンピュータグループの作成
今回、アラートを出すのは「7日以上」同期が取れていない端末と定義しました。
それに該当する端末をスマートコンピュータグループを用いてピックアップできるよう設定します。
クライテリアにてStep1で作成した拡張属性を選択し、それが7以上という設定にしています。
Step3. JamfHelper起動スクリプトの作成
JamfHelperを用いてアラート表示を行うため、対応するスクリプトを作成します。
設定 > コンピュータ管理 > スクリプト にて新規作成しました。
同期できていない日数をアラート内に記載します。
また、アラートを確認後、従業員側への詳細の確認・復旧手順はNotionに記載したため、HELP_URL にそのページのURLを記載しました。
#!/bin/bash # 1. パスの指定 CONFIG_PATH="/Library/Application Support/Netskope/STAgent/nsconfig.json" HELP_URL="手順書Notionリンク" # 2. 現在ログイン中のユーザー情報を取得 current_user=$(stat -f "%Su" /dev/console) user_id=$(id -u "$current_user") if [ -f "$CONFIG_PATH" ]; then LAST_MOD=$(stat -f "%m" "$CONFIG_PATH") if [ -n "$LAST_MOD" ]; then NOW=$(date +%s) DIFF_SECONDS=$(( NOW - LAST_MOD )) DIFF_DAYS=$(( DIFF_SECONDS / 86400 )) else DIFF_DAYS="?" fi # 3. メッセージの設定 TITLE="アラート" MESSAGE="Netskopeが7日以上同期できていません。 Netskope状態確認/対応お願いします! 確認/対応方法は、 [check] クリックにて内容必ず確認してください。 " # 4. 表示項目の設定 launchctl asuser "$user_id" "/Library/Application Support/JAMF/bin/jamfHelper.app/Contents/MacOS/jamfHelper" \ -windowType utility \ -title "$TITLE" \ -heading "Netskope ${DIFF_DAYS}日間 同期なし" \ -description "$MESSAGE" \ -icon "/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertStopIcon.icns" \ -button1 "Check" \ -defaultButton 1 # 5. ボタンが押されたらURLを開く # 1ボタンの場合、クリックされると次の行へ進むのでそのまま open を実行します echo "User clicked check button. Opening URL..." launchctl asuser "$user_id" open -a "Google Chrome" "$HELP_URL" echo "Alert processed for user: $current_user (Diff: ${DIFF_DAYS} days)" else echo "Error: Netskope configuration file not found at $CONFIG_PATH" exit 1 fi exit 0
Step4. ポリシーの作成
最後に、実際にターゲットにアラート表示を出すポリシーを設定します。
実行頻度は Once every day に設定しました。
「スクリプト」にはStep3で作成したスクリプトを設定します。
「Scope」にて、Step2で作成したスマートコンピュータグループを設定して完了です。
実際のアラート画面
実際に表示されるアラートが以下の通りです。
画像はサンプルなので 0日間 となっていますが、7日以上連続起動があればどのくらい同期がとれていないか?についてアラートが出るようになります。
Checkをクリックすると、同期するための確認ポイントや復旧手順の詳細を記載したNotionページが開かれます。

まとめ(今後の話)
検証する中で、Netskope Clientのアンインストール&インストールが必要なケースが多く見られました。
アンインストール用のパスワードを共有しない、だれでも簡単に操作できる(コマンドを打ったりしない)ことを考えてこちらもJamf ProのSelf Service利用を検討中です。
全台、確実にNetskopeをインストールさせ、常時起動を目指してこれからも対応を進める予定です。
💁 関連記事