Slide 1

Slide 1 text

コンテナイメージを複数のチームで扱うための、 ビルドフローの構築・運用 2024年11月29日 株式会社コドモン 小西達大 ゆるSRE勉強会 #8

Slide 2

Slide 2 text

2 経歴 1996年生まれ、大阪育ち。前職でアプリケーションエンジニアとし て従事後、株式会社コドモンのSREチームにジョイン。 関心のある分野はコンテナとセキュリティ。 自己紹介 小西 達大 こにし たつひろ

Slide 3

Slide 3 text

3 Mission

Slide 4

Slide 4 text

4 すべての先生に 子どもと向き合う 時間と心のゆとりを こんなプロダクトを開発しています メインプロダクトは、保育・教育施設向けWebアプリケーション。 保護者と施設のやり取りを支えるモバイルアプリケーションや、施設職員向けモバイル版 アプリケーション、外部サービスと連携するAPIなども開発しています。

Slide 5

Slide 5 text

5 全国のこども施設へのICT普及実績 ● 2014年のサービスリリース以降、全国的に導入が拡大し、現在は保育業務支援システムとして 国内で最も普及が進んでいます。(※) 2022年4月 14,800 2021年4月 11,400 2020年4月 8,000 2019年4月 5,200 2018年4月 3,000 1,500 全国導入数 20,000 施設 2024年11月現在 20,000 園児数   : 約176万人 職員数   : 約40万人 保護者数  : 約315万人 99 継続利用率 .8% 2023年4月 ※東京商工リサーチ「SaaS型業務支援システムの導入園調査2022」 5

Slide 6

Slide 6 text

6 今日話すこと 複数チームが関わるシステムにおいて、ビルドフローで重要なこと ビルドフローの構築・運用について

Slide 7

Slide 7 text

7 弊社のシステム・組織構成について

Slide 8

Slide 8 text

8 CONFIDENTIAL - © 2022 CoDMON Inc. 8 システム構成 ・メインのサーバーはEC2 ・機能単位でマイクロサービ ス(ECS Fargate)に切り出し ている

Slide 9

Slide 9 text

9 CONFIDENTIAL - © 2022 CoDMON Inc. 9 システム構成と組織 ・マイクロサービス(ECS Fargate)ごとに担当チームが 存在し、コード・インフラ両 方を見ている ・メインサーバーのコードは 複数チームが触る ・メインサーバーのミドル ウェア、インフラ設定はSRE チームが管理している

Slide 10

Slide 10 text

10 CONFIDENTIAL - © 2022 CoDMON Inc. 10 直近取り組んだシステム構成変更 ・メインサーバーを、EC2 → ECS(Fargate)に移行した ・アプリケーションをコンテ ナ化した

Slide 11

Slide 11 text

11 CONFIDENTIAL - © 2022 CoDMON Inc. 11 直近取り組んだシステム構成変更 ・各チームがメインアプリ ケーションのコンテナイメー ジを扱う ・SREチームに閉じていたミ ドルウェア構成管理の責務 が、開発チームに広がる

Slide 12

Slide 12 text

12 CONFIDENTIAL - © 2022 CoDMON Inc. 12 直近取り組んだシステム構成変更 複数チームがコンテナイ メージを安全に扱うための ビルドフローを検討 ・各チームがメインアプリ ケーションのコンテナイメー ジを扱う ・SREチームに閉じていたミ ドルウェア構成管理の責務 が、開発チームに広がる

Slide 13

Slide 13 text

13 CONFIDENTIAL - © 2022 CoDMON Inc. 13 ビルドフローの構築で重要視したこと ● 安全性が担保されたイメージのみ、本番環境にデリバリーされる仕組み ○ 多くの人・チームがコンテナイメージに手を加えるため、安全性を担保する仕組 みを作ることが重要

Slide 14

Slide 14 text

14 CONFIDENTIAL - © 2022 CoDMON Inc. 14 ビルドフローの構築・運用に取り入れたプラクティス 1. 脆弱性スキャンをCICDに組み込む 2. チェック済のイメージのみ本番環境にデリバリーする

Slide 15

Slide 15 text

15 1:脆弱性スキャンをCICDに組み込む

Slide 16

Slide 16 text

16 CONFIDENTIAL - © 2022 CoDMON Inc. 16 脆弱性スキャンの重要性 ● 複数チームにまたがる大規模システムの場合、「多くのサードパーティライ ブラリ・パッケージが導入されている」「それらをいつ誰が導入したかの管 理が難しい」ため、脆弱性スキャンが重要

Slide 17

Slide 17 text

