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
7
アプリケーションログをs3に転送するとき個人情報気をつけてますか?
アプリケーションログをs3に転送するとき個人情報気をつけてますか?
Naka Sho
September 15, 2025
Tweet
Share
More Decks by Naka Sho
See All by Naka Sho
単体テストの精度を高めるための guideline
shogonakao
0
45
Javaはレガシーではない!
shogonakao
0
12
型安全性で考えること
shogonakao
0
11
コーディングエージェントと 筋トレ
shogonakao
0
44
SpringBootでAPI開発
shogonakao
0
140
エキサイトブログ刷新に向けて
shogonakao
0
110
【エキサイトブログリビルド】Spring Boot × MyBatis × FreeMarker を使って、データベースの接続先を安全に変更します。
shogonakao
1
780
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
Site-Speed That Sticks
csswizardry
13
920
BBQ
matthewcrist
89
9.8k
What's in a price? How to price your products and services
michaelherold
246
12k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
116
20k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Faster Mobile Websites
deanohume
310
31k
Optimizing for Happiness
mojombo
379
70k
Done Done
chrislema
185
16k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
22k
Building Applications with DynamoDB
mza
96
6.7k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
630
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側で実装したほうがアプリケーションには優しいが、マスキング処理が複雑に プロジェクトの特性を考え、どちらを優先にするかを考えてください