はじめに
シフトレフトというキーワードがあるように、プロセス全体を通して品質を向上させるのが現代のソフトウェア開発のあるべき姿だと思うのですが、とりわけセキュリティについてはリリース直前になって扱われるトピックになっていることが多いのではないかなと思います。今回はそこの是非は深堀りしませんが、手元にあるモノを使って継続的なセキュリティ活動の取っ掛かりになる仕組みをまずは手軽に試してみようと思います。
使うもの
- Github Actions
- Reactアプリ
- Veracode
Veracodeとは
Veracode(ベラコード)って聞き慣れないかと思いますが、これはコードを静的または動的な解析をすることでセキュリティ診断をしてくれるSaaSです。ざっくり言うと、.zipや.warを喰わせると診断して結果をレポートしてくれるというものです。サイトを見ると、2006年からサービス提供していて、現在はグローバルで2600以上の企業が顧客となっており、解析したコードは累計45兆行を超えているそうです。それらの実績を用いて、解析の精度を日々向上させることができているのが強みなんだそうです。ただ、日本国内での導入事例をあまり聞きません。僕もつい最近知りました。国内では類似サービスのyamory.ioのほうが知られているのかなと思います。
作ります
前置きはそこまでにして作ります。作るもののイメージはこんなんです。
ReactアプリをビルドしてS3にアップロードする手前でVeracodeに.zipをアップロードして診断させます。診断は時間がかかるので、S3アップロードからは独立させています。単純に診断を実行する手間を自動化させるだけです。そして、大まかな手順は次の通りです。
- リポジトリを用意する
- 適当なReactアプリを作る
- S3バケットを用意する
- Github ActionsのWorkflowを書く
1〜3は本質ではないからすっ飛ばして、4から
Github ActionsのWorkflowを書く
Workflowを書きます。はい、ドン。
name: Build React
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
- name: Install Dependencies
run: npm install
- name: Build
run: npm run build
- name: Zip build
uses: thedoctor0/zip-release@master
with:
filename: release.zip
path: build
- name: Veracode Upload And Scan
uses: veracode/veracode-uploadandscan-action@0.2.1
with:
# appname
appname: ${{ github.repository }}
# createprofile
createprofile: true
# filepath
filepath: release.zip
# version
version: ${{ github.run_id }}
# vid
vid: ${{ secrets.VERACODE_ID }}
# vkey
vkey: ${{ secrets.VERACODE_KEY }}
- name: Deploy
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: aws s3 cp --recursive --region ap-northeast-1 build s3://XXXXXXX
Veracode Upload And Scan
というステップが今回のキモ。そして、これはMarketplaceから入手できます。なんて簡単なんでしょう。
このWorkflowを流すと、Veracode上に appname
で指定したアプリケーションが生成され、静的解析が実行され、最終的に診断結果を見ることができるようになります👏
最後に
たったこれだけで、リリース直前に「いつやる?」とか「やったっけ?」もしくは「やばいなんか出ちゃった、直さなきゃ」みたいなバタバタはなくなると思います。そもそも3回以上手動でやることは自動化しましょうという話もありますし、ビッグバンな行為は何であっても避けたいですよね。そのためにもシフトレフト。
実装については、当然ながらもっと多彩なパタンはあるかと思いますが(診断結果次第でパイプラインを進めたり止めたり、不具合チケットを自動起票したりなどなど)、今回はまずはここまで。では👋