本記事は、当社オウンドメディア「Doors」に移転しました。
約5秒後に自動的にリダイレクトします。
CI/CDで利用している「CircleCI」のワークフロー機能を使って改善を行い、「DevSecOps」の考え方を取り入れたことや、リリースエンジニアリングの視点をもとに整理した内容や利用したツールについても紹介しています。
こんにちは。プロダクト開発部、新卒2年目の城田です。
ブレインパッドの自社開発プロダクトチームでは、CI/CD (継続的インテグレーション/継続的デリバリー)でCircleCIを主に利用しています。
今回は「CircleCI」というプラットフォームのワークフロー機能を使って、コンテナのビルドとデプロイ部分の改善を行い、「DevSecOps」の考え方を取り入れてみたので、本ブログでその内容について紹介します。また、リリースエンジニアリングの観点で整理した項目や取り組んだこと、その際に使用ツールについても簡単にご紹介します!
「DevSecOps」とは
まず「DevOps」という言葉は、IT関係の仕事に従事する方なら聞き覚えのある方も多いのではないでしょうか?
「DevOps」とは、開発チームと運用チームが連携し、ソフトウェアの開発・リリースプロセスをより柔軟に実行する開発手法です。
これにより、開発サイクルを迅速かつ頻繁に回せるようになることが期待できます。
しかし、いくら開発サイクルが迅速になってもその分セキュリティ面が疎かになり、リリース直前で大幅な手戻りが発生していてはあまり意味がありません。
そこで、開発と運用の観点にセキュリティの観点も組み込んで、開発サイクルを回せるようにしたのが「DevSecOps」の考え方です。
「DevSecOps」については、当社の運営するDX Media「DOORS」に詳しく紹介されていますので興味のある方はぜひご一読ください!
改善したワークフロー内容
「DevSecOps」の考え方を取り入れるために改善したワークフローの改善前と改善後の状況を以下の図に示します。
リリースエンジニアリングの観点での整理
ここでは、Google 社が発表している書籍「Site Reliability Engineering」の8章で定義されているリリースエンジニアリングに関する4つの哲学に従って今回の改善前、改善後の状況を整理していきます。
項目 | 改善前 | 改善後 |
---|---|---|
セルフサービスモデル(Self-Service Model) | 開発者はapplicationを作成すれば良し | 変わらず、Testが入った分、暗黙知をコード化 |
高速化(High Velocity) | Image Buildのみ | Testを通過分、処理時間は延びたがSecureなものを提供という意味では高速化 |
密封ビルド(Hermetic Builds) | docker commandのみ | OSSのコマンドの依存度が増えたが、単独でビルドは可能 |
ポリシーと手順の強制(Enforcement of Policies and Procedures) | TestやSecurityへの観点は個人任せ | TestやSecurityの観点を一様に適用する形 |
取り組んだ内容や利用したツールの紹介
リリースエンジニアリング視点で整理した改善項目を実現するために、以下のツールを利用しました。
- Dockerfile のScan に hadolint を利用
- Build の高速化として .dockerignore を設定
- Container のテストに goss/dgoss を利用
- Security Scanに trivy と dockle を利用
CircleCI例(ymlファイル)
- run: name: lint dockerfile command: hadolint <image name:tag>:${CIRCLE_BUILD_NUM} - run: name: test docker image environment: GOSS_FILES_STRATEGY: cp # circleci では設定する必要がある command: | cp <path to goss yaml>/goss.yaml . dgoss run -e ENV_VAR="123" <image name:tag>:${CIRCLE_BUILD_NUM} /bin/sh - run: name: image scan trivy command: trivy --exit-code 1 <image name:tag>:${CIRCLE_BUILD_NUM} - run: name: image scan dockle command: dockle -c 1 <image name:tag>:${CIRCLE_BUILD_NUM}
改善点の比較
項目 | 改善前 | 改善後 |
---|---|---|
Building,Packaging | Dockerfile で実行 | .dockerignore を追加してビルド速度を高速化 |
Branching | masterのみからcontainer作成 | 同じ |
Testing Dockerfile | なし | hadolint でテスト |
Testing Container | なし | dgoss でテスト |
Testing Scan | なし | trivy,dockle でテスト |
Deployment | docker push | 同じ |
これにより、コンテナのビルドとデプロイ部分におけるワークフローにセキュリティに関するチェックが追加され、「DevSecOps」の考え方を取り入れることができました。
参考ページ
今回は以上になります!
今後も継続してプロダクト開発の事例を発信していこうと思います!
最後になりますがブレインパッドではエンジニア採用を積極的に行っております。
ご興味のある方は是非ご応募お待ちしております!