Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2024/05/23_SecurityJAWS登壇
Search
snowwhite
May 23, 2024
1
650
2024/05/23_SecurityJAWS登壇
2024年5月23日のSecurityJAWSに登壇を行ったときの資料です。
snowwhite
May 23, 2024
Tweet
Share
More Decks by snowwhite
See All by snowwhite
20241024_an_real_horror_story_for_for_engineer
yuri_snowwhite
0
24
20240712_JAWSUG-FUKUOKA_Cloudgirl
yuri_snowwhite
0
57
20240414_cloudgirl_ec2_costdown
yuri_snowwhite
1
130
2024_storageJAWS_EBSonLVM_created
yuri_snowwhite
0
280
初めてでも分かるPCIDSS,PCI3DSとは
yuri_snowwhite
0
100
AWSの世界観が変わったお話
yuri_snowwhite
0
1.1k
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
What's new in Ruby 2.0
geeforr
342
31k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
504
140k
Writing Fast Ruby
sferik
626
60k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
790
The Art of Programming - Codeland 2020
erikaheidi
51
13k
The Cost Of JavaScript in 2023
addyosmani
45
6.6k
Faster Mobile Websites
deanohume
304
30k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Transcript
APIGWとLambdaで 決済APIをPCI DSSに準拠したお話 2024/05/23 株式会社ゆめみ 砂岡雪
自己紹介 ・Name・・・砂岡 雪 a.k.a 白”雪姫” ・Profile・・・2023年8月 ゆめみに入社。 入社前は10年ほど決済システムの構築・運用・保守・リプ レースを行ってきている。 ネットワークとセキュリティをメインにしつつ も現在は、SRE方面の仕事もしている。
苗字で呼ばれるのを嫌うため、下の名前か X名で 呼んで頂く事が多い。 白”雪姫”はしらゆきひめではなくしらゆきと読みます。 ・Liked Service・・・Amazon Inspector ・X(旧Twitter)・・・@yuri_snowwhite ・Blog・・・https://kohaku-kageroh.hatenablog.com/
注意事項 現在も稼働している某社の決済システムを元にお話しします。 そのため部分部分で一部、表示をしていない機能・構成については割愛しております。 今回の登壇での、セキュリティの説明においては問題がありません。 ご了承いただければ幸いです。 m( _ _ )m
そもそもPCI DSSとは? クレジットカード決済における、システムを構築する際 に、クレジットカード会員データ(以下のスライドでは PANデータ)を安全に扱うことを目的としたセキュリ ティ基準のこと。 12個の要件と6個の目的に準拠する必要がある。
なぜ、APIGWとLambdaで PCI DSSに準拠することになった?
既存環境のコストが高い!もっと安くして!!! by 社長 要件は以下の通り ・既にPCI DSSに準拠した環境である →クレジットカード決済システムであるため継続して準拠が必要 ・既存はPCI DSS準拠のためにAWSで構築された管理VPC(以下、管理VPC)と自分たちで 構築するサービスVPCがあり、稼働費用がとても高い →管理VPCは自分たちが構築等ができない AWS環境が使われていて、
これがとても高かった ・サービスVPCに存在するRDSはそのまま使いたい →決済トランザクションのみ管理している ・画面表示は必要なく、サーバ間の API通信がメインでブラウザで表示するのは管理側のト ランザクションデータのみ →管理側は見れなくても問題が無く API通信ができれば良いので EC2である必要が無い。
サービスVPC群 管理VPC群 既存環境の概略図(もの凄くざっくり) Availability Zone Availability Zone Availability Zone Availability
Zone VPC Public subnet VPC Public subnet Private subnet VPC Public subnet Private subnet WEB WEB Mail SimpleAD SimpleAD Proxy VPN セキュリティ管理 コストが管理VPC群に偏っており、 通信経路も煩雑化していた。
とりあえず、管理VPCは解約する方針。 既存の通信でAPI通信ができれば良いなら ApacheとかのWebサーバも要らない。 Amazon CloudWatch上で見るとトランザクショ ンも多くない、メール用に立ち上げてるインスタ ンスも送信専用と言うことであればAmazon SES やAmazon API
Gatewayに移行もできるので は?
そんな訳で、設計してみました! ▪最終的に使ったサービス Amazon VPC NAT Gateway AWS WAF AWS Lambda
Amazon CloudWatch Amazon Cloudfront Amazon S3 Amazon RDS Amazon RDS Proxy
決済システムVPC サービスVPC リプレース後の構成図はこんな感じになりました(部分的に非表示)
満たしたセキュリティ要件 ・PCI DSSの対象環境は決済システム VPCのみ ・RDSは、既存のトランザクションデータの保存要件の関係上から既存 RDSを利用 →PCI DSSの要件対象になるカードデータ情報が無いため、対象外へ ・ピアリング接続を行いローカル IP通信をすることで、VLAN分離の要件から回避
→ピアリング間の通信・接続出来るサービスを限定もセキュリティグループで確保、 年に1度VPCAnalyzerで通信要件を確認 ・AWS WAFのマネジメントルールを用いて、基本的セキュリティ対策 (OWASPのTOP10やNISTに書かれたセ キュリティ基準に対応) ・ログは全てCloudWatchLogsへ出力して1年間保存 ・Lambdaから契約決済先へに通信を行うときは NAT Gatewayを経由して通信 →不用意にLambdaそのものにアクセスをさせないため ・API Gatewayを用いることで、オリジナルドメイン・ WAFの取り付けを簡単にして、保守性とセキュリティ性を 向上 →今までは、提供されていたセキュリティアプライアンスを使っていたので、 保守性、セキュリティの担保が説明しずらかった
発生した問題
一部加盟店に提供してた決済用画面が利用できなくなった PCI DSSに準拠させる都合上、カード会員データを通過させるス コープを最小限にしていたため、決済用画面が利用出来なくなる 問題が発生。 このリプレースの機会にS3上に、Cloudfront+S3を用いて、作 成、Cloud front内でルーティングを行うことで、提供していた画 面を表示することで対処。 API
Gatewayに接続しているCloudfrontと共有化しているた め、結果的にユーザから見たURL等が増えることは無く安心。
WAFがPOST通信をデフォルトでは拒否 通常のWEBアクセスではGETリクエストで行われる通信だが、 決済システムは通信を読み取られないようにするという一貫 で、POSTリクエストが通常使われる。 そのため、利用したルールの関係で、 AWS WAFでは拒否され てしまった。 拒否をされたルールを検知モード変更し、一定以上連続で通信 した場合にのみアラートを出すように設定を変更を実施。
PCI DSSの要件では、WAFもしくはIPS/IDSを用いて通信を検 出することが要件のため取り外すことはできなかったため。
マネジメントコンソールのログイン画面がPCI DSSの対象に ・AWSマネジメントコンソールのログイン画面が監査対象となってしまい、 ログインのロックアウトと検知を入れる必要が出てきた →ロックアウトはできないので、代替コントロールとして、 CloudTrailの監視ログを有効にしてCloudWatchで監視。 6回目をミスしたら通知するように設定を変更 この時は、通知のみで良かったが、 Lambda関数を呼び出して、ログイン出来ても All
Denyにする等の対処ができたかなと思っています。
WAFで使ったルール ・SQLインジェクション対策 SQL database ・認証制御不備 Bot Control ・アクセス設定の不備 Bot Control,Admin
Protection ・Cross-Site Scripting(XSS) Admin protection ・既知の脆弱性対策 Core rule set, SQL database ・不十分なログと監視設定 Bot Control 他にカスタマイズのルールをいくつか入れています(アプリケーション言語の既知の脆弱性対策など)
リプレースして楽になったこと ・インフラの大部分がフルマネージドにできた →監査の際に、AWS Artifactからダウンロードを行った PCI DSSのAOCで準拠にしてもらえる ・インフラの展開内容が決まっているので IaC化も夢じゃ無くなった →仕様書レビューではなくコードレビューに切り替えることも夢じゃ無くなり、開発に人がコードレ ビューできるようになった。
※当時は、1人インフラだったので、外部にレビューを依頼してました ・定期スキャニングに関しては開発コードのみが対象となった。 →通常はPCIの要件で4半期(つまり90日)に1度、ネットワーク層の脆弱性のスキャンが免除になっ た ※AWS Artifactで準拠が確認できるため、不要となった。 ・仕様書などの作成資料が大幅に減った →おかげで、用意すべき監査資料が減った
ご静聴ありがとうございました。