$30 off During Our Annual Pro Sale. View Details »

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

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

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

MIXI ENGINEERS
PRO

February 13, 2020
Tweet

More Decks by MIXI ENGINEERS

Other Decks in Programming

Transcript

  1. サーバーレスPCI DSS対応クレジットカード決済
    基盤システムを運⽤しながら、みんなでわいわい
    DIYの精神で、新しいモバイル決済サービス
    6gramをともにつくっている話
    Developers Summit 2020
    株式会社ミクシィ ID・ペイメント事業部 システムグループ マネージャー
    ⽥岡 ⽂利
    2020/02/13

    View Slide

  2. おしながき
    ID ペイメント事業部 と 私
    タイトルのおさらい
    PCI DSSとクレジットカード決済
    PCI DSS対応 サーバーレス決済システム??
    6gramにするために
    おわりに

    View Slide

  3. ⾃⼰紹介
    IDペイメント事業部と私
    ⽥岡⽂利
    株式会社ミクシィ ID・ペイメント事業部 システムグループ マネージャー
    2012年4⽉⼊社
    → SNS mixi の ⾃社Framework開発とサービス開発
    →グループ会社の⽀援 (開発体制、ガツガツ開発、SREぽい事)

    → XFLAG アプリ・XFLAG ID の開発・運⽤

    → 新サービス開発熟考期 (ビデオ・ライブ配信 / WebRTC / BLE)
    → 決済基盤の開発・運⽤や、新規決済系サービス「6gram」の開発を⾏っている

    View Slide

  4. ID ペイメント事業部
    IDペイメント事業部と私
    社内外でのアカウント、個⼈情報、決済に関して簡単かつ信頼のおける基盤づくり
    - アカウント・ログイン (key: パスワードレス / FIDO / OAuth)
    ‣ SMS / mail / SNS / etc
    - 個⼈情報の管理・本⼈確認 (⽣年⽉⽇・住所・⾝分証・犯収法対の本⼈確認)
    - 決済(クレジットカード・銀⾏・ATM・ID決済)
    チーム構成
    エンジニアリングマネージャ 1名
    サーバーサイドエンジニア 5 (6)名
    クライアントエンジニア 2名
    全員で開発、運⽤を⾏っている

    View Slide

  5. タイトルが⻑すぎますね!!
    タイトルのおさらい

    View Slide

  6. サーバーレスPCI DSS対応クレジットカード決済
    基盤システムを運⽤しながら、みんなでわいわい
    DIYの精神で、新しいモバイル決済サービス
    6gramをともにつくっている話
    タイトルのおさらい
    カード決済システムの構築・運⽤に関して
    決済サービス開発に関して

    View Slide

  7. 決済サービスの基礎的な概念
    ユーザー 加盟店
    アクワイアラ
    国際ブランド
    クレジットカード決済
    カード発⾏業務
    (信販会社など)
    加盟店管理
    VISA / JCBなど
    PCI DSSとクレジットカード決済
    クレジットカード
    イシュア
    決済代⾏

    View Slide

  8. PCI DSS とは?
    クレジットカード業界のセキュリティ基準
    これに厳格に準拠することで、カード番号などの情報を取り扱いできる
    12要件、約400項⽬
    数年に⼀度、基準が改訂される
    PCI DSSとクレジットカード決済

    View Slide

  9. カード情報の取り扱い
    ユーザー 加盟店
    アクワイアラ
    国際ブランド
    クレジットカード決済
    カード発⾏業務 加盟店管理
    VISA / JCBなど
    PCI DSSとクレジットカード決済
    クレジットカード
    イシュア
    決済代⾏
    อଘ
    ॴ༗ऀ͸ର৅֎
    อଘ͍ͯ͠Δ
    લճͷΧʔυͰܾࡁ
    PCI DSS対応必須
    PCI DSS対応必須

    View Slide

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

    View Slide

  11. 6gramの場合
    ユーザー ECサイト
    アクワイアラ
    国際ブランド
    トークン
    カード発⾏業務 加盟店管理
    VISA / JCBなど
    PCI DSSとクレジットカード決済
    クレジットカード
    イシュア
    決済代⾏
    ܾࡁγεςϜ
    Χʔυ൪߸ΛτʔΫϯԽ
    ࠓճͭ͘ΔܾࡁγεςϜ͸ΠγϡΞͱܾࡁ୅ߦ྆ํͷػೳ
    ܾࡁγεςϜ
    PCI DSS対応必須

    View Slide

  12. PCI DSS とは?
    クレジットカード業界のセキュリティ基準
    これに厳格に準拠することで、カード番号などの情報を取り扱いできる
    12要件、約400項⽬
    数年に⼀度、基準が改訂される
    ⼀年に⼀回オンサイト監査の実施
    運⽤⼿順のドキュメントやその実施証跡
    PCI DSSとクレジットカード決済

    View Slide

  13. アカウント要件
    要件8 コンピュータにアクセスできる各ユーザーに⼀意のIDを割り当てる
    ‣ 8.2.3 パスワードは以下を満たす必要がある
    ‣ パスワードに7⽂字以上含まれる
    ‣ 数字と英⽂字を両⽅含む
    ‣ 8.2.4 パスワードは少なくとも90⽇ごとに変更する
    ‣ 8.2.5 これまで使⽤した最後の4つのパスワードのいずれかで同じである新しいパス
    ワードを許可しない
    PCI DSS対応サーバーレス決済システム
    *%ج൫ͱͯ͠͸ύεϫʔυϨεͱ͔Ωʔϫʔυʹͯ͠Δͷʹ
    パスワード要件

    View Slide

  14. セキュリティ要件
    要件5 すべてのシステムをマルウェアから保護する
    ⇨ 稼働中のサーバーにウイルスチェックなどが必要
    要件11 セキュリティシステムおよびプロセスを定期的にテストする
    ‣ 11.4 侵⼊検知/侵⼊防⽌システムを使⽤して警告する
    ‣ 11.5 変更検出メカニズムを導⼊してファイル変更を監視、警告する
    PCI DSS対応サーバーレス決済システム
    IDS/IPS 要件

    View Slide

  15. われわれの⼤⽅針
    ⇨ 運⽤負荷をできるだけさげたい
    PCI DSS対応サーバーレス決済システム
    その⽅法に関して⼀部紹介します
    ‣ 「グループウォレットアプリ、6gramの運⽤をはじめてみた」
    ‣ https://speakerdeck.com/ryosan470/6gram-sre-next-2020

    View Slide

  16. インスタンスを使わない
    PCI DSS対応サーバーレス決済システム

    View Slide

  17. インスタンスを使わない
    PCI DSS対応サーバーレス決済システム

    View Slide

  18. 真のサーバーレス
    サービスを運⽤しなければ、
    インシデントも発⽣しない
    冗談です
    PCI DSS対応サーバーレス決済システム

    View Slide

  19. コンテナをRead Only で動かす
    PCI DSS対応サーバーレス決済システム

    View Slide

  20. インスタンスレス + Read Only で何が嬉しいか
    リモートコンソールが存在しないためそもそも侵⼊できない
    - 侵⼊検知の仕組みを導⼊する必要がない
    Read Only なのでそもそも書き換えができない
    - ファイル変更検出ソフトウェアが不要になる
    ログインできないのでID・パスワードもいらない
    ؅ཧ͢Δίϯϙʔωϯτ͕ݮΔͱ͍͏͜ͱ͸ૉ௚ʹӡ༻ίετ͕ܰݮ
    ূ੻؅ཧίετ΋ܰݮ
    PCI DSS対応サーバーレス決済システム
    IDS/IPS 要件
    パスワード要件

    View Slide

  21. ストレージに関して
    RDBは基本user/passwordで接続しにいく…

    クレジットカード情報をはじめとするすべてのデータをDynamoDBに保存
    AWSのmanagedなシステムによりそうことで
    ‣ KMSによるテーブルの暗号化 が⽤意(様々なコンポーネントで標準で暗号化がサポートされる)
    ‣ IAMをベースとした細かいアクセス制御(サービスのロールで管理できる)
    ‣ 開発者のユーザーではデータを⾒ることができません。
    ‣ アプリケーションロールのみが、DynamoDBやその暗号化に使う鍵情報にアクセスができます。
    PCI DSS対応サーバーレス決済システム

    View Slide

  22. 6gramにするために

    View Slide

  23. まずは5グラムに
    6gramにするために

    View Slide

  24. プリペイド(クレジット)カードシステム
    6gramにするために
    イシュア機能(カード会社)
    ‣ カード番号の管理 (カード番号や有効期限、セキュリティーコード)
    ‣ 残⾼の管理
    チャージ機能(ポイント機能)
    ‣ クレカ決済
    ‣ 銀⾏決済 —> (銀⾏登録 + 即時決済) or netBank振込対応
    ‣ ATM⼊⾦(セブンバンク)
    モバイル決済への対応 (TSP連携)
    ‣ ApplePay / GooglePay

    View Slide

  25. モバイル決済対応の登場⼈物 ⾚いものを作る
    ユーザー
    アクワイアラ
    国際ブランド
    クレジットカードによる⼊⾦
    VISA / JCBなど
    イシュア
    ܾࡁ୅ߦج൫
    カード番号
    ⼝座番号
    残⾼
    アクワイアラ
    国際ブランド
    クレジットカードの利⽤
    VISA / JCBなど
    TSP
    TR
    ApplePay/GooglePay対応
    Apple/Google
    加盟店
    カード番号
    Token管理
    残⾼
    Issuer基盤
    APPサーバ
    銀⾏
    6gramにするために

    View Slide

  26. 要件をすべて満たすパッケージは存在しなかった
    6gramにするために

    View Slide

  27. ⾃分でつくるしかないYO!
    みんなでわいわいDIY
    6gramにするために

    View Slide

  28. 冷静に考えよう
    なぜそのような製品がないのか
    ‣ 可能な限りフルマネージドサービスを利⽤することで少⼈数でも運⽤可能なサー
    バーレス PCI DSS 対応構成を採⽤している
    ‣ コンテナサポート
    ‣ Readonlyで動く
    既製品のランニングコストや PCI DSS 対応も含めたコスト
    vs
    最初ちょっと頑張って今のままのローコストな運⽤で使える様に内製
    6gramにするために
    ແཧͳΒ͹ɺύοέʔδΛങͬͯؒʹڬΜͰӡ༻ɺಛघͳରԠ͕ൃੜͯ͠΋
    ͦͷͱ͖ʹͦͷίϯϙʔωϯτ͚ͩʹӨڹ͕ग़ΔΑ͏ʹ͠Α͏

    View Slide

  29. レイヤリングの⼀例
    6gramにするために
    アクワイアラ
    TSP
    銀⾏
    アクワイアラ
    決済プロトコル
    変換APP1
    銀⾏
    ⼊⾦
    API
    決済サービス
    カード
    銀⾏
    決済プロトコル
    変換APP2
    ઐ༻ઢ
    ಛघϓϩτίϧ
    424
    クレカclient
    Internet 1
    専⽤線 1
    銀⾏client
    専⽤線 1
    Internet 1
    Internet 2 銀⾏
    残⾼サービス
    特殊プロトコルでもここだけで対応できる
    "11
    ˡ

    View Slide

  30. イシュア側全部作ると(カード・残⾼・トークンを管理)
    CM
    イシュア
    加盟店
    TSP
    オーソリシステム
    ⻩⾊のカードで100円の買い物
    1. ⻩⾊のカードを探す
    2. 残⾼をチェックする
    3. 残⾼を減らす
    4. ヨシ!
    ࢒ߴ
    1. ⻘⾊のカードを探す
    2. 残⾼をチェックする
    3. トークン情報をもらう
    4. ヨシ!
    ⻘⾊のカードをMobileに登録
    ApplePayで決済
    1. のカードを探す
    2. 残⾼をチェックする
    3. 残⾼を減らす
    4. ヨシ!

    View Slide

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

    View Slide

  32. 構築例)残⾼だけ⾃分で管理
    CM
    加盟店
    ΦʔιϦγεςϜ
    ⻩⾊のカードで100円の買い物
    ࢒ߴ
    ΠγϡΞ
    ࢒ߴ
    同期したり
    決済時にAPIコールしてもらったりする
    このパターンは、カード番号をアプリとかで知らせない限り
    PCI DSSと結構無縁で作れる
    γεςϜआΓΔ
    決済時にAPIコー
    ルされるのであれ
    ば送⾦の実現は
    割とすぐにできる

    View Slide

  33. 結果、今回は全部作りました
    6gramにするために

    View Slide

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

    View Slide

  35. 5グラム(普通のプリペイドカード)の
    機能が実装されました!!
    6gramにするために

    View Slide

  36. 1を⾜してサービスを作ってみます
    6gramにするために

    View Slide

  37. PR

    View Slide

  38. 「6gram」サービス紹介
    ひとりでも、グループでも使うことのできるウォレットサービス
    グループに⼊れたお⾦をシェアしたり、インスタントに発⾏したプリペイドカードに
    残⾼を割り付けたりといろんな使い⽅ができる
    ‣ JCB プリペイドカードを1アカウントで複数枚発⾏できる
    ‣ ApplePay / GooglePay と連携して QUICPay+ 決済
    ‣ iOS では コンタクトレス決済にも対応
    ‣ リアルカードも発⾏予定
    ‣ 現在は完全招待制
    PR

    View Slide

  39. ⾃由⾃在にお⾦やカードを動かせる
    CM
    6gram
    加盟店
    TSP
    ΦʔιϦγεςϜ
    "QQMF1BZͰܾࡁ
    カードをそのまま使う
    複数のカードを残⾼に紐づけ
    カードとカードをつなげる
    ⾃由度がいっぱい
    ࣗ෼ͨͪͰγεςϜΛ࡞ͬͨͷͰɺΧʔυͷಉظ΍࢒ߴͷ਺ͳͲʹ੍ݶ͕ੜ·Εͳ͍
    ڞಉ
    スイッチ
    グループウォレット

    View Slide

  40. 今⽇はいくつか招待コードのステッカー持ってきてます!
    Ask the speaker の時にお渡しできます
    社内ではお菓⼦を買う共有ウォレットとして使ったりしてます
    招待コードは⼀回使い切りですが、
    アプリ内で何度でも招待コードを作れます
    仲のいい⼈たちを招待して使ってみてください。
    CM

    View Slide

  41. おわりに
    PCI DSSでは様々な運⽤フローの策定や証跡管理が必要
    運⽤負荷をへらしていくことが重要です
    ⾃分たちでルールや仕組みを作り上げて、実践
    チームビルディングやチーム⼒の底上げにつながる
    PCI DSSだけではシステムやサービスを守れない
    PCI DSS管理外のコンポーネントでも、セキュリティを担保しつつ運⽤コストを減らす⾏動
    ⽇頃から最新のセキュリティ情報を⼿に⼊れ続ける
    監査がなくても、安全なシステム開発・運⽤が保たれるような組織づくり

    View Slide

  42. おわりに
    必ずしも⾃分たちで全てを構築するのが正解とは限りません
    ただの⾞輪の再発明かもしれません
    ただ⾃分たちでやってみることで⾒えてくる世界もあります。
    みんなでわいわいDIY

    View Slide

  43. View Slide