🙆‍♀️

Jamf PROのWebhook通知をLambda経由でSlackに流す

2023/06/11に公開

Jamf PROのWebhook機能知っていましたか?

わたしは最近知りました。
プロファイル外れた端末とか検知したいよねーって話していて、調べたらWebhook機能があることを知りました。
ウキウキで、SlackのWebhookをJamfに設定したら全然通知が流れませんでした😕
※ちなみに、PCでプロファイル外れた端末はSmartComputerGroupのLast Check-inで一定時間経ったなどで検知するしかなさそうです
※SlackのWebhookの作成方法は割愛します

API GatewayをトリガーにLamda経由で整形する必要がありました

この記事を参考にしました。
http://www.whiteboardcoder.com/2017/12/aws-lambda-for-forwarding-webhook-to.html?m=0

ランタイムはNode.js 18.xを選択

他はデフォルトのままです。

API Gatewayをトリガーに設定

ソースはこんな感じになりました

import https from 'https';

const GOOD_EVENTS = [
  'JSSStartup',
];

const DANGER_EVENTS = [
  'JSSShutdown',
];

export const handler = async(event) => {
  const body = JSON.parse(event.body);
  const event_name = body.webhook.name;
  const event_category = body.webhook.webhookEvent;
  const user_name = body.event.realName || 'No username';
  const user_email = body.event.emailAddress || 'No email';
  const serial_number = body.event.serialNumber;

  const event_color = GOOD_EVENTS.includes(event_category) ? 'good' : DANGER_EVENTS.includes(event_category) ? 'danger' : 'warning';

  const post_data = JSON.stringify({
    'attachments': [
      {
        'color': event_color,
        'fields': [
          {
            'title': `${event_name}`,
            'value': `シリアル番号: ${serial_number}\n氏名: ${user_name}\nメールアドレス: ${user_email}`,
            'short': false
          }
        ],
      }
    ]
  });

  const post_options = {
    host: 'hooks.slack.com',
    port: '443',
    path: '/services/SLACK_WEB_HOOK_ID',
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Content-Length': Buffer.byteLength(post_data)
    }
  };
    
  const req = https.request(post_options, (res) => {
    let responseData = '';

    res.on('data', (chunk) => {
      responseData += chunk;
    });

    res.on('end', () => {
      console.log(responseData);
    });
  });

  req.on('error', (error) => {
    console.error(error);
  });

  req.write(post_data);
  req.end();

  return {
    statusCode: 200,
    body: JSON.stringify({ message: 'Success' }),
  };
};

GOOD_EVENTSDANGER_EVENTSに適宜イベント名を足してください!

実際の通知

Webhookをインストールしたチャンネルに、りんごちゃんがお知らせしてくれるようになりました!

※通知テストはInventoryCompletedComputerCheckInなどがオススメ

Discussion