Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
脆弱性対応を支える技術/20221127_JJUG-CCC-2022-Fall
skaji18
November 27, 2022
Technology
1
410
脆弱性対応を支える技術/20221127_JJUG-CCC-2022-Fall
JJUG CCC 2022 Fallの発表資料
です。
関連資料
・
変わりゆくAPI連携仕様との付き合い方
・
新規プロダクトの開発速度と品質の両立を支える自動テスト
skaji18
November 27, 2022
Tweet
Share
More Decks by skaji18
See All by skaji18
Vue.js + Firebase のプロジェクトに自動テストを導入した話/20220216_frontend-lt-vol6
skaji18
1
600
走り出したプロジェクトが歩みを止めるまで/20210818 OSS LT vol2
skaji18
0
280
Other Decks in Technology
See All in Technology
ECテックカンファレンス2023 EC事業部のモバイル開発2023
tatsumi0000
0
340
私見「UNIXの考え方」/20230124-kameda-unix-phylosophy
opelab
1
170
💰年度末予算消化祭💰 Large Memory Instance で 画像分類してみた
__allllllllez__
0
120
立ち止まっても、寄り道しても / even if I stop, even if I take a detour
katoaz
0
1.1k
IoTを始めたきっかけの話と個人でできるIoTの今後 / 新年LT会「私の愛するIoT 2023」
you
0
250
WebLogic Server for OCI 概要
oracle4engineer
PRO
3
900
SignalR を使ったアプリケーション開発をより快適に!
nenonaninu
0
710
クックパッドがRubyKaigiに20名以上の社員で参加するわけ
midorikawa
0
400
DNS権威サーバのクラウドサービス向けに行われた攻撃および対策 / DNS Pseudo-Random Subdomain Attack and mitigations
kazeburo
5
1.3k
CES_2023_FleetWise_demo.pdf
sparkgene
0
130
メドレー エンジニア採用資料/ Medley Engineer Guide
medley
3
5.2k
Oracle Cloud Infrastructure:2023年1月度サービス・アップデート
oracle4engineer
PRO
0
180
Featured
See All Featured
Designing the Hi-DPI Web
ddemaree
273
32k
Large-scale JavaScript Application Architecture
addyosmani
499
110k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
214
12k
Creatively Recalculating Your Daily Design Routine
revolveconf
207
11k
Building an army of robots
kneath
301
40k
A Modern Web Designer's Workflow
chriscoyier
689
180k
Embracing the Ebb and Flow
colly
75
3.6k
Design by the Numbers
sachag
271
18k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
182
15k
Docker and Python
trallard
30
1.9k
Statistics for Hackers
jakevdp
785
210k
Typedesign – Prime Four
hannesfritz
34
1.5k
Transcript
©2022 RAKUS Co., Ltd. 脆弱性対応を支える技術 JJUG CCC 2022 Fall -
2022.11.27 梶紳之介
自己紹介 • 梶紳之介 • 株式会社ラクス • 人事労務管理サービス の開発 • Java、Vue.js、(PHP)
2 @s_kaji_18
脆弱性対応、うまくいってますか? 3
例えばこんな課題、ありませんか? 4
やらなきゃいけないけど... • 自動テストがなく、手動テストが必要 ◦ 😇 品質担保に時間がかかる ◦ 😇 テストにかける人員/リソースを用意できない •
リリースにサービス停止が必要 ◦ 😇 顧客影響が発生するため、ビジネスサイドから敬遠される 5 特に 緊急リリース の場合
今日お話すること 6 私達の開発チームが実践している、脆弱性対応をより早く、より安全 にリリースするためのポイントをご紹介します キーワード • 自動テスト • 無停止リリース
目次 • 前提 ◦ 技術スタック概要 • 脆弱性対応のポイント解説 ◦ バージョンアップ環境の準備 ◦
テストによる品質担保 ◦ リリース ◦ メンバーのローカル環境更新 • まとめ 7
8 技術スタック概要 ※今日お話する内容に関連する技術のみ抜粋 • アプリケーション構成 ◦ Java ◦ Spring Boot
• 実行環境 ◦ コンテナ(Docker) on AWS
過去事例に沿ってポイント解説 9 ※事例として Javaのアップデート を扱います
• バージョンアップ環境の準備 ◦ • テストによる品質担保 ◦ • リリース ◦ •
メンバーのローカル環境更新 ◦ ・Oracle Critical Patch Updates の公開 ・脆弱性対応バージョン のリリース 10
11 • バージョンアップ環境の準備 ◦ • テストによる品質担保 ◦ • リリース ◦
• メンバーのローカル環境更新 ◦ ・Oracle Critical Patch Updates の公開 ・脆弱性対応バージョン のリリース
12 バージョンアップ環境の準備 Java を脆弱性対応バージョンにアップデートする • 前提: コンテナ(Docker)を採用 • → Dockerfile
を1行更新するだけ - FROM amazoncorretto:17.0.3-alpine3.15 + FROM amazoncorretto:17.0.4-alpine3.15 ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"]
補足: 依存ライブラリの更新 • 前提: Javaプログラムの依存関係は Gradle で管理 • build.gradle の依存関係を更新するだけ
13 … plugins { - id 'org.springframework.boot' version '2.7.3' + id 'org.springframework.boot' version '2.7.4' } …
14 • バージョンアップ環境の準備 ◦ • テストによる品質担保 ◦ • リリース ◦
• メンバーのローカル環境更新 ◦ ・Oracle Critical Patch Updates の公開 ・脆弱性対応バージョン のリリース
自動テスト で品質担保 テストによる品質担保 15 テスト観点・指標 カバレッジ リグレッション テスト手法 ユニットテスト E2Eテスト
Java プログラムのメソッドレベルの入出力が期待どおりの動作をし ているかを確認する • JUnit5 を採用 • カバレッジは 約85% ◦
サービス開発当初から「テストは書くことが当たり前」の文化 ◦ 特にユニットテストは開発ガイドラインとして定めている ユニットテスト 16
17 ユニットテスト リグレッション観点では、以下の重要機能の動作を確認している • 帳票PDF作成 ◦ ◦ • 外部API連携
ユニットテスト リグレッション観点では、以下の重要機能の動作を確認している • 帳票PDF作成 ◦ 作成したPDFのレイアウトが崩れていないか確認する ◦ Apache PDFBox で画像変換して新旧比較
• 外部API連携 ◦ 想定しているフロー/データのままで連携できるか確認する ◦ 連携先でバッチ処理される(15分前後)までポーリングする 18
ユニットテスト リグレッション観点では、以下の重要機能の動作を確認している • 帳票PDF作成 ◦ 作成したPDFのレイアウトが崩れていないか確認する ◦ Apache PDFBox で画像変換して新旧比較
• 外部API連携 ◦ 想定しているフロー/データのままで連携できるか確認する ◦ 連携先でバッチ処理される(15分前後)までポーリングする 19 関連資料: 変わりゆくAPI連携仕様との付き合い方 https://speakerdeck.com/nologyance/good-practice-of-using-api?slide=23
E2Eテスト ユーザと同じようにブラウザを操作し、システム全体を通して期待ど おりの動作をしているかを確認する • Puppeteer を採用 • ハッピーパス(正常系の代表操作) の動作を担保 20
関連資料: 新規プロダクトの開発速度と品質の両立を支える自動テスト https://speakerdeck.com/noriharu3/automation-testing-supports-both-development-speed-and-quality-of-new-product?slide=23
21 • バージョンアップ環境の準備 ◦ • テストによる品質担保 ◦ • リリース ◦
• メンバーのローカル環境更新 ◦ ・Oracle Critical Patch Updates の公開 ・脆弱性対応バージョン のリリース
リリースモジュールの作成 • Gitのタグを打つと自動で作成する ◦ Java プログラムのビルド ◦ Docker イメージのビルド 〜
プッシュ ※継続的デプロイ には対応していない 22
リリース • イメージをもとにコンテナを起動するだけ ◦ 何台もあるサーバの1台1台にインストールしていくような作業は不要 23
リリース • イメージをもとにコンテナを起動するだけ ◦ 何台もあるサーバの1台1台にインストールしていくような作業は不要 • 無停止でリリース可能 ◦ AWS ECS
の rolling update で実現 24
リリース • イメージをもとにコンテナを起動するだけ ◦ 何台もあるサーバの1台1台にインストールしていくような作業は不要 • 無停止でリリース可能 ◦ AWS ECS
の rolling update で実現 • 無停止 = 顧客への影響が出ない ◦ 顧客への事前周知が不要 25
リリース • イメージをもとにコンテナをきどうするだけ ◦ 何台もあるサーバの1台1台にインストールしていくような作業は不要 • 無停止でリリース可能 ◦ AWS ECS
の rolling update で実現 • 無停止 = 顧客への影響が出ない ◦ 顧客への事前周知が不要 → 開発/インフラチームの準備が整い次第リリースできる!! 26
27 • バージョンアップ環境の準備 ◦ • テストによる品質担保 ◦ • リリース ◦
• メンバーのローカル環境更新 ◦ ・Oracle Critical Patch Updates の公開 ・脆弱性対応バージョン のリリース
Java のバージョン管理ツール(SDKMAN!) を採用 • バージョンアップ担当者 ◦ Git リポジトリの設定ファイル(.sdkmanrc)を更新 • メンバー
◦ SDKMAN! から Java のインストールを促されるので、そのコマンドを実 行するだけ 28 メンバーのローカル環境更新 # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below - java=17.0.3-amzn + java=17.0.4-amzn
まとめ 29
まとめ • コンテナやパッケージ管理ツールを採用 ◦ バージョンアップ作業が簡単 ◦ 本番環境への反映もコンテナを置き換えるだけ • 自動テストで品質担保 ◦
品質担保にかかるリソースを削減 ◦ テスト品質が実施者に依存せず、毎回一定水準を担保できる • 無停止でリリース ◦ 顧客影響が無いため、ビジネスサイドから理解を得やすい 30