$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
アプリケーションログをs3に転送するとき個人情報気をつけてますか?
Search
Naka Sho
September 15, 2025
0
15
アプリケーションログをs3に転送するとき個人情報気をつけてますか?
アプリケーションログをs3に転送するとき個人情報気をつけてますか?
Naka Sho
September 15, 2025
Tweet
Share
More Decks by Naka Sho
See All by Naka Sho
単体テストの精度を高めるための guideline
shogonakao
0
220
Javaはレガシーではない!
shogonakao
0
31
型安全性で考えること
shogonakao
0
11
コーディングエージェントと 筋トレ
shogonakao
0
71
SpringBootでAPI開発
shogonakao
0
150
エキサイトブログ刷新に向けて
shogonakao
0
130
【エキサイトブログリビルド】Spring Boot × MyBatis × FreeMarker を使って、データベースの接続先を安全に変更します。
shogonakao
1
820
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
How to Ace a Technical Interview
jacobian
280
24k
Docker and Python
trallard
46
3.7k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Designing for humans not robots
tammielis
254
26k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Visualization
eitanlees
150
16k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
How STYLIGHT went responsive
nonsquared
100
5.9k
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側で実装したほうがアプリケーションには優しいが、マスキング処理が複雑に プロジェクトの特性を考え、どちらを優先にするかを考えてください