Developers Summit 2020での登壇資料です。 https://event.shoeisha.jp/devsumi/20200213/session/2361/
サーバーレスPCI DSS対応クレジットカード決済基盤システムを運⽤しながら、みんなでわいわいDIYの精神で、新しいモバイル決済サービス6gramをともにつくっている話Developers Summit 2020株式会社ミクシィ ID・ペイメント事業部 システムグループ マネージャー⽥岡 ⽂利2020/02/13
View Slide
おしながきID ペイメント事業部 と 私タイトルのおさらいPCI DSSとクレジットカード決済PCI DSS対応 サーバーレス決済システム??6gramにするためにおわりに
⾃⼰紹介IDペイメント事業部と私⽥岡⽂利株式会社ミクシィ ID・ペイメント事業部 システムグループ マネージャー2012年4⽉⼊社→ SNS mixi の ⾃社Framework開発とサービス開発→グループ会社の⽀援 (開発体制、ガツガツ開発、SREぽい事) → XFLAG アプリ・XFLAG ID の開発・運⽤ → 新サービス開発熟考期 (ビデオ・ライブ配信 / WebRTC / BLE)→ 決済基盤の開発・運⽤や、新規決済系サービス「6gram」の開発を⾏っている
ID ペイメント事業部IDペイメント事業部と私社内外でのアカウント、個⼈情報、決済に関して簡単かつ信頼のおける基盤づくり- アカウント・ログイン (key: パスワードレス / FIDO / OAuth)‣ SMS / mail / SNS / etc- 個⼈情報の管理・本⼈確認 (⽣年⽉⽇・住所・⾝分証・犯収法対の本⼈確認)- 決済(クレジットカード・銀⾏・ATM・ID決済)チーム構成エンジニアリングマネージャ 1名サーバーサイドエンジニア 5 (6)名クライアントエンジニア 2名全員で開発、運⽤を⾏っている
タイトルが⻑すぎますね!!タイトルのおさらい
サーバーレスPCI DSS対応クレジットカード決済基盤システムを運⽤しながら、みんなでわいわいDIYの精神で、新しいモバイル決済サービス6gramをともにつくっている話タイトルのおさらいカード決済システムの構築・運⽤に関して決済サービス開発に関して
決済サービスの基礎的な概念ユーザー 加盟店アクワイアラ国際ブランドクレジットカード決済カード発⾏業務(信販会社など)加盟店管理VISA / JCBなどPCI DSSとクレジットカード決済クレジットカードイシュア決済代⾏
PCI DSS とは?クレジットカード業界のセキュリティ基準これに厳格に準拠することで、カード番号などの情報を取り扱いできる12要件、約400項⽬数年に⼀度、基準が改訂されるPCI DSSとクレジットカード決済
カード情報の取り扱いユーザー 加盟店アクワイアラ国際ブランドクレジットカード決済カード発⾏業務 加盟店管理VISA / JCBなどPCI DSSとクレジットカード決済クレジットカードイシュア決済代⾏อଘॴ༗ऀର֎อଘ͍ͯ͠ΔલճͷΧʔυͰܾࡁPCI DSS対応必須PCI DSS対応必須
カード番号が通る経路も対象になるユーザー ECサイトアクワイアラ国際ブランドトークンカード発⾏業務 加盟店管理VISA / JCBなどPCI DSSとクレジットカード決済クレジットカードイシュア決済代⾏લճͷΧʔυͰܾࡁΧʔυ൪߸ΛτʔΫϯԽ&$αΠτͳͲͰΧʔυ൪߸ΛऔΓѻΘͳ͍͜ͱͰճආΧʔυ൪߸Χʔυͷ*%PCI DSS対応必須 PCI DSS対応必須PCI DSS対応必須PCI DSS対応不要
6gramの場合ユーザー ECサイトアクワイアラ国際ブランドトークンカード発⾏業務 加盟店管理VISA / JCBなどPCI DSSとクレジットカード決済クレジットカードイシュア決済代⾏ܾࡁγεςϜΧʔυ൪߸ΛτʔΫϯԽࠓճͭ͘ΔܾࡁγεςϜΠγϡΞͱܾࡁߦ྆ํͷػೳܾࡁγεςϜPCI DSS対応必須
PCI DSS とは?クレジットカード業界のセキュリティ基準これに厳格に準拠することで、カード番号などの情報を取り扱いできる12要件、約400項⽬数年に⼀度、基準が改訂される⼀年に⼀回オンサイト監査の実施運⽤⼿順のドキュメントやその実施証跡PCI DSSとクレジットカード決済
アカウント要件要件8 コンピュータにアクセスできる各ユーザーに⼀意のIDを割り当てる‣ 8.2.3 パスワードは以下を満たす必要がある‣ パスワードに7⽂字以上含まれる‣ 数字と英⽂字を両⽅含む‣ 8.2.4 パスワードは少なくとも90⽇ごとに変更する‣ 8.2.5 これまで使⽤した最後の4つのパスワードのいずれかで同じである新しいパスワードを許可しないPCI DSS対応サーバーレス決済システム*%ج൫ͱͯ͠ύεϫʔυϨεͱ͔Ωʔϫʔυʹͯ͠Δͷʹパスワード要件
セキュリティ要件要件5 すべてのシステムをマルウェアから保護する⇨ 稼働中のサーバーにウイルスチェックなどが必要要件11 セキュリティシステムおよびプロセスを定期的にテストする‣ 11.4 侵⼊検知/侵⼊防⽌システムを使⽤して警告する‣ 11.5 変更検出メカニズムを導⼊してファイル変更を監視、警告するPCI DSS対応サーバーレス決済システムIDS/IPS 要件
われわれの⼤⽅針⇨ 運⽤負荷をできるだけさげたいPCI DSS対応サーバーレス決済システムその⽅法に関して⼀部紹介します‣ 「グループウォレットアプリ、6gramの運⽤をはじめてみた」‣ https://speakerdeck.com/ryosan470/6gram-sre-next-2020
インスタンスを使わないPCI DSS対応サーバーレス決済システム
真のサーバーレスサービスを運⽤しなければ、インシデントも発⽣しない冗談ですPCI DSS対応サーバーレス決済システム
コンテナをRead Only で動かすPCI DSS対応サーバーレス決済システム
インスタンスレス + Read Only で何が嬉しいかリモートコンソールが存在しないためそもそも侵⼊できない- 侵⼊検知の仕組みを導⼊する必要がないRead Only なのでそもそも書き換えができない- ファイル変更検出ソフトウェアが不要になるログインできないのでID・パスワードもいらないཧ͢Δίϯϙʔωϯτ͕ݮΔͱ͍͏͜ͱૉʹӡ༻ίετ͕ܰݮূཧίετܰݮPCI DSS対応サーバーレス決済システムIDS/IPS 要件パスワード要件
ストレージに関してRDBは基本user/passwordで接続しにいく…↓クレジットカード情報をはじめとするすべてのデータをDynamoDBに保存AWSのmanagedなシステムによりそうことで‣ KMSによるテーブルの暗号化 が⽤意(様々なコンポーネントで標準で暗号化がサポートされる)‣ IAMをベースとした細かいアクセス制御(サービスのロールで管理できる)‣ 開発者のユーザーではデータを⾒ることができません。‣ アプリケーションロールのみが、DynamoDBやその暗号化に使う鍵情報にアクセスができます。PCI DSS対応サーバーレス決済システム
6gramにするために
まずは5グラムに6gramにするために
プリペイド(クレジット)カードシステム6gramにするためにイシュア機能(カード会社)‣ カード番号の管理 (カード番号や有効期限、セキュリティーコード)‣ 残⾼の管理チャージ機能(ポイント機能)‣ クレカ決済‣ 銀⾏決済 —> (銀⾏登録 + 即時決済) or netBank振込対応‣ ATM⼊⾦(セブンバンク)モバイル決済への対応 (TSP連携)‣ ApplePay / GooglePay
モバイル決済対応の登場⼈物 ⾚いものを作るユーザーアクワイアラ国際ブランドクレジットカードによる⼊⾦VISA / JCBなどイシュアܾࡁߦج൫カード番号⼝座番号残⾼アクワイアラ国際ブランドクレジットカードの利⽤VISA / JCBなどTSPTRApplePay/GooglePay対応Apple/Google加盟店カード番号Token管理残⾼Issuer基盤APPサーバ銀⾏6gramにするために
要件をすべて満たすパッケージは存在しなかった6gramにするために
⾃分でつくるしかないYO!みんなでわいわいDIY6gramにするために
冷静に考えようなぜそのような製品がないのか‣ 可能な限りフルマネージドサービスを利⽤することで少⼈数でも運⽤可能なサーバーレス PCI DSS 対応構成を採⽤している‣ コンテナサポート‣ Readonlyで動く既製品のランニングコストや PCI DSS 対応も含めたコストvs最初ちょっと頑張って今のままのローコストな運⽤で使える様に内製6gramにするためにແཧͳΒɺύοέʔδΛങͬͯؒʹڬΜͰӡ༻ɺಛघͳରԠ͕ൃੜͯͦ͠ͷͱ͖ʹͦͷίϯϙʔωϯτ͚ͩʹӨڹ͕ग़ΔΑ͏ʹ͠Α͏
レイヤリングの⼀例6gramにするためにアクワイアラTSP銀⾏アクワイアラ決済プロトコル変換APP1銀⾏⼊⾦API決済サービスカード銀⾏決済プロトコル変換APP2ઐ༻ઢಛघϓϩτίϧ424クレカclientInternet 1専⽤線 1銀⾏client専⽤線 1Internet 1Internet 2 銀⾏残⾼サービス特殊プロトコルでもここだけで対応できる"11ˡ
イシュア側全部作ると(カード・残⾼・トークンを管理)CMイシュア加盟店TSPオーソリシステム⻩⾊のカードで100円の買い物1. ⻩⾊のカードを探す2. 残⾼をチェックする3. 残⾼を減らす4. ヨシ!ߴ1. ⻘⾊のカードを探す2. 残⾼をチェックする3. トークン情報をもらう4. ヨシ!⻘⾊のカードをMobileに登録ApplePayで決済1. のカードを探す2. 残⾼をチェックする3. 残⾼を減らす4. ヨシ!
構築例) Mobileペイメントだけ移譲するCMイシュア加盟店TSPΦʔιϦγεςϜ⻩⾊のカードで100円の買い物ߴ੨৭ͷΧʔυΛ.PCJMFʹొ普通のカード決済は⾃分で処理ΧʔυใΛಉظͯ͠Ҡৡ͢ΔTSPͰॲཧ݁(1BZͰܾࡁ1. GPayの情報はわからないので、TSPに問い合わせ2. ⻘いカードとわかる3. 通常の処理プリペイドだとちょっと決済に時間かかる࣮ଌɿՃໍళͱͯ͠νϟʔδͷܾࡁΛͨ͠߹ʹɺશମͱͯ͠௨ৗͷΧʔυܾࡁΑΓ5PLFOܾࡁͷ΄͏͕ܾࡁωοτϫʔΫͷԠ͕ฏۉͰ͍ͷ͕؍ଌ͞Ε͍ͯ·͢
構築例)残⾼だけ⾃分で管理CM加盟店ΦʔιϦγεςϜ⻩⾊のカードで100円の買い物ߴΠγϡΞߴ同期したり決済時にAPIコールしてもらったりするこのパターンは、カード番号をアプリとかで知らせない限りPCI DSSと結構無縁で作れるγεςϜआΓΔ決済時にAPIコールされるのであれば送⾦の実現は割とすぐにできる
結果、今回は全部作りました6gramにするために
システム構成‣ 開発⾔語: Elixir‣ ⼀部 DynamoDB Streams を経由した NodeJS や解析環境で Python など‣ インフラ: AWS‣ データベース: DynamoDB‣ コンピュート: Fargate‣ 監視: CloudWatch、Rollbarほぼすべてのコンポーネント (⼊出⾦処理、カード会社とのやりとり) は内製‣ Elixir採⽤理由などは、Developer Boost 2019の「Elixirで決済サービスを作ってみた」を!https://speakerdeck.com/enerick/elixir-dejue-ji-sabisuwotukututemita
5グラム(普通のプリペイドカード)の機能が実装されました!!6gramにするために
1を⾜してサービスを作ってみます6gramにするために
PR
「6gram」サービス紹介ひとりでも、グループでも使うことのできるウォレットサービスグループに⼊れたお⾦をシェアしたり、インスタントに発⾏したプリペイドカードに残⾼を割り付けたりといろんな使い⽅ができる‣ JCB プリペイドカードを1アカウントで複数枚発⾏できる‣ ApplePay / GooglePay と連携して QUICPay+ 決済‣ iOS では コンタクトレス決済にも対応‣ リアルカードも発⾏予定‣ 現在は完全招待制PR
⾃由⾃在にお⾦やカードを動かせるCM6gram加盟店TSPΦʔιϦγεςϜ"QQMF1BZͰܾࡁカードをそのまま使う複数のカードを残⾼に紐づけカードとカードをつなげる⾃由度がいっぱいࣗͨͪͰγεςϜΛ࡞ͬͨͷͰɺΧʔυͷಉظߴͷͳͲʹ੍ݶ͕ੜ·Εͳ͍ڞಉスイッチグループウォレット
今⽇はいくつか招待コードのステッカー持ってきてます!Ask the speaker の時にお渡しできます社内ではお菓⼦を買う共有ウォレットとして使ったりしてます招待コードは⼀回使い切りですが、アプリ内で何度でも招待コードを作れます仲のいい⼈たちを招待して使ってみてください。CM
おわりにPCI DSSでは様々な運⽤フローの策定や証跡管理が必要運⽤負荷をへらしていくことが重要です⾃分たちでルールや仕組みを作り上げて、実践チームビルディングやチーム⼒の底上げにつながるPCI DSSだけではシステムやサービスを守れないPCI DSS管理外のコンポーネントでも、セキュリティを担保しつつ運⽤コストを減らす⾏動⽇頃から最新のセキュリティ情報を⼿に⼊れ続ける監査がなくても、安全なシステム開発・運⽤が保たれるような組織づくり
おわりに必ずしも⾃分たちで全てを構築するのが正解とは限りませんただの⾞輪の再発明かもしれませんただ⾃分たちでやってみることで⾒えてくる世界もあります。みんなでわいわいDIY