第2回「Github Actionsを使ったAeyeScanによる診断の自動化」

![title2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/dd5a1d99-f9e6-fcdc-a56b-def4ce0cfc11.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/f7c647db9365ff8b2ffb )はAeyeScanによる脆弱性診断を手動で実行する手順について紹介しました。
第2回目「Github Actionsを使ったAeyeScanによる診断の自動化」は以下のような内容でお送りします！

#目次
[■なぜ脆弱性診断の自動化が必要?](#なぜ脆弱性診断の自動化が必要)
[■GitHub Actionsの紹介](#github-actionsの紹介)
[■GitHub ActionsでAeyeScanを自動実行](#github-actionsでaeyescanを自動実行)
[・スキャン作成](#スキャン作成)
[・APIキー作成](#apiキー作成)
[・GitHub secretsの追加](#github-secretsの追加)
[・GitHub Actions workflowの作成](#github-actions-workflowの作成)
[・診断の自動実行](#診断の自動実行)
[■おわりに](#おわりに)

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

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

#■GitHub Actionsの紹介
GitHub ActionsはGitHubが提供するCIツールの一種で、GitHubのアカウントがあれば誰でも利用が可能です。
ワークフローをyaml形式で記述することで、ソフトウェア開発中のタスクを簡単に自動化することができます。

今回の記事では、このGitHub Actionsを使用してAeyeScanによる脆弱性診断を自動で実行していきます！

#■GitHub ActionsでAeyeScanを自動実行

##・スキャン作成

まずはAeyeScanで新規スキャンの作成を行います。
この手順の詳細については[前回の記事](https://qiita.com/AeyeScan/items/f7c647db9365ff8b2ffb )をご覧ください。

作成したスキャンのIDを後で使うのでここで控えておきます。
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/686ede9f-92a0-71c2-1c9d-bc589e588ddd.png)

##・APIキー作成
次に、AeyeScanでAPIキーを作成します。
APIキーはAeyeScanのメニューバーの「アカウント管理」→「APIキー管理」から作成できます。
APIキーを作成する際には書き込み・実行権限を「あり」に設定します。
![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/5e66b983-14a8-b904-0cc9-17d536089c4f.png)

作成したAPIキーとトークンは後から確認できないため、安全な場所に保管してください。

##・GitHub secretsの追加
次に、GitHubリポジトリにsecretsを追加し、前の手順で作成したAPIキーとトークンの値を設定します。
GitHub secretsの追加手順については[公式ドキュメント](https://docs.github.com/ja/actions/security-guides/encrypted-secrets )をご覧ください。
以下のような名前と値でGitHub secretsを追加します。
![image3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/4f1c403e-ff15-2aa9-14ec-6332cb3c82fd.png)

##・GitHub Actions workflowの作成
最後に、githubリポジトリにworkflowを作成します。
GitHub Actions workflowについては[こちら](https://docs.github.com/ja/actions/learn-github-actions/understanding-github-actions )をご覧ください。
リポジトリに./github/workflows/という名前でディレクトリを作成し、
この下に適当な名前で以下のような内容のyamlファイルを作成します。

```yaml:yamlファイル
name: scan
on:
###################################################
# 毎日17時(JST)=8時(UTC)に実行
###################################################
schedule:
  - cron: '0 8 * * *'
jobs:
build:
  runs-on: ubuntu-latest
  # Steps represent a sequence of tasks that will be executed as part of the job
  steps:
    - name: Run scan
      run: |
        # テンプレートとなるスキャンIDを指定する。
        COPYID='7'
       
        # スキャンデータをコピーする。設定を変更する場合は、このテンプレートに対して行う。
        COPY_RES=$(curl -X PUT https://api.aeyescan.com/api/v1/scan/$COPYID/copy \
          -H "X-AEYE-API-KEY:${{ secrets.API_KEY }}" \
          -H "X-AEYE-API-TOKEN:${{ secrets.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:${{ secrets.API_KEY }}" \
          -H "X-AEYE-API-TOKEN:${{ secrets.API_TOKEN }}" \
          -H "Content-Type:application/json" \
          -d '{"scanMode": 1,"speed": "normal"}'
```
こちらのyamlファイルはほぼそのままお使いいただけますが、以下の2箇所は各自で編集していただく必要があります。

1. 7行目　実行時間の設定
　posix cron syntaxで実行時間を指定しています。
　タイムゾーンがJSTでなくUTCで指定する点にご注意ください。
　scheduleによる実行時間の指定方法についてはこちらをご覧ください。

1. 16行目　テンプレートとなるスキャンID
　前の手順で作成したAeyeScanのスキャンIDをここに入力します。

![image4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/7d93ab56-0f2a-5a08-47d3-b3ea4aaa0520.png)

以上でAeyeScanの診断の自動化ができました。
後は設定した実行時間を待つだけです。

##・診断の自動実行
GitHub Actionsが無事に動いているかはGitHubリポジトリのActionsタブより確認できます。
1日置きにworkflowが走っていますね。
![image5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/c1c09316-03a8-563f-c72e-c34302ba5be8.png)

AeyeScanで無事に診断が行われているかは手動のスキャンと同様にスキャン一覧から確認できます。
こちらも正常に1日置きにスキャンが実行されているようです。
![image6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2422105/75d0aa2f-cdeb-f9cc-f8e4-557840f8c69c.png)

#■おわりに
今回はGithub ActionsでAeyeScanの診断を自動化してみました。
ほとんどyamlファイルの作成だけで手軽に設定できると思います。
[次回](https://qiita.com/AeyeScan/items/b30d341da28130bc8f7a)はGoogleActionScriptを使って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)