Power Automate(クラウド)とPower Automate for Desktop(PAD)を連携させ、Power Automateから入力したデータをPAD経由で SOAR の APIに渡してみた

以前、Power Automate(クラウド)から Power Automate for Desktop にてあらかじめ作成しておいた XSOAR のインシデント作成タスクを呼び出したことがありました。

しかしその時は、Power Automate(クラウド)から何もデータを渡していなかったので今回は、Power Automate(クラウド)から入力されたデータを基にXSOAR のインシデントを作成する形でタスクを呼び出してみました。

1.Power Automate for Desktopで変数などの準備

Power Automate(クラウド)からデータを受け取る場合、Power Automate for Desktop側であらかじめ入出力変数を設定しておかなければなりません。

そこで今回は以下の2つを入力用変数として作成しました。
・Detail
・Date

作成の方法ですが、Power Automate for Desktopのフロー作成画面に入ると右ペインに「入出力変数」の設定があるので、そこから「入力」を選択します。

Power Automate for Desktop – 入出力変数設定1

すると以下のようなポップアップが表示されるので、画面に表示されている項目を入力していきます。(変数名は「Detail」を設定)

Power Automate for Desktop – 入出力変数設定2

なお、これらの項目のうち、「外部名」に設定した値が、後からPower Automate(クラウド)で設定する際に設定画面に表示されます。

同様に「Date」という変数も設定したのが以下の状態です。

Power Automate for Desktop – 入出力変数設定3

この後、実際にXSOARのAPIを実行している設定(上記画面の「Webサービスを呼び出します」)を開いて、先ほど作成した変数を下図の赤線の通り設定します。

Power Automate for Desktop -「Webサービスを呼び出します」

なお、XSOAR上では、”test %Date%”がインシデント名、”Detail”がそのインシデントを開いた時の Detail の設定項目になります。

2.Power Automate(クラウド)でフロー作成

1.のPADの設定を行いセーブしたら(!)、Power Automate(クラウド)でのフローの作成に入ります。

フロー作成画面で”Desktop”で検索をかけると「Run a flow build with Power Automate for desktop」というアクションがあるので、それを選択します。

Power Automate(クラウド)1

そしてその設定画面を開くと、下図のとおり一番上に「Desktop Flow」という項目があるので、その下のプルダウンから、先ほどPAD上で作成したフロー名(ここでは「XSOAR連携 – データ受信」)を選択します。

すると、その下にある「Advanced parameters」のプルダウンを開いた際に、先ほどPADで設定した変数(外部名)が表示されるので、それぞれチェックボックスで選択します。

Power Automate(クラウド)2

そして、それそれの変数に対して渡したいデータをテキストフィールドに書き込んでいきます。

Power Automate(クラウド)3

ここでは「XSOAR Detail」には固定文字の”TEST”そ、「XSOAR Date」にはその時の日付を設定しています。

3.Power Automate(クラウド)のフローを実行

これで準備が整ったので、先ほど作成したPower Automate(クラウド)のフローを実行します。

Power Automate(クラウド)フロー実行1

どうやらうまくいったようなので、念のため、Power Automate(クラウド)のフロー実行結果を確認してみると、ちゃんと変数が設定されて正常終了しているようでした。

Power Automate(クラウド)フロー実行2

4.XSOAR側の処理状況を確認

その後、XSOAR側で正常にインシデントが登録されているか確認してみました。

するとインシデント名のところには赤線の通り、%Date%で渡した今日の日付の入ったものが登録されていました。

XSOARコンソール1

また、そのインシデントの中を見てみると、Detail の部分には%Detail%で渡した”TEST”という文字が登録されていることも確認できました。

XSOARコンソール2

Power Automate を無料で試す方法があると聞いたので申請してみた

会社で Teams と Power Automate を利用しているのですが、自宅でもこれらを使っていろいろ自動化のテストしてみたいと思っていました。

そこでインターネットで情報を漁っていたところ、Microsoft 365 開発者プログラムに参加すれば無料で使えると聞いたので、以下のサイトから申請してみました。

1.Microsoft 365 開発者プログラムに参加し、onmicrosoft.comのアカウントを取得

Microsoft 365 開発者プログラム
https://developer.microsoft.com/en-us/microsoft-365/dev-program
Microsoft 365 Developer program top

上記画面の「Join now」から登録処理を進めます。

すると、以下の画面が表示され、左上の方に「xxx@xxx.onmicrosoft.com」というアカウントが発行されていることが確認できました。

