日本ではあまり利用者が多くないかもしれませんが、CodeshipというCIサービスがあります。今回はCodeshipとVAddyを組み合わせた継続的セキュリティテスト環境を構築してみました。
CicleCI連携の時と同様に、git pushしてCodeshipのジョブを起動させ、テストサーバにコードをデプロイ、そのテストサーバに向けてVAddyからWebの脆弱性検査を実施します。
今回も、
git push -> Unit test -> Deploy(Staging) -> VAddy test -> Deploy(Production)
という流れで解説します。
Unit testが失敗した場合は後続の処理は行われませんし、VAddy testが失敗した場合も本番にコードがデプロイされません。
本番環境にデプロイされるのは、ユニットテストとWeb脆弱性検査をパスした問題のないコードのみになります。
前提
この記事では、Codeshipインスタンス内に立てたWebサーバに対しての脆弱性検査ではなく、Codeshipから別のステージングサーバにデプロイした後に、そのステージングサーバに対しての脆弱性検査をするパターンの説明となります。
2017年7月現在、PrivateNet版VAddyをリリースしておりますので、Codeshipのインスタンスに立てたローカルWebサーバにも検査実行できるようになりました。
PrivateNet版VAddyの詳細は下記をご覧ください。
http://blog-ja.vaddy.net/post/161798392486/privatenet-release
ステップ1
VAddyに検査対象のサーバを登録し、スキャンが出来るようになりましたらWebAPIのキーを発行します。発行方法はマニュアルを参照ください。
Codeshipのプロジェクト設定画面で、環境変数にVAddyのAPIキーなどを登録します。
登録する環境変数は、
- VADDY_TOKEN
- VADDY_HOST
- VADDY_USER
の3つです。VADDY_HOSTはVAddyに登録した検査対象のFQDNです。VADDY_USERはVAddyのログインIDです
ステップ2
「Configure your tests」の画面に行き、Configure Test Pipelinesに、下記のように記載します。
gistにサンプルの設定ファイルを置きました。
https://gist.github.com/ichikaway/e20450fe1910f760c613
./unit-test.sh ./deploy-staging.shgit clone git@github.com:vaddy/vaddy-api-ruby.git cd ./vaddy-api-ruby ruby vaddy.rb && cd ../
./deploy-production.sh
unit-test.shにてユニットテストを行い、deploy-staging.shでステージングにコードをデプロイ。
git cloneでVAddyのクライアントツール(Ruby)をセットして検査開始。
問題が何もなければ、deploy-production.shが実行されます。
unit-test.sh、deploy-staging.sh、deploy-production.shは適宜プロジェクト用のものを利用してください。
今回は、deploy-production.shという独自シェルでデプロイするように記載していますが、CodeshipのDeployment機能を使えるようであれば、使うと便利だと思います。
動作確認
git pushしてVAddyで問題がなければdeploy-production.shまで実行されます。
もし、VAddyの検査で1件でも脆弱性が見つかった場合はそこで処理が停止して、deploy-production.shは実行されません。
チャット連携も簡単
Codeshipの管理画面の、「Notification」メニューに行くと、連携リストがでます。ここでHipchatやSlackの連携を有効にすると便利です。
今回はHipchat連携を試してみました。
Hipchat連携に必要な情報を画面から入力しておき、コードをpushします。
VAddyの検査で脆弱性が発見されると、Codeshipのテストが失敗し、Hipchatにエラーが通知されます。
問題を解決して再度テストを実行し、テストをパスすると、Hipchatに成功通知がきます。
まとめ
このようにVAddyのクライアントを使えば簡単にVAddy連携できます。
既にVAddy Jenkinsプラグインは公開しておりましたが、最近のCI as a Serviceの流れもあったので、RubyでVAddy APIを操作するツールを実装して簡単に組み込めるようにしました。
VAddy API Rubyはオープンソースとして公開しておりますので、Codeship以外のサービスにも適用して連携できると思います。(CircleCI連携の記事はこちら)
WebAPIの仕様書も公開しておりますので、独自のクライアントツールを作り、プロジェクトに組み込むことも出来ます。
VAddyはCIと連携し継続的なセキュリティテストを実現するサービスです。無料プランでも実行回数無制限ですので是非お試しください。
http://vaddy.net
http://vaddy.net/ja/features.html