Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
安全なログ記録を始めよう
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Takegata
May 21, 2025
Technology
87
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
安全なログ記録を始めよう
2025/05/21 Log Tips LT会
Takegata
May 21, 2025
More Decks by Takegata
See All by Takegata
PRを小さくする勉強会
ratmie
0
39
プロジェクト炎上を予防するためにメンバーひとりひとりができること
ratmie
0
2.5k
プロダクト開発のトラブルを予防するために どうして「大丈夫です」と報告されるのに スケジュールは遅れるのか
ratmie
0
32
銀の弾丸?AWS App Runnerとは
ratmie
0
42
勤怠入力のためにブラウザを開きたくない!
ratmie
0
260
AWS re/Invent 2023 所感とサービス
ratmie
0
22
Other Decks in Technology
See All in Technology
ハードウェアコンペでもAI駆動開発が進んでいる話
iotengineer22
1
710
Datadog の学び方 - あるいは、オブザーバビリティを学ぶとは何か
mananyuki
1
560
TinyGoでオブザーバビリティ?OpenTelemetryはTinyGoで使えるのか / Is OpenTelemetry available in TinyGo environment?
ymotongpoo
2
140
サブエージェントと Claude Mods で作る独自 Advisor ツールの話
kenichiodo
2
140
「Docker Desktop不要の時代」は 来たのか?
ueponx
0
640
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
160
hackers_champloo_2026_tidb
makocchi
0
140
How to Design Configuration for Rails Applications
willnet
0
350
AIは「聞けば答える」から「任せると自分で進める」へ - JACTIMペナン地域部会・ペナン三水会講演
knishioka
0
110
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
890
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
130
Featured
See All Featured
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Bash Introduction
62gerente
615
220k
Embracing the Ebb and Flow
colly
88
5.2k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
WCS-LA-2024
lcolladotor
0
880
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
430
So, you think you're a good person
axbom
PRO
2
2.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Agile that works and the tools we love
rasmusluckow
331
22k
Transcript
NCDC.co.LTD All Rights Reserved. 安全なログ記録をはじめよう Scrub/Redact Sensitive Data Takegata Jumpei
NCDC.co.LTD All Rights Reserved. ロギングしてますか?
NCDC.co.LTD All Rights Reserved. はじめに 開発・分析にログは不可欠 でもうっかりセキュアな情報(個人情報・パスワード・機密など)がログに残ると大変なことに → 削除するのが大変、インシデント、最悪訴訟など… 大きなログ漏洩事例
ログから個人情報や機密が漏洩する事例はしばしば起きている Typetalk (2023 年) : ログからemail, OAuth2.0 のcredential が漏洩 Kid Security App (2023 年) : ユーザーデータを含む3 億件のログが漏洩 Pegasus Airline (2022 年) : ログを含むデータが漏洩し、ログにパスワードや秘密鍵が含まれていた
NCDC.co.LTD All Rights Reserved. 安全にログを書きたい
NCDC.co.LTD All Rights Reserved. どうするか? 2 つのアプローチ 許可リスト形式:安全なものだけ記録する 拒否リスト形式:危険なものを記録しない
NCDC.co.LTD All Rights Reserved. 許可リスト形式:安全なものだけログに出力する 原則記録しない 安全だとわかっているものだけを選択して、明示的に記録する
NCDC.co.LTD All Rights Reserved. 許可リスト形式の例 function safeLog(data) { const safeFields
= ['id', 'status', 'timestamp']; const logObject = {}; safeFields.forEach(field => { if (data[field] !== undefined) logObject[field] = data[field]; }); console.log(JSON.stringify(logObject)); } safeLog({ name: "John", password: "foo123", id: "1", status: 200, timestamp: "2025/05/21T10:00:00.123Z", }) // { // "id": "1", // "status": 200, // "timestamp": "2025/05/21T10:00:00.123Z" // }
NCDC.co.LTD All Rights Reserved. 拒否リスト形式:危険なものをログから隠す 原則記録する 危険と指定したデータのみマスクする仕組み どうやる? object の特定キーがあったときに別の文字列に置き換える
ハッシュ化や暗号化などをしたものをログに出力する
NCDC.co.LTD All Rights Reserved. 拒否リスト形式の例 function redactLog(data) { const sensitiveFields
= ['mail', 'email', 'password', 'name', 'token']; // 危険なkey const logObject = {...data}; sensitiveFields.forEach(field => { if (logObject[field]) logObject[field] = '***REDACTED***'; }); console.log(JSON.stringify(logObject)); } redactLog({ name: "John", password: "foo123", id: "1", status: 200, timestamp: "2025/05/21T10:00:00.123Z", }) // { // "name": "***REDACTED***", // "password": "***REDACTED***", // "id": "1", // "status": 200, // "timestamp": "2025/05/21T10:00:00.123Z" // }
NCDC.co.LTD All Rights Reserved. どう使うの? 2つのアプローチを組み合わせる。 まず、ログを書くときは必要かつ安全な情報だけをえらぶように心がける:許可リスト思考 そのうえで、共通の仕組みでマスク処理をガードレールとして実装しておく:禁止リストの実装 logger の中で書き換える仕組みを使うとよい
pino のredact option winston のformatter nestjs のintercepter
NCDC.co.LTD All Rights Reserved. その他考えたこと Q. 特定key をマスクする場合、nest したオブジェクトについて再帰的に処理する必要があるのでは? そうですね
そもそも深いnest があるオブジェクトをログに出す必要があるか? sentry は送信時にnest のdepth 上限を決めて、それ以上は[object] として送っている Q. ユーザーが自由に入力できる項目に個人情報などが記載されたら? 正規表現でマスクする、などは可能ではあるが網羅性・未検知などもあるのであまりやりたくない できるだけ入力しない仕組みにしたい UI 上で特定キーワードはフィルタリングする 注意喚起をする 何がsensitive な情報なのか、どのkey を指定するべきかはドメインに依る 扱っているデータと向き合う
NCDC.co.LTD All Rights Reserved. まとめ ログをセキュアにするには小さな取り組みから まずは一度ログをaddress, token などでgrep してみませんか?
NCDC.co.LTD All Rights Reserved. 参考 https://github.com/pinojs/pino/blob/main/docs/redaction.md https://github.com/winstonjs/winston?tab=readme-ov-file#formats