Upgrade to Pro — share decks privately, control downloads, hide ads and more …

サーバーレスPCI DSS対応クレジットカード決済 基盤システムを運用しながら、みんな...

サーバーレスPCI DSS対応クレジットカード決済 基盤システムを運用しながら、みんなでわいわい DIYの精神で、新しいモバイル決済サービス 6gramをともにつくっている話/6gram-DIY

Developers Summit 2020での登壇資料です。
https://event.shoeisha.jp/devsumi/20200213/session/2361/

MIXI ENGINEERS

February 13, 2020
Tweet

More Decks by MIXI ENGINEERS

Other Decks in Programming

Transcript

  1. ⾃⼰紹介 IDペイメント事業部と私 ⽥岡⽂利 株式会社ミクシィ ID・ペイメント事業部 システムグループ マネージャー 2012年4⽉⼊社 → SNS

    mixi の ⾃社Framework開発とサービス開発 →グループ会社の⽀援 (開発体制、ガツガツ開発、SREぽい事)
 → XFLAG アプリ・XFLAG ID の開発・運⽤
 → 新サービス開発熟考期 (ビデオ・ライブ配信 / WebRTC / BLE) → 決済基盤の開発・運⽤や、新規決済系サービス「6gram」の開発を⾏っている
  2. ID ペイメント事業部 IDペイメント事業部と私 社内外でのアカウント、個⼈情報、決済に関して簡単かつ信頼のおける基盤づくり - アカウント・ログイン (key: パスワードレス / FIDO

    / OAuth) ‣ SMS / mail / SNS / etc - 個⼈情報の管理・本⼈確認 (⽣年⽉⽇・住所・⾝分証・犯収法対の本⼈確認) - 決済(クレジットカード・銀⾏・ATM・ID決済) チーム構成 エンジニアリングマネージャ 1名 サーバーサイドエンジニア 5 (6)名 クライアントエンジニア 2名 全員で開発、運⽤を⾏っている
  3. カード情報の取り扱い ユーザー 加盟店 アクワイアラ 国際ブランド クレジットカード決済 カード発⾏業務 加盟店管理 VISA /

    JCBなど PCI DSSとクレジットカード決済 クレジットカード イシュア 決済代⾏ อଘ ॴ༗ऀ͸ର৅֎ อଘ͍ͯ͠Δ લճͷΧʔυͰܾࡁ PCI DSS対応必須 PCI DSS対応必須
  4. カード番号が通る経路も対象になる ユーザー ECサイト アクワイアラ 国際ブランド トークン カード発⾏業務 加盟店管理 VISA /

    JCBなど PCI DSSとクレジットカード決済 クレジットカード イシュア 決済代⾏ લճͷΧʔυͰܾࡁ Χʔυ൪߸ΛτʔΫϯԽ &$αΠτͳͲͰ͸Χʔυ൪߸Λ௚઀औΓѻΘͳ͍͜ͱͰճආ Χʔυ൪߸ Χʔυͷ*% PCI DSS対応必須 PCI DSS対応必須 PCI DSS対応必須 PCI DSS対応不要
  5. 6gramの場合 ユーザー ECサイト アクワイアラ 国際ブランド トークン カード発⾏業務 加盟店管理 VISA /

    JCBなど PCI DSSとクレジットカード決済 クレジットカード イシュア 決済代⾏ ܾࡁγεςϜ Χʔυ൪߸ΛτʔΫϯԽ ࠓճͭ͘ΔܾࡁγεςϜ͸ΠγϡΞͱܾࡁ୅ߦ྆ํͷػೳ ܾࡁγεςϜ PCI DSS対応必須
  6. アカウント要件 要件8 コンピュータにアクセスできる各ユーザーに⼀意のIDを割り当てる ‣ 8.2.3 パスワードは以下を満たす必要がある ‣ パスワードに7⽂字以上含まれる ‣ 数字と英⽂字を両⽅含む

    ‣ 8.2.4 パスワードは少なくとも90⽇ごとに変更する ‣ 8.2.5 これまで使⽤した最後の4つのパスワードのいずれかで同じである新しいパス ワードを許可しない PCI DSS対応サーバーレス決済システム *%ج൫ͱͯ͠͸ύεϫʔυϨεͱ͔Ωʔϫʔυʹͯ͠Δͷʹ パスワード要件
  7. インスタンスレス + Read Only で何が嬉しいか リモートコンソールが存在しないためそもそも侵⼊できない - 侵⼊検知の仕組みを導⼊する必要がない Read Only

    なのでそもそも書き換えができない - ファイル変更検出ソフトウェアが不要になる ログインできないのでID・パスワードもいらない ؅ཧ͢Δίϯϙʔωϯτ͕ݮΔͱ͍͏͜ͱ͸ૉ௚ʹӡ༻ίετ͕ܰݮ ূ੻؅ཧίετ΋ܰݮ PCI DSS対応サーバーレス決済システム IDS/IPS 要件 パスワード要件
  8. プリペイド(クレジット)カードシステム 6gramにするために イシュア機能(カード会社) ‣ カード番号の管理 (カード番号や有効期限、セキュリティーコード) ‣ 残⾼の管理 チャージ機能(ポイント機能) ‣

    クレカ決済 ‣ 銀⾏決済 —> (銀⾏登録 + 即時決済) or netBank振込対応 ‣ ATM⼊⾦(セブンバンク) モバイル決済への対応 (TSP連携) ‣ ApplePay / GooglePay
  9. モバイル決済対応の登場⼈物 ⾚いものを作る ユーザー アクワイアラ 国際ブランド クレジットカードによる⼊⾦ VISA / JCBなど イシュア ܾࡁ୅ߦج൫

    カード番号 ⼝座番号 残⾼ アクワイアラ 国際ブランド クレジットカードの利⽤ VISA / JCBなど TSP TR ApplePay/GooglePay対応 Apple/Google 加盟店 カード番号 Token管理 残⾼ Issuer基盤 APPサーバ 銀⾏ 6gramにするために
  10. 冷静に考えよう なぜそのような製品がないのか ‣ 可能な限りフルマネージドサービスを利⽤することで少⼈数でも運⽤可能なサー バーレス PCI DSS 対応構成を採⽤している ‣ コンテナサポート

    ‣ Readonlyで動く 既製品のランニングコストや PCI DSS 対応も含めたコスト vs 最初ちょっと頑張って今のままのローコストな運⽤で使える様に内製 6gramにするために ແཧͳΒ͹ɺύοέʔδΛങͬͯؒʹڬΜͰӡ༻ɺಛघͳରԠ͕ൃੜͯ͠΋ ͦͷͱ͖ʹͦͷίϯϙʔωϯτ͚ͩʹӨڹ͕ग़ΔΑ͏ʹ͠Α͏
  11. レイヤリングの⼀例 6gramにするために アクワイアラ TSP 銀⾏ アクワイアラ 決済プロトコル 変換APP1 銀⾏ ⼊⾦

    API 決済サービス カード 銀⾏ 決済プロトコル 変換APP2 ઐ༻ઢ ಛघϓϩτίϧ 424 クレカclient Internet 1 専⽤線 1 銀⾏client 専⽤線 1 Internet 1 Internet 2 銀⾏ 残⾼サービス 特殊プロトコルでもここだけで対応できる "11 ˡ
  12. イシュア側全部作ると(カード・残⾼・トークンを管理) CM イシュア 加盟店 TSP オーソリシステム ⻩⾊のカードで100円の買い物 1. ⻩⾊のカードを探す 2.

    残⾼をチェックする 3. 残⾼を減らす 4. ヨシ! ࢒ߴ 1. ⻘⾊のカードを探す 2. 残⾼をチェックする 3. トークン情報をもらう 4. ヨシ! ⻘⾊のカードをMobileに登録 ApplePayで決済 1. のカードを探す 2. 残⾼をチェックする 3. 残⾼を減らす 4. ヨシ!
  13. 構築例) Mobileペイメントだけ移譲する CM イシュア 加盟店 TSP ΦʔιϦγεςϜ ⻩⾊のカードで100円の買い物 ࢒ߴ ੨৭ͷΧʔυΛ.PCJMFʹొ࿥

    普通のカード決済は⾃分で処理 Χʔυ৘ใΛಉظͯ͠Ҡৡ͢Δ TSPͰॲཧ׬݁ (1BZͰܾࡁ 1. GPayの情報はわからない ので、TSPに問い合わせ 2. ⻘いカードとわかる 3. 通常の処理 プリペイドだと ちょっと決済に時間かかる ࣮ଌɿՃໍళͱͯ͠νϟʔδͷܾࡁΛͨ͠৔߹ʹɺશମͱͯ͠௨ৗͷΧʔυܾࡁΑΓ΋5PLFOܾࡁͷ΄͏͕ ܾࡁωοτϫʔΫͷԠ౴͕ฏۉͰ஗͍ͷ͕؍ଌ͞Ε͍ͯ·͢
  14. 構築例)残⾼だけ⾃分で管理 CM 加盟店 ΦʔιϦγεςϜ ⻩⾊のカードで100円の買い物 ࢒ߴ ΠγϡΞ ࢒ߴ 同期したり 決済時にAPIコールしてもらったりする

    このパターンは、カード番号をアプリとかで知らせない限り PCI DSSと結構無縁で作れる γεςϜआΓΔ 決済時にAPIコー ルされるのであれ ば送⾦の実現は 割とすぐにできる
  15. システム構成 ‣ 開発⾔語: Elixir ‣ ⼀部 DynamoDB Streams を経由した NodeJS

    や解析環境で Python など ‣ インフラ: AWS ‣ データベース: DynamoDB ‣ コンピュート: Fargate ‣ 監視: CloudWatch、Rollbar ほぼすべてのコンポーネント (⼊出⾦処理、カード会社とのやりとり) は内製 ‣ Elixir採⽤理由などは、Developer Boost 2019の「Elixirで決済サービスを作ってみた」 を! https://speakerdeck.com/enerick/elixir-dejue-ji-sabisuwotukututemita
  16. PR

  17. ⾃由⾃在にお⾦やカードを動かせる CM 6gram 加盟店 TSP ΦʔιϦγεςϜ "QQMF1BZͰܾࡁ カードをそのまま使う 複数のカードを残⾼に紐づけ カードとカードをつなげる

    ⾃由度がいっぱい ࣗ෼ͨͪͰγεςϜΛ࡞ͬͨͷͰɺΧʔυͷಉظ΍࢒ߴͷ਺ͳͲʹ੍ݶ͕ੜ·Εͳ͍ ڞಉ スイッチ グループウォレット