Microsoft 365 Developer program

このonmicrosoft.comのアカウントを使うと、以下の Power Apps を無料で利用申請することができるようなります。

2.Power Appsを無料で開始する

Power Apps 無料で開始する
https://powerapps.microsoft.com/ja-jp/landing/developer-plan/

上記サイトにアクセスすると「無料で開始する」というボタンがあるので、それをクリックすると以下の画面が表示されます。

Power Apps 開発者向けプラン(Microsoft)

その後、処理をすすめると、以下の画面が表示されます。

Power Apps画面(Microsoft)

この画面の左ペインに表示されている「Power Platform」を選択することにより、 Power Automateや Teams など利用可能になります。

Power Automate を利用して Teamsのチャネルに登録されたメッセージをSlackに送信してみた

Power Automate を利用して、Teams の特定のチャンネルに投稿されたメッセージを Slack に送信する処理を作成してみました。

なお、Power Automate については、Microsoft 365 Developer Program を使ってテストを行なっています。このあたりの話は別のブログで記載したいと思います。

動作前提

Teams にて「インシデント対応」というチームの作り、その中の「一般」チャネルに何かメッセージが入力されたらそれを検知し、Slackのその内容を送信する想定です。

Microsoft Teams

フロー作成

Power Automateにてフローを作成します。全体のフローは以下の通り6ステップとなっています。

Power Automate フロー全体

単純に Teamsのメッセージを受け取って Slack に投げるだけなのでもっと少ないステップになりそうですが、HTMLをプレーンテキストに変換し、配列を文字列にし、さらに不要なカッコや改行を取り除いて Slackに送信しているのでこうなりました。

このあたりの処理は以外と難しかったので、あとでこのブログに記録の為に追記しておこうと思います。

以下、細かな処理を記載しておきます。(2023.12.3)

「変数を初期化する Teamsメッセージ」では、手前のタスクでプレーンテキスト化した Teamsのメッセージを変数 teams_array に設定しています。
なおこのときプレーンテキストが(なぜか)配列の形”[“と”]”に囲まれているので、Typeとしては Arrayとしています。

Power Automate タスク詳細1

「変数を配列から文字列にする」では replace()関数をつかって、先ほどの teams_array の中身のTypeをArray から Stringの形にし、変数 teams_string に設定しています。

Power Automate タスク詳細2

「変数を初期化する 改行コード」では、次のタスクで利用する為に改行コード”\n”を LFcode という変数に設定しています。

Power Automate タスク詳細3

最後に「メッセージの投稿」では、変数 teams_string の中の改行コード”\n”を replace()関数を使用し(空白に)置き換えています。

Power Automate タスク詳細4

動作結果

以下が Slack の general チャンネルに Power Automateからメッセージを送信した結果です。

