第4回「CircleCIを使ったAeyeScanによる診断の定期実行」

![title4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/08aff4a6-cf3d-f8e4-b0ca-7b7c3eac0fdb.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/b30d341da28130bc8f7a)はGithub Actionsを使ってAeyeScanの診断を自動化する手順について紹介しました。
第4回目「CircleCIを使ったAeyeScanによる診断の定期実行」は以下のような内容でお送りします！

#目次
[■なぜ脆弱性診断の自動化が必要?](#なぜ脆弱性診断の自動化が必要)
[■CircleCIの紹介](#circleciの紹介)
[■CircleCIでAeyeScanを自動実行](#circleciでaeyescanを自動実行)
[・(AeyeScan)スキャンの作成](#aeyescanスキャンの作成)
[・(AeyeScan)APIキー作成](#aeyescanapiキー作成)
[・(CircleCI)プロジェクトのセットアップ](#circleciプロジェクトのセットアップ)
[・(CircleCI)APIキー登録](#circleciapiキー登録)
[・実行結果の確認](#実行結果の確認)
[■おわりに](#おわりに)

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

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

#■CircleCIの紹介
CircleCIとはCircleCI社が提供するCIツールです。
GitHubと連係していて、GitHubアカウントがあれば無料で簡単に利用を開始できます。
GitHubのリポジトリの所定の位置に自動化するタスクを記述したymlファイルを作成し、ブラウザのGUIからプロジェクトをセットアップすることでコードのビルドやテストなど様々なタスクを自動化できます。

今回の記事ではCircleCIを利用してAeyeScanの診断を自動実行していきます！

#■CircleCIで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/26015134-a005-bb7b-69da-ae894071d6fa.png)

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

##・(CircleCI)プロジェクトのセットアップ
次に、CircleCIでプロジェクトのセットアップを行います。
CircleCIにログインし、サイドメニューの「プロジェクト」を選択するとGitHubリポジトリの一覧が表示されます。
使用するリポジトリの右側の「Set Up Project」のボタンを押します。
![image3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/ce7f7de8-a7c8-c65a-cb37-9c2872d5e24c.png)

ボタンを押すとymlファイルのエディタが起動します。
テンプレートの選択ウィンドウが出ますが今回テンプレートは使用しないため適当なものを選んで一度全て消します。
以下のようなymlファイルを作成して保存してください。

```yaml:ymlファイル
version: 2.1

jobs:
build:
  docker:
    - image: circleci/ruby:2.4-node
  steps:
    - run: |
        #テンプレートとなるスキャンIDを指定する。
        COPYID='60'
       
        #スキャンデータをコピーする。設定を変更する場合は、このテンプレートに対して行う。
        COPY_RES=$(curl -X PUT https://api.aeyescan.com/api/v1/scan/$COPYID/copy \
                        -H "X-AEYE-API-KEY:${API_KEY}" \
                        -H "X-AEYE-API-TOKEN:${API_TOKEN}" \
                        -H "Content-Type:application/json")


        #コピーしたスキャンデータを使って巡回とスキャンを実行する。
        SCANID=$(echo "$COPY_RES" | jq -r .scanInfo.id)
        curl -X PUT https://api.aeyescan.com/api/v1/scan/$SCANID/startCrawl \
             -H "X-AEYE-API-KEY:${API_KEY}" \
             -H "X-AEYE-API-TOKEN:${API_TOKEN}" \
             -H "Content-Type:application/json" \
             -d '{"scanMode": 1,"speed": "normal"}'


# # # # # # # # # # # # # # # # # # # # # # # # #
# 毎週火曜16時(JST) 7時(UTC)に実行
# # # # # # # # # # # # # # # # # # # # # # # # #
workflows:
version: 2
startAeyeScan:
  triggers:
    - schedule:
        cron: '0 7 * * 2' 
        filters:
          branches:
            only: circleci-project-setup


  jobs:
    - build
```

こちらのymlファイルの中で3箇所ほど用途に合わせて変更していただく必要があります。

1. 11行目: テンプレートとなるスキャンID
作成したスキャンのIDをここに入力します。

1. 35行目: 実行スケジュールの指定
POSIX規格のcrontabの構文で実行スケジュールを指定します。
タイムゾーンがJSTでなくUTCで指定する点にご注意ください。
CircleCIのワークフローを利用したジョブのスケジュールについてはこちらをご覧ください。

1. 38行目: ブランチ名の指定
対象となるブランチ名を指定します。

![image4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/36eee419-821c-c4a6-3171-a1d40d9a75a9.png)

##・(CircleCI)APIキー登録
最後に、前の手順で作成したAeyeScanのAPIキーをCircleCIに登録します。
先ほどセットアップしたプロジェクトの右側のメニュー(・・・)から「Project-Settings」を開きます。
サイドメニューから「Environment Variables」を選択し、「Add Environment Variable」で環境変数を作成します。
![image5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/651936f7-4aeb-351b-866b-c9cb5c0aa8f0.png)

作成する環境変数の名前と値は以下の表の通りです。
![image6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/8046616a-17d5-a75e-ce3e-1dd97b9a7c74.png)

##・実行結果の確認
CircleCIのワークフローの実行の様子はサイドメニューの「Dashboard」から確認できます。
実行途中にエラーが発生した場合もここからログなどを確認できます。
![image7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/34535876-1034-4192-7b66-0bf1f6dbe40a.png)

AeyeScanのGUIからも診断が自動で実行される様子が確認できます。
![image8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/4ab26308-aeeb-a5c7-a45f-93c26dd48280.png)

#■おわりに
今回はCircleCIを使用して診断を自動実行してみました。
[第2回](https://qiita.com/AeyeScan/items/4c94f64a31f0f8717911)のGithub Actionsの時と似ていて、どちらも少ない手順でお手軽に自動化ができると思います。
[次回](https://qiita.com/AeyeScan/items/24e28db5a57988a90e06)はAWS lamdaでAeyeScanの診断を自動化していきます！

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)