【IBM Security Randori】ServiceNowとチケット連携してみる

# はじめに
IBM Security Randoriは、攻撃領域管理（AttackSurfaceManagement）のSaaS製品です。

IBM Randoriの製品については、次の動画を参照ください。

https://video.ibm.com/recorded/133259051

今回は、ServiceNowとのチケット連携機能を試してみました。

https://www.ibm.com/docs/en/randori?topic=marketplace-integrating-servicenow-randori

# 1.レシピの説明

IBM Security Randoriでは、他システムと連携するためのシナリオを「レシピ」として表現しています。ServiceNow連携では、3種類のレシピが提供されています。

|No  |レシピ名称  |説明  |
|---|---|---|
|1  |Randori → SNOW Create ServiceNow Incidents Create new SNOW Incident Tickets for any Target that is marked with as "Needs Investigation" in Randori  | Randoriターゲットのステータスが「Needs Investigation」の場合に、ServiceNowのITSM、あるいは、SIRテーブルにインシデントを新規起票する。ITSM、SIRどちらに起票するかは設定可能。|
|2  |SNOW [ITSM] → Randori  Update Target in Randori Updates the corresponding Randori Target to the completed SNOW ticket　<BR><BR>SNOW [SIR] → Randori Update Target in Randori Updates the corresponding Randori Target to the completed SNOW ticket|ServiceNowでインシデントがクローズされたときにRandoriターゲットのステータスを「Needs Investigation」から「Needs Review」に変更する。ITSM、SIRテーブル用に2レシピあり、No1の設定にあわせて使い分けする|
|3  |Randori → SNOW Create ServiceNow Incidents Create new SNOW Incident Tickets for any completed Successful Validate Activity|脆弱性検証アクティビティが成功したときに、ServiceNowにインシデントを起票する  |

今回試したNo1とNo2のレシピの動作イメージです。3つ目のレシピは動作環境が整えられなかったため割愛しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/85bbcea6-37b0-3edd-acd3-570408ae6957.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/e2d7ab68-73db-2ade-e968-8b72f3fa437f.png)

# 2.ServiceNow設定確認
最初にServiceNowで設定確認を行います。

## 2.1.インシデント内にあるStateフィールドのNumber確認
RandoriがServiceNowのインシデントがクローズされたか判定するために利用するStateフィールドの値（数値）を確認します。

任意のインシデントでStateフィールドの文字付近を右クリックし、「Configure Dictionary」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/093c8c11-9b70-a77e-54b7-50e23b8c50d1.png)

フィルターアイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/28cb0caf-6678-3a66-8977-dcfdb1dd7474.png)

「table is incident」の条件を設定して「RUN」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/13d216fc-ad76-1cb4-8c29-01fc860d8fab.png)

Closed（クローズ)ステータスは、数値が「7」であることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/b00bf496-bf95-ab2a-e61d-8ddeb1ac078d.png)

# 3.IBM Security Randori設定

## 3.1.ServiceNow情報の構成/接続確認

Randoriの画面で、Integration- Marketplaceに移動し、ServiceNowのタイル状に表示されている「Configure」をクリックします、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/282527cb-c859-bbb0-7a7d-827fcf4a7b81.png)

ServiceNowのテナント情報、および、管理者ID/パスワードを入力して「Connect」をクリックします。
|設定項目  |設定値  |備考  |
|---|---|---|
|Authentication Type  |Username/Password |Username/Password、OAuth2.0から選択  |
|Instance Name  | インスタンス名 |ServiceNowのインスタンス名：<instancename>.service-now.com  |
|Username  |管理者ID  |- |
|Password  |管理者IDのパスワード  |- |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/eb555200-9c5b-40c3-c839-20c5fba0326a.png)

接続が成功すると、「Connection Success」と表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/1b34c3ff-c381-6f35-4fd5-97f46a805655.png)

## 3.2.レシピの構成
Create new SNOW Incident Tickets for any Target that is marked with as "Needs Investigation" in Randoriレシピを構成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/b1180620-6f79-85f6-cf42-b2910f9db935.png)

以下の内容を入力して、「Complete」をクリックします。

|設定項目  |設定値  |備考  |
|---|---|---|
|Organization shortname (check url)  |Randoriの[SHORTNAME]を指定 |RandoriへアクセスするURL:<BR>app.randori.io/[SHORTNAME]/dashboard  |
|Snow assignment group (defaults to none)  | 任意の値を設定 |ServiceNowに存在しているグループ名を指定 |
|Servicenow caller field (defaults to sys admin)  |任意の値を設定  |ServiceNowに存在するユーザー名を指定。デフォルト値のsys adminのままだと、ServiceNow側に存在せず、起票されたインシデントのCallerが空白になる |
|Servicenow use case (itsm/sir)  |itsm  |itsm/sirいずれかを指定 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/4d4203c2-c12a-9536-072d-733940fa5de5.png)

次に、Updates the corresponding Randori Target to the completed SNOW ticketレシピを構成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/27af08f8-b2a4-8505-c768-40cc2d06e79b.png)

トリガーとなるstateの数値（7）を入力して、「Complete」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/607c1278-5c21-300a-886d-028474170a5b.png)