画面上の最初の方は Teams のメッセージを受け取ってそのまま Slackに投げたので HTMLとなっていますが、最後の方ではプレーンテキスト化し、”[“や改行”¥n”を取り除いてシンプルに URLだけが表示されるようになっています。

Slack – general

Power Automate から SOAR のWeb APIをたたいてみた

XSOARには Web APIが用意されていて、コマンドプロンプトから以下のようなコマンドを実施すると、”palybookId”で指定したプレイブックを起動したり、”details”で指定した情報をインシデント情報として記録できます。(プレイブックのインプットデータとしても活用可能)

% curl -kv 'https://XX.XXX.XX.X:XXXX/incident' -X POST -H 'Authorization: XXXXXXXXXX' -H 'Accept: application/json' -H 'Content-Type: application/json,application/xml' -d '{"name": "test 20231201","type": "Access","owner": "admin","details": "http://k2-ornata.com/%22,%22playbookId": "59daa471-0cc5-495a-8567-1a252fd020c6"}'

この情報を元に Power Automate for Desktopの「Webサービスを呼び出します」を使って、同じ様に XSOAR にアクセスしてみました。

1.まずはChatGPTに相談

curlのコマンド情報からから Webリスクエストを作成してくれるサイトはいくつかあるようですが、どれも今一つだったので、そういえばと思い ChatGPT に相談してみました。(別のコマンドを相談した時のものですが。)

ChatGPT

上記は少し違うコマンドについて相談したときのものですが、かなりいい感じで答えてくれていることがわかります。

2.Power Automateを設定

そこで 上記の ChatGPT の回答も踏まえながら、以下の通り各パラメータを設定してみました。

Power Automate – Webサービスを呼び出します

3.レスポンスエラーへの対処(400, 403)

しかしながらすんなりとはいかず、SOARからの以下のようなレスポンスエラーが頻発しました。

{"id":"bad_request","status":400,"title":"Bad request","detail":"Request body is not well-formed. It must be JSON.","error":"unexpected EOF","encrypted":false,"multires":null}

こういったエラーが XSOAR から返ってくるようであれば、以下の3点を見直してみる必要があります。

<正しくWeb APIにアクセスするポイント>
1.Authorization: に認証情報が正しく設定されているか?
2.「要求本文」に記載したデータが正しく JSON フォーマットで描かれているか?
3.「詳細」設定にて以下の図の通り「要求本文をエンコードします」がOFFになっているか?

Power Automate – Webサービスを呼び出します(詳細)

特に2.のJSONフォーマットはかなりシビアな感じなので、念入りに確認する必要があります。たとえば以下のように同じ”でくくっているように見えて実は”になっていたりするので要注意です。

"59daa471-0cc5-495a-8567-1a252fd020c6”

これらを修正することで、ようやく正常に XSOAR にアクセスすることができました。

Power Automate(無償版)で作成したフローを定期的に実行する

以下サイトを参考にさせていただき、Power Automate(無償版)で作成したフローをWindows のタスクスケジューラで自動起動させてみました。

参考サイト
[Power Automate Desktop]名前を指定してフローを実行するPowerShellスクリプト(初心者備忘録)
https://www.ka-net.org/blog/?p=13647

【DX】PowerAutomate Desktop無料版を自動定期実行してみた!(株式会社エアリー)
https://note.com/airily_inc/n/n6ab8b688d4ad?utm_source=pocket_saves

基本的に上記サイトのとおり実施すれば、Power Automateのフローを指定した時間や定期的に起動させることができますが、一点注意事項がありましたので記載しておきます。

外部入出力変数を設定している場合

フローに対して外部からデータを渡している場合、タスクスケジュールで Power Automateのフローを自動起動させたとしても、以下のように入出力変数の確認画面が表示され止まってしまいます。

Power Automate – 外部入出力変数

この回避のために入出力変数を機密情報扱いにしたり、ピン留めしたししてみましたがそれでは回避できないようです。

したがって、今のところ自動起動させたいフローがあった場合、入出力変数は使わない(直接アクションに埋め込むか、ファイルなどから読み込むか)ようにするしかないかと考えています。

Power Automate で Splunkの操作を自動化してみた

Power Automate のブラウザ操作機能で実際に Splunk のWeb画面をどこまで操作できるか試してみました。

試してみる前は Power Automateのレコーダー機能で何も考えずにできてしまうのではないかと楽観視していましたが、そうすんなりいかないことがわかりました。

ただし、コツさえつかめば比較的簡単に解決できるようなので、Power Automateはやはり自動化しやすいなという思いを新たに持ちました。

1.ブラウザ操作をレコーダーで記録

まずざっとPower AutomateのレコーダーでSplunkの操作を記録した結果は以下の通りです。

Power Automate – レコーダー記録直後

この中からまずは不要そうなアクションを削除します。具体的には赤枠でかこった部分が不要と思われる部分です。

2.とりあえず動かしてみる

不要そうなアクションを削除した後とりあえず動かしてみると、まず以下の赤枠で囲われた部分で処理がエラーになりました。

Power Automete – Error 1

3.エラー部分のUI要素を編集する

具体的には、ログの検索時間を「最新24時間」から「全時間」変えるところで失敗しています。

Splunk 自動化失敗箇所1

そこで、Power Automateの右端のアイコンメニューの内、上から2つ目の「UI要素」を選択し、「Anchor ‘全時間’」となっている部分を確認することにします。

Power Automate – UI要素

「Anchor ‘全時間’」部分から右クリックでメニューを表示させ、そこから「編集」を選びます。

Power Automate – UI要素 – 編集

すると以下の通り複数の要素が選択されている状態になっていますので、とりあえず一番したの「Anchor ‘全時間’」だけ選択された状態にします。

Power Automate – UI要素2

結果として下部の「セレクターをプレビューする」が「a[Text=”全時間”]」とシンプルな形になります。

Power Automate – UI要素3

これで保存すると、処理を流したときにうまく「全時間」を選択してくれるようになりました。

4.再度動かしてみる

そこで再度動かしてみましたが、今度はテキストフィールドを選択するところでエラーになりました。

Power Automate – Error 2

おそらくDiv の後ろの “id-“が動的なUI要素として生成されているからではないかと思われます。

5.エラー部分の動的なUI要素に対処する

具外的にはSplunk画面の以下の赤枠部分のテキストフィールド選択が失敗しています。

Splunk 自動化失敗箇所2

そこで、エラーが出ていたアクションの編集画面を右クリックで表示し、以下の画面のようにUI要素として「Text area ‘サーチ’」を選択します。

Power Automate – UI要素の変更

こうすることで以下のとおりアクションの表示が変わりますが、よく見てみると「Test area ‘サーチ’に”を入力する」となっており、テキストフィールドに入力したはずのSPL文が入っていません。

Power Automate – 入出力変数1

そこで右上の赤枠の通り、「入出力変数」から「入力」を選択し新しい入出力変数としてSPL文を設定しておきます。

Power Automate- 入出力変数2

この入出力変数(NewInput)を設定してくことで、下図の通り先ほどのアクションの編集画面から入力値として NewInput を選択できるようになります。

Power Automate- 入出力変数3

これで、NewInput の値を変えるだけで、いろいろなSPLを検索することができるようになりますね。

Power Automate – 完成

6.自動化成功

最終的に最後まで自動化した結果が以下の通りです。

Splunk自動化結果

SPL で表示した結果をCSV でローカルに保存するところまで自動化できました。

Power AutomateからVirus Total にアクセスするPythonを呼び出して入力したサイトの安全性を確認してみた

最近、Power Automateをいろいろといじり始めていますが、今回は、Power Automateから Virus TotalにアクセスするPythonプログラムを呼び出してみましたので、そのときの設定を記録しておきます。

なお、処理の流れは以下の通りです。

1.入出力変数(NewInput)にVirus Totalで評価するURLを設定
2.NewInputの内容をinput.txtに書き込み
3.Virus TotalにアクセスするPythonプログラムを呼び出し
  (input: input.txt, output:output.txt, scan_result.json)
4.Virus Totalでの評価結果をoutput.txtファイル等から読み込み
5.Gmailをつかって評価結果をメール送信

Power Automate全体フロー

以下、フローを作成していて苦労した点を少し説明していきます。

2.NewInputの内容をinput.txtに書き込み

Power Automateの機能メニューから「テキストをファイルに書き込む」を選択した際に、エンコードがデフォルトでUTF-8になっていましたが、それだとなぜが Pythonで読み込んだときに半角が全角になってしましいました。

そこでエンコードの設定を「UTF-8」から「システムの規定値」に変えたところ、半角のままpythonで処理することができました。

Power automate – テキストをファイルに書き込む

3.Virus TotalにアクセスするPythonプログラムを呼び出し

正直このPythonプログラムは ChatGPTにお願いして大部分を作成してもらいました。

手直ししたのは、「json_response[‘positives’]」を「json_response[“positives”]」を書き換えたくらいです。

あとはそのまま動いてくれました。

import requests
import json

# VirusTotalのAPIキーを設定します。
api_key = 'virus totalのapiキーをここに設定'

# VirusTotalのURLスキャンAPIエンドポイントを設定します。
url_scan_endpoint = 'https://www.virustotal.com/vtapi/v2/url/scan'

# ファイルを読み込みモードで開きます。
with open('c:\\tmp\\input.txt', 'r') as file:

# ファイルから文字列を読み込み、調査したいURLを設定します。
url_to_check = file.read()
print(url_to_check)

# APIリクエストのパラメータを設定します。
params = {'apikey': api_key, 'url': url_to_check}

# URLスキャンAPIにリクエストを送信します。
response = requests.post(url_scan_endpoint, data=params)

# レスポンスをJSON形式で取得します。
json_response = response.json()

# スキャンIDを取得します。
scan_id = json_response["scan_id"]

# VirusTotalのURLレポートAPIエンドポイントを設定します。
url_report_endpoint = 'https://www.virustotal.com/vtapi/v2/url/report'

# APIリクエストのパラメータを設定します。
params = {'apikey': api_key, 'resource': scan_id}

# URLレポートAPIにリクエストを送信します。
response = requests.get(url_report_endpoint, params=params)

# レスポンスをJSON形式で取得します。
json_response = response.json()

# URLが安全かどうかを判断します。
if json_response["positives"] > 0:
    text_to_write = 'The URL is not safe.'
else:
    text_to_write = 'The URL is safe.'

# ファイルを書き込みモードで開きます。
with open('output.txt', 'w') as file:
    # 文字列をファイルに書き出します。
    file.write(text_to_write)

# レスポンスをファイルに保存します。
with open('scan_result.json', 'w') as outfile:
    json.dump(json_response, outfile)

5.Gmailをつかって評価結果をメール送信

ここでは、Gmailサーバにアクセスする為のポート番号の設定や、2段階認証していたのでアプリパスワードの設定に少してこずりました。

Power AutomateからChatGPTが生成したpythonを実行させる

ChatGPT でpythonを自動生成してくれるので、それをPower Automateで自動的に動かせないかと思い、試してみました。

もしかしたらこれを一歩進めて、Power Automateから ChatGPT を呼び出してpython を自動生成させ、それをさらにPower Automateから自動実行させるみたいなことができるかもしれませんねー。

1.Power Automate Desktop(PAD)を起動

Windows 10 にインストールしたPower Automate Desktopを起動します。

Power Automate Desktop画面

2.PADでフローの作成開始

「+新しいフロー」を選択し、フロー名を設定後、「作成」を選択します。

Power Automate Desktop画面

3.ChatGPT で生成したPythonをファイルに保存

ChatGPT で生成したPythonをコピペしてファイルに保存しておきます。

保存したPythonプログラムを実行させるには、Windows 10に Pythonの実行環境とPythonプログラムの中で利用しているライブラリがインストールされている必要があります。

4.アプリケーションの実行を選択

ファイルに保存されているPythonプログラム(*.py)を実行する為、
左ペインの「アクション」から「システム」-「アプリケーションの実行」
を選択します。

Power Automate Desktop画面

5.アプリケーションとしてpythonを指定

「アプリケーションの実行」設定画面にて以下の通り設定します。

アプリケーションパス:python
コマンドライン引数:pythonプログラム名
作業フォルダー:pythonプログラム名を置いているディレクトリ

Power Automate Desktop画面

設定後、「保存」ボタンを押すと以下の画面となります。

Power Automate Desktop画面

6.Pythonの実行結果をメモ帳で表示

pythonの実行結果は作業フォルダーにファイルとして保存されるようになっている為、それをメモ帳で表示する処理を以下のとおり追加してみました。

Power Automate Desktop画面

Power Automate for Desktopを利用して、Web操作を自動化してみた

最近?無償化されて注目の Microsoft Power Automate for Desktop(PAD) を初めて使ってみました。

その機能の中でも自分が操作したオペレーションを記録して、それを自動実行してくれる機能がありましたので、実際に使ってみました。

1.新しいフローの作成

MicrosoftのサイトからPower Automate for Desktop(PAD)をダウンロード&インストールしたら起動します。

すると以下の画面が表示されます。

Power Automate for Desktop起動画面

この画面から赤枠で囲った「+新しいフロー」をクリックします。

2.新しいフローに名前をつける

「+新しいフロー」をクリックすると以下の画面が表示されるので、フロー名を適当につけ「作成」ボタンを押します。

Power Automate for Desktop フローを作成

3.レコードボタンを押す

すると以下の画面が表示され、赤枠で囲った部分にレコードボタンがありますのでこれをクリックします。

Power Automate for Desktop 記録開始1

すると、「レコーダ」というポップアップで以下の画面が表示されますので、さらにこのポップアップの下枠で囲った「記録」ボタンをクリックします。

Power Automate for Desktop 記録開始2

これで通常はWeb操作の記録が始まりますが、初回の場合は以下の警告がでますので、「拡張機能の取得」ボタンを押して、Microsoftから拡張機能を取得し有効化しておきましょう。

初回記録時の警告画面

4.自動化したい操作の開始

ポップアップで「記録」ボタンをした後、ブラウザを操作しようとすると以下のようにマウスが当たっている部分が赤枠で囲まれるようになります。

この状態になっていれば操作が記録されますので、どんどん操作していきましょう。

Web操作の記録

操作をしていくと「レコーダ」のポップアップに記録した操作が溜まっていきます。操作が完了したら、下部の「完了」ボタンを押します。

Power Automate for Desktop 記録の終了

5.記録した操作の自動実行

「レコーダ」ポップアップの「完了」ボタンを押すと以下の画面に戻りますので、赤枠で囲った再生ボタンを押します。

Power Automate for Desktop 操作の再現

これで記録した操作が自動的に実行されるはずです。