DOORS DX

ベストなDXへの入り口が
見つかるメディア

開発環境向けの配布コンテナのCI/CDに「DevSecOps」の考え方を取り入れた話

公開日
2021.04.23
更新日
2024.03.13

ブレインパッドの自社開発プロダクトチームの新卒2年目のメンバーが、自社プロダクトの開発フローを改善した取り組みをブログにしました。
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の観点を一様に適用する形

取り組んだ内容や利用したツールの紹介

リリースエンジニアリング視点で整理した改善項目を実現するために、以下のツールを利用しました。

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,PackagingDockerfile で実行.dockerignore を追加してビルド速度を高速化
Branchingmasterのみからcontainer作成同じ
Testing Dockerfileなしhadolint でテスト
Testing Containerなしdgoss でテスト
Testing Scanなしtrivy,dockle でテスト
Deploymentdocker push同じ

これにより、コンテナのビルドとデプロイ部分におけるワークフローにセキュリティに関するチェックが追加され、「DevSecOps」の考え方を取り入れることができました。

参考ページ


今回は以上になります!

今後も継続してプロダクト開発の事例を発信していこうと思います!

最後になりますがブレインパッドではエンジニア採用を積極的に行っております。

ご興味のある方は是非ご応募お待ちしております!

https://www.brainpad.co.jp/recruit/


このページをシェアする

株式会社ブレインパッドについて

2004年の創業以来、「データ活用の促進を通じて持続可能な未来をつくる」をミッションに掲げ、データの可能性をまっすぐに信じてきたブレインパッドは、データ活用を核としたDX実践経験により、あらゆる社会課題や業界、企業の課題解決に貢献してきました。 そのため、「DXの核心はデータ活用」にあり、日々蓄積されるデータをうまく活用し、データドリブン経営に舵を切ることであると私達は考えています。

メールマガジン

Mail Magazine