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
free_world21
December 13, 2019
Technology
1.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
金融機関の(システムの)作り方
https://ginza-rails.connpass.com/event/155467/
銀座Rails#16 @リンクアンドモチベーション
で発表したスライドです。
free_world21
December 13, 2019
More Decks by free_world21
See All by free_world21
RubyとGoでゼロから作る証券システム: 高信頼性が求められるシステムのコードの外側にある設計と運用のリアル
free_world21
1
6.4k
DjangoとRailsを使って趣味として政治資金を透明化するプロダクトを作ってる話
free_world21
0
110
Ruby on Rails on Kubernetesってどうなの?
free_world21
0
50
大事なデータを守りたい!ActiveRecord Encryptionと、より安全かつ検索可能な暗号化手法の実装例の紹介
free_world21
0
72
Ruby on Rails と Django を比較してみる
free_world21
1
330
Shinjuku.rb#95:心の技術書紹介
free_world21
1
360
Rails engineを用いたゆるふわモジュラーモノリス のご紹介
free_world21
1
510
『Railsオワコン』と言われる時代に、なぜブルーモ証券はRailsを選ぶのか
free_world21
3
1.6k
東証障害報告書を読み解く
free_world21
0
370
Other Decks in Technology
See All in Technology
AIエージェント統制はAPIから——押さえるべき5つの要素
nagix
0
120
IBC 2026 動画技術関連レポート / IBC 2026 Report
cyberagentdevelopers
PRO
2
210
公共システムAdventCalendar2026
toru_kubota
0
160
PostgreSQL オプティマイザ統計の秘密
nori_shinoda
0
320
FinOpsを導入してマルチプロダクトのコスト最適化を実現する
kworkdev
PRO
0
120
推論基盤と Scale-Up Interconnect の現状と制約から俯瞰する技術動向
markunet
2
800
AIがGISを代替する日:〜すべてをAIが創る時代に、私たちがFOSS4Gに関わる意味〜
lehupa
1
210
攻撃 3 時間 vs 復旧 10 時間。アクセスキー流出の非対称性を体感するために CTF を作った話
kazzpapa3
1
140
渡米前の準備を制す!re:Invent 2026徹底準備術 / The Ultimate Preparation Guide for re:Invent 2026
yuj1osm
1
540
セキュリティ専任チームなしで攻撃を先回りするSREが実践したSIEM on Amazon OpenSearch Service
cscengineer
PRO
0
140
OneLakeをデータソースにした AI Search(Foundry IQ)の ライフサイクル管理
ryuseiiida
0
220
Autonomous AI Lakehouse - Live AI Hubから始めるセキュアなAIデータ活用 -
oracle4engineer
PRO
3
190
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Odyssey Design
rkendrick25
PRO
2
920
Raft: Consensus for Rubyists
vanstee
143
7.8k
Building an army of robots
kneath
307
47k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.7k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
60k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The Invisible Side of Design
smashingmag
301
52k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
570
Believing is Seeing
oripsolob
1
270
HDC tutorial
michielstock
2
1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.4k
Transcript
׺¡3 TV]n3 ìA 2019.12.13 ÁőRails#16 @free_world21
▪ ±ľ cLv 35 ▪ : ƇĪ ½2lIz_ĿŇàÐ ▪ Œ:
jxOtm – RVGMLP?8P>E3 – ÎVQYi ▪ 2008: hu tzVLzUaG/"-ᢠ– flash/C#/rails/iOS/Android ▪ 2009: |¸ëŅŧ çÔ²é¸ŅĈ ▪ 2009: IPAŐœ2ōŬ!CB ▪ 2016: LotZòă~2Čÿ ▪ 2018: űĔ© ▪ 2019: hu tzV~©/"-÷¹ @free_world21
LotZòă~ ▪ 2016}Ũ ▪ ×.3Ĺ3ńİD"1Ĺ4Ń – 2017: EMERADA EQUITY ▪
ÑĹĊûàŪć»Ů ×ēþ»Ë – 2018: EMERADA BANK ▪ ş – 2019: EMERADA MARKETPLACE ▪ à£ÚŖ· 2Ŕ
None
None
Ő3VY _G[j3ò òÝ¶È DNtJ`hFz^HzOD¤#- ĭÏ$BR gVDğŤ 2017}11R gVuu V 2019}10ŭķðĘDŃ
×4čÀ ▪ ūŕÀ – hÙÒ - ,z0Æ%w¦¬!W] , – }WV}Wh
– o©Vo©Vh ▪ ńİÀ – hÙÒ - ,z0Æ**W]!ÇÁ0¤ ! – ³VX®£vh – ×XV×XVh – dfÒtWV}Wh – à¾gËÈVmXfh
r S3 a W @3 ¿Ķ
r S3 a W @3 ¿Ķ
ðĘDĬ2Ĥ¦"8$ ▪ ×ēþ»Ë§ ▪ ×ēþ»Ë§üť ▪ ×ēþ»Ë§üčŘ ▪ ▪
Ø~čŘ ĥ ý Ō « https://www.fsa.go.jp/common/law/guide/kinyushoh in/index.html
;3$ ů28/:8$ ▪ ºó¿æ1Ð – §a Þ'0[-,S0ç+#( µ¸q – §z'ÞÀ¹S
ëè0,` ▪ ĵijŢè3?1jxXVDğŤ"8"> ▪ '3ƀš;*<E/ę"8"> – z!æÑn00ì ¸q0ßÖ#( ▪ çÔ/#Ä2*<ž¬ – ÝÅ zÞ0,`!ID/Pass %#( OTP ▪ Ŋºó¿æ1Ð – U`G25N ´Ä0ßÖ#( – Ï.O:0 #( – ^ ceT _ Õ²Ðá0#( – OS'IDN673 ïÛº~#( – u 39@? ã^Ì$#( – Ͱ⠫ ) #( ▪ '3Ŏ – j\B?Cr¥0 +Ók|0Yc&1·Ø#( – ½ # ¶*éÃÝÅ'x±pÜ#( – j\eÊ!¢eÊ),Zybª0#( – ;PB4P>7P=HLP0aåÓ0#(
None
řĬ
Izht
Izht ¨1ŏŲ1ʼnļ3ƄĒ DOSʼnļ XXIzUKNTsz wordpress3ƊũÃD,(ʼnļ v v4ſ 2¨¯!&-í
Izht assetsłhFIv3Mp[Tq¯2?BĕųņÞ ĎŀIJ¨Î2?Br Sgu]H3Î LBÍ¥.ÌÍ3500Ĩï"(@ CF@Lt k UDġÉ
Izht ċAZ63x `etzTzO SSLāţĐ²
Izht Autoscale2?BĞ2XïÍ ĕų24Yï8.VP v IzVYzVŚ1A2 1+(/;¹īŋ EC2IzVYzV.4 docker container/"-rails(puma) ¹
Izht Aurora2?BƆ ğÅ ã4master63Ŧ9ô. masterėŚ4slave¹ŗø
Izht G[jx `!C(hFIvDĀ Û¿1;34ŸŔ¯"-
Izht ŸŔƃ4KMS.äģ²
4,3RailsjxUKN_ userrails adminrails DB common_models common_models useröcontrollers admin_models useröviews adminöcontrollers
adminöviews rails Žł_models Žłcontrollers ŽłDB ▪ user³railsGju ▪ admin³railsGju ▪ common engine ▪ ŽłrailsGju database - common_comments - common_posts - common_users - ads - admin_users - payments
ŸŔ¯2,- AWS KMS ▪ Customer Master KeyCMKDÜ"-data key "ŸŔƃ D¿ê$
B – A ▪ Í¥3;3KMS@Ģ+-B – A: ¡ æÑì – B: A æÑn-% ▪ A.ŸŔ¯"-'C4ĚĺBDDB102°Ľ"- ▪ BDKMS2Ó,B/īŔ¯"-Ģ"-CB ADå@CB 3.^ Y «DA.īŔ¯$B CMK has_many :data_keys
Űą2Ů( ▪ attr_encrypted /gemŠÒ)+( ▪ ċmodel3attributeDŰą2ŮB personal_info.first_name = ”cLv” personal_info.last_name
= “±ľ” personal_info.save! personal_info = PersonalInfo.find(1) puts personal_info.first_name # => “cLv” puts personal_info.last_name # => “±ľ”
áŶ³d[Tq ▪ ŸŔ¯"( && áŶ;"( => áŶ³2Hash¯"(ıDý] iv.°Ľ ▪ ŸŔ¸Hash¡Ì4/A%BCrypt,+/.
▪ after_save /.PersonalInfo3wQ `/Ŵ2ìB3ě/ñ Class PersonalInfo has_many :personal_info_hashes after_save :save_hashes def save_hashes save_name_hash save_tel_hash save_address_hash …… end def save_name_hash raw_value = last_name + first_name pi_hash = personal_info_hashes.find_or_initialize_by(field_name: 'last_name_and_first_name') pi_hash.hash_value = BCrypt::Engine.hash_secret(raw_value, ENV['HASH_SALT']) pi_hash.save! end
Ş 3 ŀ ▪ ºó¿æ1Ð – §a Þ'0[-,S0ç+#( µ¸q –
§z'ÞÀ¹S ëè0,` ▪ ĵijŢè3?1jxXVDğŤ"8"> ▪ '3ƀš;*<E/ę"8"> – z!æÑn00ì ¸q0ßÖ#( ▪ çÔ/#Ä2*<ž¬ – ÝÅ zÞ0,`!ID/Pass %#( OTP ▪ Ŋºó¿æ1Ð – U`G25N ´Ä0ßÖ#( – Ï.O:0 #( – ^ ceT _ Õ²Ðá0#( – OS'IDN673 ïÛº~#( – u 39@? ã^Ì$#( – Ͱ⠫ ) #( ▪ '3Ŏ – j\B?Cr¥0 +Ók|0Yc&1·Ø#( – ½ # ¶*éÃÝÅ'x±pÜ#( – j\eÊ!¢eÊ),Zybª0#( – ;PB4P>7P=HLP0aåÓ0#( ▪ ºó¿æ1Ð – Rails.roleºóDř – ĵijèðºóDř ▪ ĵij/Ţè.B34ý3role ▪ Ɓ,0²ĉ.Ţèŕđ"(;°Ľ – AWS KMS/attr_encrypted gem.ŸŔ¯"-DB2°Ľ – =Ó®3»ËfVy `ºóDř ▪ Ŋºó¿æ1Ð – tmpfsDõ+-carrierwave gem2hFIvDĀÄ4tmpfs/$B – AWS3ċQzl bz_3xOD°Ľ – WAF=security groupcontainer¯DB3CB] ivDŹB – ¼2IzVYzV /Ł$ ('-')╮ =͟͟͞͞!⸉ – WAF.ňÇ2E5A8$" – Autoscaling ▪ '3Ŏ – ċĹª\ vDżħ+-õ – Lt k UDCDN.ġÉ"-ĩ;C1/Ĝ4 Ŝ – """ – Terraform2?BIzht3Q `¯ŷś4"""
ƅÐĠ2)"-ƈ9(ùŵ ▪ B{ďĻĂ ÷¾´Ė 3â3¥Í¥3?1ƂùôċÖÙÕÊď Ɖ 2ĝ@CB ▪ 3. ĸĦ3ßĒãĄ –
1¼Ú îÒ – 5äíÒ https://www.npa.go.jp/laws/notification/seian/ hoan/hoan20180921-1.pdf
8/:Ćý1/4ĩ;"-1 ▪ čÀÂ¥2BR gV3ú: ▪ §¿æ3µ7Ŧ9 ▪ 'C2$B ŀĬ3 źĮ
– §¢!,¨z!/+UÔb011 – sÉê¿Â600l5J> ▪ î – rspecDBOA90B?C, – RubybinaryF?, – Railsserverless¯»100{K<0" ŻĴ~.4Æŝ2Ġ-)!# https://github.com/f-world21/encryption_sample