第5回「AWS lambda＋Amazon EventBridgeを使ったAeyeScanによる診断の自動化」

![title5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/6d6e48da-1cae-9dae-3798-f9ac2b8b2c43.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/964f502cd780911599ac)はCircle CIを使ってAeyeScanの診断を自動化する手順について紹介しました。
第5回目「AWS lambda＋Amazon EventBridgeを使ったAeyeScanによる診断の自動化」は以下のような内容でお送りします！

#目次
[■なぜ脆弱性診断の自動化が必要?](#なぜ脆弱性診断の自動化が必要)
[■AWS Lambdaの紹介](#aws-lambdaの紹介)
[■Amazon EventBridgeの紹介](#amazon-eventbridgeの紹介)
[■AWS lambda＋Amazon EventBridgeでAeyeScanを自動実行](#aws-lambdaamazon-eventbridgeでaeyescanを自動実行)
[・(AeyeScan)スキャンの作成](#aeyescanスキャンの作成)
[・(AeyeScan)APIキー作成](#aeyescanapiキー作成)
[・(Lambda)関数の作成](#lambda関数の作成)
[・(Lambda)環境変数にAPIキーを追加](#lambda環境変数にapiキーを追加)
[・(Lambda)実行スケジュールの設定](#lambda実行スケジュールの設定)
[・スキャン開始・終了の通知](#スキャン開始終了の通知)
[■おわりに](#おわりに)

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

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

#■AWS Lambdaの紹介
AWS Lambda とはAmazon Web Service (AWS)の１つで、Amazonが提供するコンピューティングインフラストラクチャを使用してコードの自動実行ができるサービスです。コードを記述する言語として、Python, Java, Node.jsなどの複数の言語をサポートしています。
利用にはAWSアカウントが必要です。関数の作成は追加料金なしで行えますが、関数の実行やデータの転送などで料金が発生します。AWS Lambdaについて詳しくはこちらをご覧ください。

今回の記事ではこのAWS Lambdaと、次に紹介するAmazon EventBridgeを使用してAeyeScanの診断を自動実行していきます。

#■Amazon EventBridgeの紹介
Amazon EventBridgeとは、こちらもAWSの1つで、AWSのサービスや他の様々なSaaSアプリケーションを接続した[イベント駆動型アーキテクチャ](https://aws.amazon.com/jp/event-driven-architecture/)の構築をサポートするサービスです。
今回の記事ではAmazon EventBridgeのSaaS(AeyeScan)とAWSのサービス(AWS Lambda)を接続する機能を利用します。
Amazon EventBridgeについて詳しくは[こちら](https://aws.amazon.com/jp/eventbridge/)をご覧ください。

#■AWS lambda＋Amazon EventBridgeでAeyeScanを自動実行
##・(AeyeScan)スキャンの作成

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

作成したスキャンのIDを後で使うのでここで控えておきます。
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/122d3903-2c35-560b-ef68-6d492593a548.png)

##・(AeyeScan)APIキー作成
次に、AeyeScanでAPIキーを作成します。
APIキーはAeyeScanのメニューバーの「アカウント管理」→「APIキー管理」から作成できます。
APIキーを作成する際には書き込み・実行権限を「あり」に設定します。
作成したAPIキーとトークンは後から確認できないため、安全な場所に保管してください。
ここまでは前回までと同じ手順です。
![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/45c529c1-4de5-bfcd-6842-cf14a79740f8.png)

##・(Lambda)関数の作成
次に、Lambdaで関数を作成します。
作成のオプションは「一から作成」を、ランタイムはPython3.9を選択します。
![image3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/21089e16-e54c-e76e-59bc-d520c48b4c9d.png)

先ほど作成した関数に以下のようなコードソースを作成します。

```python
import json
import os
import urllib3
def lambda_handler(event, context):
   #テンプレートとなるスキャンIDを指定する。
   copyid=‘(スキャンIDを指定)’
   API_BASE_URL = 'https://api.aeyescan.com/api/v1/scan/'
   API_HEADERS_PARAMS = {  
       'X-AEYE-API-KEY': os.environ['APIKEY'],              
       'X-AEYE-API-TOKEN': os.environ['APITOKEN'], 
       'Content-Type': 'application/json',                    
   }
   #スキャンデータをコピーする。
   http = urllib3.PoolManager()
   copy_res = http.request('PUT',API_BASE_URL + copyid + '/copy', headers=API_HEADERS_PARAMS)
   #コピーしたスキャンデータを使って巡回とスキャンを実行する。
   scanid = json.loads(copy_res.data)['scanInfo']['id']
   scan_res = http.request('PUT', API_BASE_URL+ str(scanid) +'/startCrawl', headers=API_HEADERS_PARAMS, body=json.dumps({'scanMode':1,'speed': 'normal’}))
　　return {
       'copy_statusCode': copy_res.status,
       'copy_body': json.loads(copy_res.data),
       'scan_statusCode': scan_res.status,
       'sacn_body': json.loads(scan_res.data),
   }
```
こちらのコードはほぼそのままご利用いただけますが、6行目のcopyidに先ほど作成したスキャンのIDに差し替えていただく必要があります。
![image4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/95e8d10c-78b9-4f93-a46f-eae59984c399.png)

##・(Lambda)環境変数にAPIキーを追加
次に、前の手順で作成したAPIキーをLambdaの環境変数に登録します。
Lambdaの関数の「設定」から「環境変数の編集」を開き、以下の表のようなキーと値で環境変数を追加して保存します。
![image5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/24e7e703-e3e2-d4db-edb4-c56a701dd0cf.png)
![image6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/ca5cb1c3-e2ba-3e15-9e63-b6701da2bec2.png)

##・(Lambda)実行スケジュールの設定
最後に、関数を呼び出すトリガーを設定します。
Lambdaの「トリガー設定」を開き、新規ルールを作成します。
ルール名とオプションでルールの説明を入力し、自動実行のスケジュールをcronまたはrate形式で指定します。スケジュールの設定について詳しくはこちらをご覧ください。また、日本標準時のJSTでなく世界協定時のUTCでの時間指定となることも注意が必要です。

トリガーの設定ができたら自動実行の準備は終了です。
![image7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/de60c6c8-1e9c-53ea-0912-4f9b7ad5334d.png)

##・スキャン開始・終了の通知
自動実行の開始と終了はslackとメールで通知されます。
![image8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/fd49ab8e-dc97-5c09-c5a4-a97aeed889b4.png)
![image9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/34cdb8fd-a211-0340-e5ba-fbc1fcd23034.png)

#■おわりに
今回はAWS LambdaとAmazon EventBridgeを使用して診断を自動実行する手順を解説しました。
こちらの記事も今回で5回目となりますが、「APIを叩くコードの作成」、「環境変数にAPIキーを登録」、「スケジュールの設定」という手順は共通でした。

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)