17 CONFIDENTIAL - © 2022 CoDMON Inc. 17 脆弱性スキャンを有効活用するためのポイント ● パイプラインの中で、なるべく早期に脆弱性を検出し、問題を取り除くこと が大切 ○ 本番環境のリポジトリにPush後や、デプロイ後の検知だと、問題の修復に時間が かかったり、対応が後回しになったりする ○ 脆弱性スキャンをCICDに組み込み、ビルドしたコンテナイメージに対してスキャ ンを実行することで、問題の早期発見が可能になる

Slide 18

Slide 18 text

18 CONFIDENTIAL - © 2022 CoDMON Inc. 18 脆弱性スキャンツールの選定 ● 脆弱性スキャン製品は数多く存在するが、Amazon Inspector を利用 ○ マイクロサービスチームで利用実績があり、開発チームに馴染みが深い ○ メインサービス側も、レポジトリPush後の継続的スキャンはAmazon Inspector を使うので、それに合わせたい

Slide 19

Slide 19 text

19 CONFIDENTIAL - © 2022 CoDMON Inc. 19 脆弱性スキャンツールの選定 ● 脆弱性スキャン製品は数多く存在するが、Amazon Inspector を利用する ○ マイクロサービスチームで利用実績あり ○ メインサービス側も、レポジトリPush後の継続的スキャンはAmazon Inspector を使うので、それに合わせたい ただし、ECR拡張スキャンによってInspectorと統合した場合は、レポジトリにコンテナイ メージをPushして以降でないとスキャンを実施できない・・・

Slide 20

Slide 20 text

20 CONFIDENTIAL - © 2022 CoDMON Inc. 20 脆弱性スキャンツールの選定 ● Amazon Inspector CI/CD統合 ○ re:Invent 2023 で発表された機能 ○ https://docs.aws.amazon.com/ja_jp/inspector/latest/user/scanning-cicd.html 1. 提供されたアーティファクトからSBOM(ソ フトウェア部品表)を生成 2. SBOMをAmazon Inspectorに送信し、脆弱 性レポートが生成される ビルドしたコンテナイメージに対して、脆 弱性スキャンを実施可能に

Slide 21

Slide 21 text

21 CONFIDENTIAL - © 2022 CoDMON Inc. 21 脆弱性スキャンツールの選定 ● 公式からGithubActionsが提供されているので、利用する ○ https://github.com/aws-actions/vulnerability-scan-github-action-for-amazon-ins pector

Slide 22

Slide 22 text

22 CONFIDENTIAL - © 2022 CoDMON Inc. 22 脆弱性スキャンをCICDに組み込んだビルドフロー

Slide 23

Slide 23 text

23 CONFIDENTIAL - © 2022 CoDMON Inc. 23 脆弱性レポートの見え方 ● GitHub Actionsの実行サマリページに結果が表示される

Slide 24

Slide 24 text

24 CONFIDENTIAL - © 2022 CoDMON Inc. 24 運用時のポイント:抑制ルールの実装 ● CICDに脆弱性スキャンを組み込む場合、抑制手段の提供が必要 ○ 脆弱性が検知されると、デプロイを失敗させている場合 ○ 抑制手段がないと「対応不要と判断された場合」「対応必要だがすぐに対応で きない場合」といった例外的なケースで、リリースできない

Slide 25

Slide 25 text

25 CONFIDENTIAL - © 2022 CoDMON Inc. 25 運用時のポイント:抑制ルールの実装 ● ただし、Amazon Inspector CICD統合機能では、今のところ抑制機能は用 意されていない・・・ ○ https://github.com/aws-actions/vulnerability-scan-github-action-for-a mazon-inspector/issues/90

Slide 26

Slide 26 text

26 CONFIDENTIAL - © 2022 CoDMON Inc. 26 運用時のポイント:抑制ルールの実装 ● 「抑制対象として指定された脆弱性IDについては、検出されてもスルーす る(デプロイを失敗させない)」という部分を自前で実装

Slide 27

Slide 27 text

27 CONFIDENTIAL - © 2022 CoDMON Inc. 27 運用時のポイント:抑制ルールの実装 ● ただ抑制機能を提供するだけだと、脆弱性スキャンが形骸化したり、対応 されていない脆弱性を見逃してしまう ○ SREチームで以下を取りまとめている ■ 「何を」「どんな理由で」抑制しているのか ■ (対応必要な場合)「いつ」「どのチームが」対応するのか

Slide 28

Slide 28 text

28 2:チェック済のイメージのみ本番環境にデリバ リーする

Slide 29

Slide 29 text

