Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CircleCIでビルド・テストを高速化するだけでなく、よりセキュアに

 CircleCIでビルド・テストを高速化するだけでなく、よりセキュアに

2023年3月9日開催の CircleCI x Fortinet 共催ジョイントウェビナー
「DevSecOpsを実現するための最適なソフトウェア開発とシフトレフト」
での CircleCI の使用スライドです。

https://circleci.connpass.com/event/275623/

More Decks by Masahiko Funaki(舟木 将彦)

Other Decks in Programming

Transcript

  1. 1
    ⾈⽊ 将彦 (@mfunaki)
    Principal Developer Advocate / CircleCI
    CircleCI でビルド・テストを⾼速化
    するだけでなく、よりセキュアに
    DevSecOps を実現するための最適なソフトウェア開発とシフトレフト

    View full-size slide

  2. 2
    ⾈⽊ 将彦(@mfunaki)
    CircleCI合同会社
    Principal Developer Advocate
    ビジネスを⽀えるソフトウェアが
    お客様やマーケットに合わせて
    継続して進化していくために不可⽋な
    ・CI(継続的インテグレーション)
    ・CD(継続的デリバリ/デプロイ)
    の意義や価値、進め⽅を
    技術、ビジネス、経営の⾔葉で
    お届けしています。
    2000~
    ○ AppleのSiriの前⾝となるDejima社にて
    特許出願を含む製品開発
    (⾞載、家電での⾳声対話操作)
    2003~
    ○ データベースベンダー(Sybase)による買収に伴い
    ⾃然⾔語でのデータベース検索や
    モバイル環境での対話型検索の開発
    2013~
    ○ ERPベンダー(SAP)による買収に伴い
    ERPのモバイル対応や、
    ⾃動⾞関連(電装パーツ、タイヤ、⾃動⾞、
    再⽣可能エネルギー)のイノベーション促進
    2018~
    ○ ⾃動⾞や⼩売り、製造、⾦融といった業界に
    対して、
    アイデア〜コード〜プロト〜製品/サービス
    間の時間差を最⼩限に
    2020~
    ● アイデア〜エンジニアによる実装
    〜アプリやサービスの間を⾃動化で結び、
    フィードバックループを⾼速に回すため、
    CircleCI にて Developer Advocate に
    ⾃⼰紹介

    View full-size slide

  3. CircleCIってどんな会社
    ● 世界最⼤規模のクラウドCI/CD(継続的インテグレーション/継続的デプロイ)サービス
    ○ 22,000以上の組織の
    100万以上の開発者が実⾏する
    毎⽉7億以上のジョブを⽀えるサービス
    ● ミッション:
    Manage change
    So software teams can innovate faster
    (変化をマネージしよう、そうすれば
    ソフトウェアチームはより速くイノベーションできる)
    ● 2011年設⽴、サンフランシスコに本社
    2021/05/11 にSeries Fで1億ドルを調達
    (これまでに$315Mの投資、$1.7Bの企業価値)
    ● 600+⼈の社員
    (⽶国、⽇本、英国、オランダ、フランス+
    リモートワーク)

    View full-size slide

  4. 4
    Agenda
    DevOps とソフトウェア デリバリーの成熟度
    ⾃動化された10分で開発効率と質とセキュリティを向上
    【デモ】セキュリティテストの⾃動化への組み込み
    終わりに

    View full-size slide

  5. 5
    DevOps とソフトウェア デリバリーの成熟度

    View full-size slide

  6. 6
    デリバリー成熟度に関わる4つの主要な指標
    4つの指標
    US/Japanの
    CircleCIユーザー中央値
    CircleCIが考える
    ⽬標値
    1. ワークフロー実⾏時間
    3.82分(US)
    3.54分(Japan)
    10分
    (🙅10分以内)
    2. スループット
    (ワークフロー実⾏回数)
    1.67回/⽇(US)
    1.00回/⽇(Japan)
    プルリクエストの数+
    ⾃動実⾏数
    3. 平均リカバリ所要時間
    80.01分(US)
    68.50分(Japan)
    1時間以内
    4. ワークフロー成功率
    (master / main ブランチ)
    77%(US)
    75%(Japan)
    90%以上

    View full-size slide

  7. 7
    デリバリー成熟度を上げるためのポイント〜⾃動化
    プラン コード ビルド テスト
    リリー

    デプ
    ロイ
    運用 監視
    継続的インテグレーション(CI)
    継続的
    デプロイ
    (CD)
    自動化できない
    非正常系は
    自動化できない
    ⾃動化できる→継続的であるために⾃動化すべき
    1. ワークフロー実⾏時間(10分)
    2. スループット
    3. 平均リカバリ所要時間
    - 変更をキャンセル
    - 変更で⽣じた問題を修正
    4. ワークフロー成功率
    (デフォルトブランチマージ時の
    の割合)

    View full-size slide

  8. 8
    ビルド〜デプロイを⾃動化し、現況を⾒える化する
    実⾏回数
    成功確率
    実⾏時間
    クレジット
    消費量 復旧時間

    View full-size slide

  9. 9
    ⾃動化された10分で
    開発効率と質とセキュリティを向上

    View full-size slide

  10. 10
    SAST と DAST
    ● 静的アプリケーションセキュリティテスト
    (SAST)
    ○ プログラムのソースコードを分析して、
    セキュリティ脆弱性を特定
    → 開発の早期段階から実施
    ● 動的アプリケーションセキュリティテスト
    (DAST)
    ○ 悪意あるユーザーのフリをして、
    リモートでのアプリケーションの
    侵⼊をシミュレート
    → 開発プロセス後半で実施
    https://circleci.com/ja/blog/sast-vs-dast-when-to-use-them/

    View full-size slide

  11. 11
    SAST / DAST の⾃動実⾏タイミング
    プラン コード ビルド テスト
    リリー

    デプ
    ロイ
    運用 監視
    継続的インテグレーション(CI)
    継続的
    デプロイ
    (CD)
    自動化できない
    非正常系は
    自動化できない
    ⾃動化できる→継続的であるために⾃動化すべき
    1. ワークフロー実⾏時間(10分)
    2. スループット
    3. 平均リカバリ所要時間
    - 変更をキャンセル
    - 変更で⽣じた問題を修正
    4. ワークフロー成功率
    (デフォルトブランチマージ時の
    の割合)
    SAST DAST

    View full-size slide

  12. 12
    縦に伸ばす(⾃動化実⾏環境のスペックを上げる)
    リソースクラスと消費クレジット
    Docker Executor
    クラス vCPUs RAM クレジット
    small 1 2GB 5クレジット/分
    medium 2 4GB 10クレジット/分
    medium+ 3 6GB 15クレジット/分
    large 4 8GB 20クレジット/分
    Freeプランでは30,000クレジット/⽉が無料で付与
    (smallクラスなら6000分=100時間に相当)
    ※⽉20⽇換算で⼀⽇あたりのジョブ実⾏時間5.0時間
    https://circleci.com/docs/ja/using-docker#available-docker-resource-classes

    View full-size slide

  13. 13
    横に広げる(並列化)
    1
    5
    50 5 45 40 100 60
    1
    0
    30 20
    100
    1
    5
    50
    60
    20
    1
    0
    45
    40
    30
    5
    100
    50
    1
    0
    45
    1
    5
    60
    20 5
    40 30
    1並列
    3並列
    5並列 1’44”
    1’14”
    1’09”
    1’14”
    1’15”
    6:20
    64クレジット
    (¢3.84相当)
    2’09”
    2’09”
    2’09”
    74クレジット
    (¢4.44相当)
    81クレジット
    (¢4.86相当)
    https://circleci.com/docs/ja/parallelism-faster-jobs#test-splitting-to-speed-up-pipelines

    View full-size slide

  14. 14
    セキュリティテストの⾃動化への組み込み

    View full-size slide

  15. 15
    【デモ1】
    ソースコードの修正を起点としたスキャン
    SAST(静的アプリケーションセキュリティテスト)

    View full-size slide

  16. 16
    1. ベースとなるワークフロー
    Node Orb を使い npm install 時にキャッシュ適⽤で⾼速化
    package-lock.jsonファイルが未更新ならキャッシュしたライブラリを
    使⽤
    Dockerコンテナをビルドし、Amazon ECR に登録
    - コンテナのビルド時に、Dockerレイヤーのイメージを
    キャッシュ、再利⽤することでビルド時間を⾼速化
    - ECR登録後は、AWS App Runner でコンテナイメージを
    ウェブアプリケーションとして公開
    テスト
    ビルド

    デプロイ

    View full-size slide

  17. 17
    2. FortiDevSec ‒ SASTでソースコードをスキャン
    Dockerレイヤーキャッシュを有効にすることで、
    Dockerコンテナとして提供される FortiDevSec イメージの更新を
    レイヤーごとにチェックし、未更新であれば既存のキャッシュを使⽤
    →コンテナイメージの取得時間を短縮
    SAST によるスキャンと、ウェブアプリのビルドは並⾏して⾏う
    ことで、コードコミット〜スキャン、ビルド完了までの時間を短縮

    View full-size slide

  18. 19
    【デモ2】
    デプロイ対象に対するスキャン
    DAST(動的アプリケーションセキュリティテスト)

    View full-size slide

  19. 20
    1. FortiDevSec ‒ DASTでデプロイ先をスキャン
    Dockerレイヤーキャッシュを有効にすることで、
    Dockerコンテナとして提供される FortiDevSec イメージの更新を
    レイヤーごとにチェックし、未更新であれば既存のキャッシュを使⽤
    →コンテナイメージの取得時間を短縮

    View full-size slide

  20. 21
    【デモ3】
    コード未更新でも定期実⾏(新たな脅威に対応)
    DAST(動的アプリケーションセキュリティテスト)

    View full-size slide

  21. 22
    パイプラインのスケジュール実⾏
    https://circleci.com/docs/ja/scheduled-pipelines

    View full-size slide

  22. 23
    終わりに

    View full-size slide

  23. 24
    ● バグが⽣まれるのはコード開発時
    →問題があるのであれば、できるだけ早く(10分以内)気づけば、
    コードの記憶が鮮明なうちに修正に取り掛かれ、より効率的
    ● ビルド、テスト、リリース(CI)、デプロイ(CD)は⾃動化+⾼速化可能
    ○ 適切なマシンスペックの選択 + 並列化の活⽤
    ● FortiDevSec を CircleCI と組み合わせて使⽤することで、
    ● ビルドやテストと並⾏しての SAST 実⾏が可能
    ● CircleCI のDockerレイヤーキャッシュを使い、コンテナイメージの
    ビルド + FortiDevSec イメージローディングを⾼速化可能
    ● 単に「早く」「簡単に」開発するだけでなく、
    バグを修正する、さまざまな機能を盛り込むという「量」と
    利⽤者が安⼼して使えるという「セキュリティ」の両⽴が重要
    今⽇お伝えしたかったこと

    View full-size slide

  24. Thank you.
    25

    View full-size slide