はじめに

自分の勤務先ではJumpCloudを使って「外部ストレージの利用を禁止するポリシー」を全端末に適用していますが、業務の関係上USBメモリやCD/DVDドライブの利用が必要な場合があり、一時的にポリシーを解除→再適用する運用を行っています。

ポリシー解除が必要な作業として「インターネットに接続不可なPCのWindows Defenderウィルス定義ファイルを更新する」作業がありますが、この作業はほぼ毎日発生し、その度にポリシーの付け外しが必要になります。

ポリシーの付け外しに必要な作業時間自体は短いのですが、ポリシーを解除しないとその後の作業が進められないことから基本的に即時対応が必要になり、心理的な負担が地味に大きい割り込みタスクだったので、Slack Botを作って半自動化してみました。

要件

ワークフローの概要

Slack Botを使ったワークフローの概要は以下の通り

sequenceDiagram
    participant 利用者
    participant SlackBot as Slack Bot
    participant SlackDB as Slack Database
    participant JumpCloud
    participant App管理者 as App Admin
    participant システム運用管理者 as Ops Manager

    利用者 -->> SlackBot: リンクを開いて呼び出し
    SlackBot -->> SlackDB: Req: 利用者に紐づくデバイス一覧を取得
    SlackDB -->> SlackBot: Res: 利用者に紐づくデバイス一覧を取得
    SlackBot -->> 利用者: モーダルを返す
    利用者 -->> SlackBot: モーダルに情報を入力して提出
    SlackBot -->> App管理者: 承認・否認ボタンを送信

    alt 承認
        App管理者 -->> SlackBot: 承認ボタンを押下
        SlackBot -->> JumpCloud: 指定されたデバイスのUSB制限ポリシーを解除
        SlackBot -->> 利用者: ロック解除メッセージを送信<br/>利用終了 or 作業中断ボタンを同時に送信
        SlackBot -->> SlackBot: 絵文字(:taiochu:)を起点メッセージに追加
        alt 利用終了
            利用者 -->> SlackBot: 利用終了ボタンを押下
            SlackBot -->> JumpCloud: 指定されたデバイスのUSB制限ポリシーを再付与
            SlackBot -->> 利用者: ロック再付与メッセージ、記録完了ボタンを送信
            利用者 -->> SlackBot: 記録完了ボタンを押下
            SlackBot -->> システム運用管理者: システム運用管理者確認完了ボタンを送信
            システム運用管理者 -->> SlackBot: システム運用管理者確認完了ボタンを押下
            SlackBot -->> 利用者: 確認完了メッセージを送信
            SlackBot -->> SlackBot: 絵文字(:done:)を起点メッセージに追加
        else 作業中断
            利用者 -->> SlackBot: 作業中断ボタンを押下
            SlackBot -->> JumpCloud: 指定されたデバイスのUSB制限ポリシーを再付与
            SlackBot -->> 利用者: ロック再付与メッセージを送信
            SlackBot -->> SlackBot: 絵文字(:no_entry:)を起点メッセージに追加
        end
    else 否認
        App管理者 -->> SlackBot: 否認ボタンを押下
        SlackBot -->> 利用者: 否認メッセージを送信
        SlackBot -->> SlackBot: 絵文字(:no_entry:)を起点メッセージに追加
    end