29 CONFIDENTIAL - © 2022 CoDMON Inc. 29 元々の本番デプロイフロー ※ 現在は1日に複数回リリースしているの で、あくまでイメージです 10:00~10:30:リリース予定の変更をstg 環境にデプロイ 10:30~13:00:リリース予定の変更がある チームは動作確認実施 13:00~:リリース予定の変更を本番環境に リリース

Slide 30

Slide 30 text

30 CONFIDENTIAL - © 2022 CoDMON Inc. 30 Stg環境へのデプロイについて ● デプロイ実施前に、各種チェックを実施 ○ 【既存から存在】各種自動テスト(Unit Test・E2E Test) ○ 【コンテナ化に伴い新設】コンテナイメージに対する脆弱性スキャン ● チェックを通過したコンテナイメージのみ、Stg環境のリポジトリにPush される ○ 本番環境でもこのイメージをそのまま使うことで、信頼されたイメー ジのみ本番環境にデリバリー可能

Slide 31

Slide 31 text

31 CONFIDENTIAL - © 2022 CoDMON Inc. 31 ECRイメージレプリケーション機能を利用 ● 複製元リポジトリへのPushをトリガーに、異なるリージョンやアカウン トにイメージを複製可能 ● リポジトリ単位で、複製する/しない を指定可能

Slide 32

Slide 32 text

32 CONFIDENTIAL - © 2022 CoDMON Inc. 32 ECRイメージレプリケーションの設定 【複製元アカウント】 レプリケーション設定で、複製したいア カウントID・リージョンを指定 【複製先アカウント】 レジストリのアクセス許可設定で、複製 を許可するリポジトリを指定

Slide 33

Slide 33 text

33 CONFIDENTIAL - © 2022 CoDMON Inc. 33 ECRイメージレプリケーションを用いたフロー 安全性が担保されたイメージのみ、本 番環境にデプロイされるようになる

Slide 34

Slide 34 text

34 CONFIDENTIAL - © 2022 CoDMON Inc. 34 レプリケーション利用時のポイント1 ● コンテナイメージの環境依存をなくす ○ 例えば、コードのビルド時に環境変数を埋め込んでいたり、環境ごとに設定 ファイルが違っていたりすると、stg環境用にビルドしたイメージを本番環境 に適用できない ○ どの部分に環境依存が含まれるか は、システムによって異なるため、事前に 確認し、取り除いておくことが必要

Slide 35

Slide 35 text

35 CONFIDENTIAL - © 2022 CoDMON Inc. 35 レプリケーション利用時のポイント1 ● ソースコードの環境依存 ○ ビルド時に環境依存値を埋め込まない形に修正 ● サーバー用の設定ファイル ○ stg・本番環境では同様の設定ファイルを利用する ● 環境変数ファイル ○ コンテナ起動時に作成 ○ 環境変数値はコンテナ(ECSタスク)起動時にSecrets Managerから取得可能

Slide 36

Slide 36 text

36 CONFIDENTIAL - © 2022 CoDMON Inc. 36 レプリケーション利用時のポイント2 ● どのイメージがデプロイ済か(運用環境で動作しているか)を明確にする ○ 例えばstg環境動作確認時に問題点が発覚し、修正バージョンを含めて再度stg にデプロイすると、本番環境のリポジトリに、実際にはリリースされなかった イメージが含まれてしまう ○ 誤ったイメージが本番環境にデプロイされてしまう可能性

Slide 37

Slide 37 text

37 CONFIDENTIAL - © 2022 CoDMON Inc. 37 レプリケーション利用時のポイント2 ● 本番デプロイフローの中で、本番リリース対象のコンテナイメージには別 名のイメージタグを付与する ○ https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/image-retag.html ● どのイメージが本番デプロイ済か、一 目でわかるようにする ● 元々付与されていたイメージタグ or 別名のイメージタグ どちらでイメー ジpullしても同じ結果となる

Slide 38

Slide 38 text

38 まとめ

Slide 39

Slide 39 text

39 CONFIDENTIAL - © 2022 CoDMON Inc. 39 まとめ ● 複数チームでコンテナイメージを扱う際は、ビルドフローの中で信頼できる イメージのみ本番環境にデリバリーされるように工夫する ● AWSマネージドサービスを活用することで、構成・運用をシンプルに保つこ とが可能

Slide 40

Slide 40 text

40 最後に

Slide 41

Slide 41 text

41 コドモン採用ページ 開発ブログ コドモンでは一緒に働きたい仲間を募集しています!

Slide 42

Slide 42 text

42 CONFIDENTIAL - © 2022 CoDMON Inc. 42 宣伝

Slide 43

Slide 43 text

No content