VAddyとCircleCIを組み合わせると、簡単に継続的セキュリティテスト環境が実現できます。
git pushするとCircleCIのジョブが起動し、テストサーバにコードをデプロイ、そのテストサーバに向けてVAddyからWebの脆弱性検査を実施します。
今回は、
git push -> Unit test -> Deploy(Staging) -> VAddy test -> Deploy(Production)
という流れで解説します。
Unit testが失敗した場合は後続の処理は行われませんし、VAddy testが失敗した場合も本番にコードがデプロイされません。
こうして、ユニットテストとWeb脆弱性検査を定期的に実施して問題のないコードのみを本番環境にデプロイできます。
前提
この記事では、CircleCIインスタンス内に立てたWebサーバに対しての脆弱性検査ではなく、CircleCIから別のステージングサーバにデプロイした後に、そのステージングサーバに対しての脆弱性検査をするパターンの説明となります。
2017年7月現在、PrivateNet版VAddyをリリースしておりますので、CircleCIのインスタンスに立てたローカルWebサーバにも検査実行できるようになりました。
PrivateNet版VAddyの詳細は下記をご覧ください。
http://blog-ja.vaddy.net/post/161798392486/privatenet-release
ステップ1
VAddyに検査対象のサーバを登録し、スキャンが出来るようになりましたらWebAPIのシークレットキーを発行します。発行方法はマニュアルを参照ください。
CircleCIのプロジェクト設定画面で、環境変数にVAddyのシークレットキーなどを登録します。
登録する環境変数は、V1プロジェクトとV2プロジェクトで異なります。
V1とV2の違いはこちらをご覧ください。
V2プロジェクトでは下記の3つです。
- VADDY_PROJECT_ID
- VADDY_TOKEN
- VADDY_USER
VADDY_PROJECT_IDは、管理画面の左メニュー 「Server」の画面に記載されています。
V1プロジェクトでは下記の3つです
- VADDY_HOST
- VADDY_TOKEN
- VADDY_USER
VADDY_HOSTはVAddyに登録した検査対象のFQDNです。
VADDY_USERはVAddyのログインIDです。
VADDY_TOKENは、WebAPIシークレットキーです。こちらの画面から発行してください。
ステップ2
プロジェクト用のcircle.ymlファイルを用意します。
test:
override:
- ./test.sh
deployment:
staging:
branch: master
commands:
- ./deploy.sh
- git clone https://github.com/vaddy/go-vaddy.git && cd ./go-vaddy/bin/ && ./vaddy-linux-64bit
- ./deploy2.sh
test:にてユニットテストを行い、deployment:のstaging:にて、まずdeploy.shでステージングにコードをデプロイし、git cloneで
をセットして検査開始。問題が何もなければ、deploy2.shが実行されます。
test.sh、deploy.sh、deploy2.shは適宜プロジェクト用のものを利用してください。 VAddyクライアントツールはRuby2.0以上が対象ですので、rvmで環境を切り替えています。
動作確認
git pushしてVAddyで問題がなければdeploy2.shまで実行されます。
もし、VAddyの検査で1件でも脆弱性が見つかった場合はそこで処理が停止して、deploy2.shは実行されません。
まとめ
VAddy CLIツールはオープンソースとして公開しておりますので、CircleCI以外のサービスにも適用して連携できると思います。
WebAPIの仕様書も公開しておりますので、独自のクライアントツールを作り、プロジェクトに組み込むことも出来ます。