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

CircleCIのSnyk Orbを使ったCI/CDのセキュリティスキャンへの組み込み

CircleCIのSnyk Orbを使ったCI/CDのセキュリティスキャンへの組み込み

Masahiko Funaki(舟木 将彦)

September 14, 2022
Tweet

More Decks by Masahiko Funaki(舟木 将彦)

Other Decks in Technology

Transcript

  1. 1 舟木 将彦 (@mfunaki) Principal Developer Advocate / CircleCI CircleCI

    の Snyk Orb を使った CI/CD へのセキュリティスキャンの 組み込み CircleCI + Snyk でセキュアなアプリケーション/サービスを実現する
  2. 2 舟木 将彦(@mfunaki) CircleCI合同会社 Principal Developer Advocate ビジネスを支えるソフトウェアが お客様やマーケットに合わせて 継続して進化していくために不可欠な

    ・CI(継続的インテグレーション) ・CD(継続的デリバリ/デプロイ) の意義や価値、進め方を 技術、ビジネス、経営の言葉で お届けしています。 2000~ ◦ AppleのSiriの前身となるDejima社にて 特許出願を含む製品開発 (車載、家電での音声対話操作) 2003~ ◦ データベースベンダー(Sybase)による買収に伴い 自然言語でのデータベース検索や モバイル環境での対話型検索の開発 2013~ ◦ ERPベンダー(SAP)による買収に伴い ERPのモバイル対応や、 自動車関連(電装パーツ、タイヤ、自動車、 再生可能エネルギー)のイノベーション促進 2018~ ◦ 自動車や小売り、製造、金融といった業界に 対して、 アイデア~コード~プロト~製品/サービス 間の時間差を最小限に 2020~ • アイデア~エンジニアによる実装 ~アプリやサービスの間を自動化で結び、  フィードバックループを高速に回すため、 CircleCI にて Developer Advocate に 自己紹介
  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+人の社員 (米国、日本、英国、オランダ、フランス+  リモートワーク)
  4. 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%以上
  5. 7 デリバリー成熟度を上げるためのポイント〜自動化 プラン コード ビルド テスト リリース デプ ロイ 運用

    監視 継続的インテグレーション (CI) 継続的 デプロイ (CD) 自動化できない 非正常系は 自動化できない 自動化できる→継続的であるために自動化すべき 1. ワークフロー実行時間 (10分) 2. スループット 3. 平均リカバリ所要時間 - 変更をキャンセル - 変更で生じた問題を修正 4. ワークフロー成功率  (デフォルトブランチマージ時の    の割合)
  6. 10 縦に伸ばす(自動化実行環境のスペックを上げる) リソースクラスと消費クレジット 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
  7. 11 横に広げる(並列化) 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
  8. 12 横に広げる(並列化) 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
  9. 16 1. ベースとなるワークフロー この名前でイメージをビルド、プッシュ Node Orb, Docker Orbを使い、簡潔な定義+キャッシュ適用で高速化 以前使用したDockerレイヤーのイメージをキャッシュ、再利用し 高速化

    package-lock.jsonファイルが未更新ならキャッシュしたライブラリを 使用 Dockerの - アカウントをチェック (ログインできなければエラー ) - Dockerfileをlintし (記述ミスがあればエラー ) - イメージをビルドし - Docker Hub(コンテナイメージリポジトリ )にPush テスト ビルド リリース
  10. 17

  11. 18 2. Slackによる結果通知を追加 Slack Orb を追加 CircleCIによる実行結果が - fail(失敗)なら basic_fail_1

    テンプレートを使い - pass(成功)なら basic_success_1 テンプレートを使い メッセージを送信する メッセージ送信先は、コンテクスト slack-secrets の中で定義された 環境変数 SLACK_ACCESS_TOKEN, SLACK_DEFAULT_CHANNEL で指定
  12. 19

  13. 20 3. Snyk Orbを使ってイメージをスキャン Snyk Orbを追加 docker build でビルドしたイメージ ($IMAGE_NAME)をスキャンし

    - 問題がなければ、引き続き Docker Hub に PUSH - 問題があれば、 Docker Hub に PUSH せず Slackで失敗メッセージを通知する Snykを使用する際に当たって必要な API Token は、 コンテクスト snyk-secrets の中で定義された 環境変数 SNYK_TOKEN で指定
  14. 21

  15. 25 • 単に「早く」「簡単に」開発するだけでなく、 バグを修正する、さまざまな機能を盛り込むという「量」と 利用者が安心して使えるという「質」の両立が重要 • ビルド、テスト、リリース(CI)、デプロイ(CD)は自動化+高速化可能 ◦ 適切なマシンスペックの選択 +

    並列化の活用 • バグが生まれるのはコード開発時 →問題があるのであれば、できるだけ早く(10分以内)気づけば、  コードの記憶が鮮明なうちに修正に取り掛かれ、より効率的 • 自動化+高速化で10分以下にすることがゴールではなく、 「質」に関わる取り組みを CircleCI Orb を使い、自動化に組み込む 今日お伝えしたかったこと
  16. 27 ソースコードを GitHubなどの ソースコード 管理システムで管理 日時や週次で テストやビルドを 自動実行する コードが追加・修正 されるたび、

    テストやビルドを 自動実行する ソースコードを 共有フォルダ等で 取りまとめる Linux/Windows/iOS /Android/GPU環境 向けビルドを(クラウド で)一元管理 テスト時間を短縮す ることで、作った記憶 がホットなうちに修正 可能に 必要に応じた スペックのビルド環境を 選択可能(縦に伸ばす) 直列実行だけでなく、 並列実行が簡単に 設定可能(横に広げる) レベル1 コード 共有 + 手作業の 自動化 レベル2 コード 履歴共有 + 手作業の 自動化 (巻戻可) レベル3 スペックや 多重度が 変化する 自動化 (高速化= 速く気づき 速く直す) ソフトウェア開発の現況 〜 今の立ち位置を知り、直近のゴールを定める 協力会社からは全体が見えない (見せない)+類似製品間で ほとんど同じコードを手動で仕向け CI/CDが自動化され、常に動くモノが ある状態だが伸びしろが見えない (語学学習で言う「中級者にはなっ たがもっと上達する気がしない」 ) 速さで Qualityと Quantity と 進化を両 立
  17. 28