PCI DSSコンプライアンス
🔥 Vibe プロンプト
「支払い処理をPCI DSS準拠に:ネットワークセグメンテーション、暗号化、アクセス制御、ログ記録。」
PCI DSS 12要件
1. ファイアウォール
2. セキュア設定
3. 保存データ保護
4. 暗号化送信
5. アンチマルウェア
6. セキュアなアプリ
7. アクセス制限
8. ユーザー識別 + MFA
9. 物理的セキュリティ
10. ログ記録(1年保存)
11. 四半期スキャン + 年次ペンテスト
12. セキュリティポリシー
CDE(カード会員データ環境)
CDE(決済処理サーバー、トークン化DB、HSM)
↑ 分離
非CDE(Webサーバー、アプリサーバー、企業ネットワーク)
トークン化(要件3)
def tokenize(card_number):
response = requests.post("https://tokenizer.example.com/tokenize",
json={"pan": card_number},
headers={"Authorization": f"Bearer {vault_token}"}
)
return response.json()["token"]
# トークンのみ保存(カード番号は保存しない!)
db.execute("INSERT INTO payments (order_id, token, amount) VALUES (%s, %s, %s)",
(order_id, tokenized_card, 99.99))
保存データ暗号化(要件3.4)
key = vault.get_secret("payment-encryption-key")
cipher = Fernet(key)
encrypted_pan = cipher.encrypt(b"4111111111111111")
# 表示用マスキング(下4桁のみ)
masked = "************" + card_number[-4:]
ログ要件(要件10)
class PCILogger:
def log_access(self, user, resource, action):
# 変更不可のSIEMに送信
self.logger.info(json.dumps({
"type": "pci_access",
"timestamp": datetime.utcnow().isoformat(),
"user": user,
"resource": resource
}))
PCI DSS準拠レベル
| レベル | 年間取引数 | 検証 | |-------|-----------|------| | 1 | >600万 | オンサイト評価 + QSA | | 2 | 100万-600万 | SAQ + スキャン | | 3 | 2万-100万 | SAQ + スキャン |
ベストプラクティス
- 支払い処理を外部委託(Stripe)= スコープ削減!
- CVVやPINを保存しない
- 全カードデータをトークン化
- CDEを非CDEからセグメント化
- 3Dセキュアを実装
- 四半期ごとに暗号化キーをローテーション
- HSMで鍵管理
章のまとめ
- コアコンセプトと原理を理解
- 実装方法とテクニックを習得
- 一般的な問題と解決策に精通
- 実際のプロジェクトに適用可能
さらに読む
- 公式ドキュメントとAPIリファレンス
- GitHubのオープンソース例
- 技術書とオンラインコース
- コミュニティディスカッションと技術ブログ