# 4.動作確認
構成したレシピの動作確認をします。

# 4.1.レシピ動作確認①　ServiceNowへの新規チケット起票
Randoriの任意のターゲットで、ステータス画面で「Mark Status」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/cc257bc1-7bca-3489-0002-7211a2f7450c.png)

ステータスを「Needs Investigation」に変更して、「Submit」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/3a22c46d-a0d5-caca-c6fa-2eaf4e2dbb44.png)

ステータスが変更されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/2c00d0e8-e1e3-ee9c-7e3c-ea5901582c5d.png)

レシピが動作すると、ServiceNowにインシデントが起票されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/f36dd3e1-c03f-4c80-2827-f2cc71ce8f87.png)

指定したCaller/グループが割り当てられていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/6dad7ec5-9b95-1e15-cab2-697612fb7ada.png)

Randori側の変更を確認します。
ターゲットでステータスが「Needs Resolution」に変更されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/e7e834e4-67b7-0739-e6b6-7e590354c6db.png)

また、起票したインシデントの情報がコメント欄に追記されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/a358252f-7a3f-9464-15df-ef6a7cfc5a4a.png)

# 4.2.レシピ②　チケットクローズ後のステータス反映
ServiceNow側でチケットをクローズします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/106aefb3-5fa8-5cf8-e04a-7f8952644706.png)

レシピが動作すると、Randoriターゲットのステータスが「Needs Review」に変更されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/2546313b-5c62-b0c3-ed45-b96a7a073d55.png)

また、インシデントクローズ時の理由などがコメント欄に追記されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/e4ac289f-6530-0f0e-c231-4309d22df8f2.png)

レシピの動作確認が以上になります。

# 5. 参考（OAuth2.0によるServiceNow連携）
ServiceNowの管理者ID/パスワードではなく、OAuth2.0を使って連携する方法もあります。

## 5.1.SeriveNowのOAuth有効化
OAuth 2.0 クライアントを設定するため、ServiceNowのマニュアルに従い、OAuth 2.0を有効化します。
https://docs.servicenow.com/ja-JP/bundle/washingtondc-platform-security/page/administer/security/task/t_ActivateOAuth.html

ServiceNowの管理画面で、すべて > システム定義 > プラグイン に移動して、「OAuth」のキーワードで検索します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/f4b7cb32-d125-34ff-7101-4620cec7ae33.png)

今回のテナントではOAuth 2.0は有効化されていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/f2f7b1f9-9e8a-1195-60cf-b036b604a426.png)

## 5.2.SeriveNowのアプリケーションレジストリ作成

ServiceNowのマニュアルに従い、アプリケーションレジストリを設定します
https://docs.servicenow.com/ja-JP/bundle/washingtondc-platform-security/page/administer/security/task/t_CreateEndpointforExternalClients.html

ServiceNowの管理画面で、すべて > システム OAuth > アプリケーションレジストリー に移動して、「新規」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/554ee7cb-ee04-4cdb-96a2-8d4c203a163d.png)

「外部クライアント用の OAuth API エンドポイントを作成します 」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/cd553d27-485c-40a5-4488-66a9f9d88695.png)

以下のように設定します。

|設定項目  |設定値  |備考  |
|---|---|---|
|名前  |任意の名前を設定  |-  |
|クライアントID  |自動生成  |-  |
|クライアントシークレット  |空白のまま(送信時に自動生成)|-  |
|リダイレクトURL  |https://www.workato.com/oauth/callback  |※  |
|ロゴURL  |https://www.workato.com/blog/wp-content/uploads/2015/10/workato-logo-small.png  |※ |

※リダイレクトURLとロゴURLは、RandoriのマニュアルからたどったWorkatoのマニュアルを参考にしています。
https://docs.workato.com/ja/connectors/servicenow.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/5b1253cb-ecee-77d4-7c5e-e4d181743514.png)

送信をクリックすると、クライアントシークレットが自動生成されます。
クライアントIDとクライアントシークレットの値をコピーしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/b81a4869-c2dd-7f4c-a745-bf550c28401a.png)

## 5.3.Randoriのマーケットプレイス設定

テナント名、先ほど発行したクライアントID、クライアントシークレットを登録して「Connect」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/c5e8f89f-24f2-91f5-200f-27f47b088701.png)

ServiceNowのログイン画面が表示されるため、管理者IDでログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/2220b187-3373-212e-c912-c57799c6f960.png)

「Allow」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/9d283da3-7e14-673f-c648-9d02eb1adff9.png)

接続が成功すると、「Connection Success」と表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/d92413c4-4530-db9e-15b0-b1c6c38fb2b3.png)

マーケットプレイスの設定は以上となります

ただし、OAuth2.0で構成した場合、100日ごとに手動で接続を更新する必要があると記載されています。
OAuth2.0の接続方式を採用する際には、注意が必要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/4985ec60-7799-b2ca-8f2e-dcbbca335cab.png)

https://docs.workato.com/ja/connectors/servicenow.html#how-to-connect-to-servicenow-on-workato

# 最後に

IBM Security RandoriとServiceNowを連携させてみました。
ServiceNow以外の製品とも連携できるので、試してみたいと思います。