はじめに
セキュリティ機器等にO365サービスのIPアドレスを登録する時の確認方法が Microsoft公式ページ にて公開されています。
今回、Win10なPCとIFTTTとWebhookとGmailを使い、当該IPアドレスの変更を検知して通知メールを飛ばすようにしてみました。
※IFTTTとWebhookとGmailの登録及び連携は済んでいるものとします
※以下、常時ログインしているユーザ名を『foo』とします
IFTTTの設定
- 公式ページ内のサンプルスクリプトを取り込み、適当に保存します。
例:C:\Users\foo\Documents\Office365IPCheck.ps1 - PowerShell から上記スクリプトを実行します。
- 上記スクリプトの実行結果
C:\Users\foo\AppData\Local\Temp\endpoints_clientid_latestversion.txt
を開いて、一行目の文字列をメモっておきます。
これが後程必要となる ClientRequestId となります。 - IFTTTで新規アプレットを作成します。
this には『Webhooks』を選択
Event Name には『トリガー名(半角ANKで)』を入力
that には『Gmail(Send an email)』を選択
To address には『通知先メアド』を入力
Body には次の内容をWhat: {{EventName}}<br> When: {{OccurredAt}}<br> Old Version: {{Value1}}<br> New Version: {{Value2}}<br> <a href="https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId">https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId</a>
Attachment URL には次の内容をhttps://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId
記入します。 - アプレットを保存します。
PowerShellスクリプトの変更
- IFTTT 上の Webhooks のページにある『Documentation』をクリックし、『Your key is:』の値をメモします。
- PowerShellスクリプトの最後の方の、『# TODO』行と『}』行の間に、次の行を追加します。
Invoke-RestMethod -Uri "https://maker.ifttt.com/trigger/上で決めたトリガー名/with/key/先程メモったキーの値" -Method Post -Body ( @{"value1"="$lastVersion";"value2"=$version.latest} | ConvertTo-Json) -ContentType 'application/json'
- PowerShellスクリプトを保存します。
監視タスクの追加
- 監視タスク実行時に窓が表示されるのを防ぐために、キック用スクリプトを次のような内容で作成します。
例:C:\Users\foo\Documents\task-scheduler.jswsShell = WScript.createObject("WScript.Shell"); retCode = wsShell.Run("\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -File \"" + WScript.Arguments.Item(0)+"\"",0,true); WScript.Quit(retCode);
- タスクスケジューラで監視タスクを作成します。
- トリガータイミングは適当に(毎時とか毎日とか毎週とか)
- 操作→プログラムの開始
- プログラム名には、『task-scheduler.js』を入力
- 引数には、PowerShellスクリプト名をダブルクォートで囲って設定
例:”C:\Users\foo\Documents\Office365IPCheck.ps1″ - 開始オプションに、PowerShellスクリプトの保管場所を指定
例:C:\Users\foo\Documents\
- 監視タスクを保存します。
動作テスト
- PowerShellスクリプトの実行結果ファイル
C:\Users\foo\AppData\Local\Temp\endpoints_clientid_latestversion.txt
を削除します。
本ファイルを削除することにより、PowerShellスクリプトの実行時に『IPアドレスが更新された』と判断されます。 - タスクスケジューラで設定したタイミングでメール通知が届けば成功です。
2019.03.22追記:本日、GmailとIFTTTの連携を停止する通知がGoogleから届きました。
いまのところどうしようもないみたいなので、回避策を記します。
Zapierでの実装について
- Zapierのアカウントを作成し、ログインを済ませておきます
- 次のURLに移動します
https://zapier.com/apps/gmail/integrations/webhook - “Send an email from Gmail when a webhook is received” の『Try It』をクリックします
- “Catch Hook”画面で『Continue』をクリックします
- URLが表示されるのでコピーしておき、『Ok, I did this』をクリックします
- ps1スクリプトを変更します
- Invoke-RestMethod -Uri での飛び先をIFTTTからZapierの先程コピーしたURLに変更
- スクリプトをキック
- Zapier画面で待機
問題無ければ、数分後には5.の画面に『Continue』ボタンが現れるので、クリックします
- Gmail / Send Email 画面で『Continue』をクリックします
- Select Gmail Account画面で(連携未設定の場合は『Connect an Account』を押して連携設定後)アカウントを選択し、『Continue』をクリックします
- Set up Gmail Email画面で、To:やFrom:、Subject:等を設定します
- Bodyは次のように書きます
Old Version: New Version: https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId
- 『Old Version:』の右をクリックして、画面右側の『+』をクリック、『Value1』を選択します
Old Version: の右に『Step1:値』が挿入されます - 『New Version:』の右をクリックして、画面右側の『+』をクリック、『Value2』を選択します
Old Version: の右に『Step2:値』が挿入されます - Attachmentには次の値を投入します
https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId
- 入れ終わったら、『Continue』をクリックします
- テストボタンが出るので、クリックします
- 無事にメールが届いたら、『Finish』をクリックします
2019.04.15追記
バージョンチェックファイルが存在するのに、Test-Pathにて『存在しない』扱いになるケースがあるようです。waitを挟んでも、複数回チェックしても、駄目な時は駄目な感じ。実害は無いとは思うのですが、回避策等について現在確認中です。
2019.05.07追記
IPアドレスは基本的に月末に更新されるようです。
このときにバージョンチェックファイルendpoints_clientid_latestversion.txtの更新がうまく行かない場合は、次の図の①の部分を見直してみて下さい。
ログインアカウントのパスワードを変更したりすると、ここの部分で引っかかったりもするようです。
テスト時の実行アカウントと、スケジュール実行アカウントの権限の差が原因の場合もあります。
ファイル所有者名の確認
dir /q バージョンチェックファイル名
ここで駄目な場合は、②の部分を触るとうまく行くようになる場合があります。
それでも駄目な場合は、スケジュール自体を作り直してみて下さい。