第6回「AeyeScan+Google Apps Scriptを使ったスキャンのキュー対応」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/649e39c1-1a66-4b29-cbc1-97fbb9a4a218.png)

SaaS型Webアプリ診断ツール「AeyeScan」を運営している株式会社エーアイセキュリティラボが、セキュリティテストの自動化、脆弱性診断の内製化、AI/機械学習などの技術情報の共有を目的とした記事です。
AeyeScanの情報はこちら https://www.aeyescan.jp
エーアイセキュリティラボの情報はこちら、https://www.aeyesec.jp

[![2022-155641.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/dd3f69d5-879a-ed11-d6ac-353a85523c43.png)](https://www.aeyescan.jp)

こんにちは。株式会社エーアイセキュリティラボ　カスタマーサクセス担当　日髙です。
こちらの記事では脆弱性診断ツール「AeyeScan」の機能や、脆弱性診断内製化のコツ、CIツールを使ったDevSecOps等を紹介していきます。

[前回](https://qiita.com/AeyeScan/items/24e28db5a57988a90e06)はAWS lambda＋Amazon EventBridgeを使ってAeyeScanの診断を自動化する手順について紹介しました。
第6回目「AeyeScan+Google Apps Scriptを使ったスキャンのキュー対応」は以下のような内容でお送りします！

:::note warn
（2022/4/11追記）本記事でお伝えする「キュー機能」は、2022/4/10のリリースにて、AeyeScanに実装されました。
現在は、AeyeScanのキュー機能で対応可能です。
:::


# 目次
[■なぜ脆弱性診断の自動化が必要?](#なぜ脆弱性診断の自動化が必要)
[■Google Apps Script(GAS)の紹介](#google-apps-scriptgasの紹介)
[■作るものの説明](#作るものの説明)
[・スキャン作成](#スキャン作成)
[・APIキー作成](#apiキー作成)
[・スプレッドシート用意](#スプレッドシート用意)
[・トリガー作成](#トリガー作成)
[・スキャン状況の自動更新](#スキャン状況の自動更新)
[■利用上の注意](#利用上の注意)
[■おわりに](#おわりに)

# ■なぜ脆弱性診断の自動化が必要?
システム開発において、開発と運用を短い周期で繰り返していく手法をDevOpsと呼び、生産性を上げる手法として広く採用されています。
システム開発のもう一つの重要な要素としてセキュリティ品質の担保がありますが、DevOpsのサイクルにセキュリティ診断を組み込んだものをDevSecOpsと呼びます。

DevSecOpsを実現するためには、システムの開発と運用のサイクルに合わせて高い頻度でセキュリティ診断を行う必要があります。
このような高い頻度でのセキュリティ診断を実現するための手法の１つとして、CIツールなどによるセキュリティ診断の自動化が有効になります。

# ■Google Apps Script(GAS)の紹介
Google Apps Script(GAS)とは、業務の自動化やアプリケーションの統合のためのプラットフォームで、Google社が提供しています。
GASを利用することで、Gmail とスプレッドシートの連係や自動化が可能です。
Gmailアカウントがあれば無料で利用でき、本格的な開発経験が無くても簡単にソリューション開発ができます。

# ■作るものの説明
今回は、タイトルに「キュー対応」とある通り、
スプレッドシートにスキャンしたいスキャンIDを書いておけば、先頭から自動でスキャンを行うよう設定します。また、スキャンの進捗状況をシートに反映するよう設定しています。

## ・キュー対応とは
キューとは、待ち行列のことを言います。
キュー対応とは、行列に並んだデータを先頭から順次実行していく処理のことを指しています。
コンビニのレジをイメージすればわかりやすいと思います。

AeyeScanがレジ、会計を待っているお客がスキャンIDです。並んでいる順番に処理を実施していきます。

## ・AeyeScanのスキャン同時実行数の制約
AeyeScanでは、ライセンスの制約により、同時にスキャンを行うことができる数が限られています。
例えば、同時に１つしかスキャンを実行できない場合、スキャンを複数実行する際は、1つのスキャンが終了したら、
次のスキャンを実行するためAeyeScanにログインして、スキャン実行を行う必要があります。

これは面倒です。
そこで、今回は、キュー対応の「待ち行列」をスキャンIDリストとし、リストの先頭から順番にスキャン実行していく自動化を行います。

こちらのスプレッドシートを使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/6db38791-6553-4356-88b5-c2c805dcab64.png)

図中の赤枠で囲った部分にスキャン対象の「スキャンID」をリストで入力します。
そのほかの項目は、スクリプトによってAeyeスキャンから情報を取得し、自動で入力されます。

では早速作っていきましょう。

# ■GASでAeyeScanを自動実行
## ・スキャン作成

まずはAeyeScanでスキャンを作成いたします。
スキャン作成について詳しくは[第1回](https://qiita.com/AeyeScan/items/f7c647db9365ff8b2ffb)の記事をご覧ください。

作成したスキャンIDを後で使うのでここで控えておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/94ddba24-ec8c-a64b-fdad-bfb09951eaf7.png)


## ・APIキー作成
次に、AeyeScanでAPIキーを作成します。
APIキーはAeyeScanのメニューバーの「アカウント管理」→「APIキー管理」から作成できます。
APIキーを作成する際には書き込み・実行権限を「あり」に設定します。
作成したAPIキーとトークンは後から確認できないため、安全な場所に保管してください。
![image4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/a1642968-6fc2-6813-29be-1fd83f31bd24.png)

## ・スプレッドシート用意
次に、前章([■作るものの説明](#作るものの説明))で述べたスプレッドシートを用意します。
以下のリンクからスプレッドシートを開き、メニューバーの「ファイル」→「コピーを作成」からご利用のGoogle Driveにファイルをコピーしてください。以下、コピーされたファイルを編集していきます。

https://docs.google.com/spreadsheets/d/13ABENX2RxNpFxPUyQWKjn2dloLmMVo6cuFG2Tw5mSXQ/edit?usp=sharing

編集する箇所は2つです。
1つ目に、メニューバーの「ツール」→「スクリプトエディタ」を開き、スクリプトの6, 7行目のXXXXXの部分を作成したAPIキーとAPIトークンの値にそれぞれ置き換えてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/08e7f8ff-990b-f10e-5957-f4614805599f.png)

2つ目に、シートにスキャンIDを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/6db38791-6553-4356-88b5-c2c805dcab64.png)

## ・トリガー作成
最後に、GASのトリガーを作成します。
スプレッドシートから再び「ツール」→「スクリプトエディタ」を開き、サイドバーから「トリガー」を選択して「トリガーの追加」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/6221ea98-1eaa-3c55-2791-72fe9aa4a1a9.png)

以下の画像のようなウィンドウが表示されるので、トリガーの設定を「時間主導型」、「分ベース」、「5分おき」に変更して保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/df242291-ac15-1803-23ad-b98b62abe8f8.png)

ここで、はじめてトリガーを追加する際には以下のような警告が表示されます。
これは、このスクリプトがGoogle Drive内のスプレッドシートの参照と編集(スキャンIDの参照、スキャン時刻やスキャンステータスの更新など)と、外部サービス(AeyeScan)への接続を行うことに対しての警告です。
**必ず本スクリプトと警告の内容を理解したうえで続行してください。**
![image10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/d68cf356-b98a-f7b0-ddf2-f24e806c8113.png)

## ・スキャン状況の自動更新
スクリプト実行後、GASにより、スプレッドシートの内容が自動で更新されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/ffd03212-9238-b301-3934-0e7db82136f4.png)

また、スキャン終了している場合には「スキャン情報」が更新され、出力されたURLからAeyeScanによるスキャン結果を確認できます。
![image12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/82f17bf6-257d-a2c8-3654-9b296588a731.png)

スキャン作成時に、メールやSlackへの通知設定を行っておくことで、スキャンのお知らせを受け取ることが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/0e8d105c-8797-f911-7854-f94411afdf2c.png)

# ■利用上の注意
**・GASのコードなどご自由に編集し利用してください。ただし、無償無保証のため**不明点の質問やカスタマイズについてのサポートはできません。コードの改善、不具合については、是非ご連絡ください。

# ■おわりに
今回はGASを使用してスキャンの定期実行（Queuing対応）を自動化してみました。

AeyeScanのトライアル、脆弱性診断の自動化のご相談は[こちら](https://www.aeyescan.jp/)

[![2022-155641.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/dd3f69d5-879a-ed11-d6ac-353a85523c43.png)](https://www.aeyescan.jp)