Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
アプリケーションログをs3に転送するとき個人情報気をつけてますか?
Search
Naka Sho
September 15, 2025
0
1
アプリケーションログをs3に転送するとき個人情報気をつけてますか?
アプリケーションログをs3に転送するとき個人情報気をつけてますか?
Naka Sho
September 15, 2025
Tweet
Share
More Decks by Naka Sho
See All by Naka Sho
Javaはレガシーではない!
shogonakao
0
0
型安全性で考えること
shogonakao
0
1
コーディングエージェントと 筋トレ
shogonakao
0
33
SpringBootでAPI開発
shogonakao
0
140
エキサイトブログ刷新に向けて
shogonakao
0
82
【エキサイトブログリビルド】Spring Boot × MyBatis × FreeMarker を使って、データベースの接続先を安全に変更します。
shogonakao
1
730
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
520
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Done Done
chrislema
185
16k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
51
5.6k
Side Projects
sachag
455
43k
Facilitating Awesome Meetings
lara
55
6.5k
A designer walks into a library…
pauljervisheath
207
24k
The Cult of Friendly URLs
andyhume
79
6.6k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
4 Signs Your Business is Dying
shpigford
184
22k
Transcript
アプリケーションログをs3に転送 するとき個人情報気をつけてます か? 中尾正剛 https://x.com/web_shogo_nakao
はじめに 本日話すこと Amazon S3 Tables データレイクのスケーリングに合わせてクエリのパフォーマンスとコストを最適化 Amazon S3 Tables は、Apache
Iceberg サポートが組み込まれた初めてのクラウドオブジェ クトストアを提供し、表形式データの大規模な保存を効率的に行えるようにします。
はじめに 本日話すこと Amazon S3 は高い耐久性と可用性、低コストで様々なサービスと連携できます。 データの重要性が高まってきました。 S3にログをどんどん転送していこう!! っと考えていませんか?
はじめに 本日話すこと アップロードしているデータ、中身は安全ですか?
目次 Spring Boot + fluentbitを使ってS3に転送する構成 01 02 03 04 Spring
Bootでマスキング fluentbitでマスキング まとめ
FireLens 2か月 無制限 S3のほうがコストが 安い&gzipで保存& athenaでクエリライ クにログ検索 Spring Boot +
fluentbitを使ってS3に転送する構成 障害対応用 緊急で必要あるログ 概要
Spring Boot + fluentbitを使ってS3に転送する構成 fluent-bit設定 [OUTPUT] Name s3 Match springboot.*
Bucket fluent-bit-logs Region us-east-1 Endpoint http://minio:9000 S3_Key_Format /logs/springboot/%Y-%m-%d/%H-%M-%S-$UUID.log Store_dir /tmp/fluent-bit/s3 Use_put_object On compression gzip Auto_Retry_Requests true
Spring Boot + fluentbitを使ってS3に転送する構成 特徴
これはダメでしょう!!! Spring Boot + fluentbitを使ってS3に転送する構成 中身 INFO Method: UserController.register(..) |
Request: {"username":"john_doe","password":"1234"} INFO Method: UserController.register(..) | Response: {"message":"User registered successfully"} INFO Method: UserController.register(..) | Request: {"username":"john_doe","password":"1234"} INFO Method: UserController.register(..) | Response: {"message":"User registered successfully"} INFO Method: UserController.register(..) | Request: {"username":"john_doe","password":"1234"} INFO Method: UserController.register(..) | Response: {"message":"User registered successfully"} INFO Method: UserController.register(..) | Request: {"username":"john_doe","password":"1234"} INFO Method: UserController.register(..) | Response: {"message":"User registered successfully"}
Spring Boot + fluentbitを使ってS3に転送する構成 近年、個人情報漏洩が多い
Spring Bootでマスキング AOP public class LoggingAspect { private static final
Logger logger = LoggerFactory.getLogger(LoggingAspect.class); private final ObjectMapper objectMapper = new ObjectMapper(); @Around("execution(* com.example..*.*(..))") public Object logAndMask(ProceedingJoinPoint joinPoint) throws Throwable { Object[] args = joinPoint.getArgs(); String maskedArgs = maskSensitiveData(args); logger.info("Method: {} | Request: {}", joinPoint.getSignature().toShortString(), maskedArgs); return joinPoint.proceed(); }
Spring Bootでマスキング AOP private String maskSensitiveData(Object data) { if (data
== null) return "null"; try { String json = objectMapper.writeValueAsString(data); ObjectNode jsonNode = (ObjectNode) objectMapper.readTree(json); if (jsonNode.has("password")) { jsonNode.put("password", "****"); } return objectMapper.writeValueAsString(jsonNode); } catch (JsonProcessingException e) { return data.toString(); } }
Spring Bootでマスキング 中身 INFO Method: UserController.register(..) | Request: {"username":"john_doe","password":"****"} INFO
Method: UserController.register(..) | Response: {"message":"User registered successfully"} INFO Method: UserController.register(..) | Request: {"username":"john_doe","password":"****"} INFO Method: UserController.register(..) | Response: {"message":"User registered successfully"} INFO Method: UserController.register(..) | Request: {"username":"john_doe","password":"****"} INFO Method: UserController.register(..) | Response: {"message":"User registered successfully"} INFO Method: UserController.register(..) | Request: {"username":"john_doe","password":"****"} INFO Method: UserController.register(..) | Response: {"message":"User registered successfully"}
fluentbitでマスキング Lua スクリプトを使用してマスキング function mask_sensitive_data(tag, timestamp, record) -- マスキング対象のキー local
keys_to_mask = {"password"} for _, key in ipairs(keys_to_mask) do if record[key] ~= nil then record[key] = "****" end end return 1, timestamp, record end
fluentbitでマスキング fluent-bit設定 [FILTER] Name lua Match * script /etc/fluent-bit/mask.lua call
mask_sensitive_data
Spring Bootでマスキング 中身 INFO Method: UserController.register(..) | Request: {"username":"john_doe","password":"****"} INFO
Method: UserController.register(..) | Response: {"message":"User registered successfully"} INFO Method: UserController.register(..) | Request: {"username":"john_doe","password":"****"} INFO Method: UserController.register(..) | Response: {"message":"User registered successfully"} INFO Method: UserController.register(..) | Request: {"username":"john_doe","password":"****"} INFO Method: UserController.register(..) | Response: {"message":"User registered successfully"} INFO Method: UserController.register(..) | Request: {"username":"john_doe","password":"****"} INFO Method: UserController.register(..) | Response: {"message":"User registered successfully"}
まとめ アプリケーションログをs3に転送するとき 個人情報気をつけてますか? アプリケーション側で実装したほうが柔軟だがレスポンス速度が遅くなる fluentbit側で実装したほうがアプリケーションには優しいが、マスキング処理が複雑に プロジェクトの特性を考え、どちらを優先にするかを考えてください