ストーリー
佐藤CTOが深刻な表情で続けます。
規制制約
PCI DSS Level 1
NexPayはクレジットカード情報を処理するため、PCI DSS(Payment Card Industry Data Security Standard)Level 1への準拠が必須です。
// PCI DSS の12要件とアーキテクチャへの影響
interface PCIDSSRequirement {
id: string;
requirement: string;
architectureImpact: string;
}
const pciDSSRequirements: PCIDSSRequirement[] = [
{
id: "Req-1",
requirement: "ファイアウォールの設置と維持",
architectureImpact: "CDE(カード会員データ環境)のネットワーク分離。VPC分割とセキュリティグループ設計",
},
{
id: "Req-2",
requirement: "ベンダー提供のデフォルト値を使用しない",
architectureImpact: "IaCによる設定管理の徹底。デフォルトパスワード・設定の排除",
},
{
id: "Req-3",
requirement: "保存されたカード会員データの保護",
architectureImpact: "トークン化サービスの導入。暗号化キーの管理(HSM/KMS)",
},
{
id: "Req-4",
requirement: "オープンネットワークでの暗号化",
architectureImpact: "TLS 1.2以上の強制。内部通信もmTLSで暗号化",
},
{
id: "Req-6",
requirement: "安全なシステムとアプリの開発・維持",
architectureImpact: "セキュアSDLC。コードレビュー必須。WAF導入",
},
{
id: "Req-7",
requirement: "カード会員データへのアクセスを業務上の必要性で制限",
architectureImpact: "RBAC/ABAC。最小権限の原則。アクセスログの記録",
},
{
id: "Req-8",
requirement: "コンピュータアクセスの識別と認証",
architectureImpact: "MFA必須。個人IDの管理。特権アクセス管理(PAM)",
},
{
id: "Req-10",
requirement: "ネットワークリソースとカード会員データへのすべてのアクセスを追跡・監視",
architectureImpact: "集中ログ管理。監査ログの改ざん防止。1年間の保存",
},
{
id: "Req-11",
requirement: "セキュリティシステムとプロセスの定期的なテスト",
architectureImpact: "脆弱性スキャン(四半期)、ペネトレーションテスト(年次)の自動化",
},
{
id: "Req-12",
requirement: "情報セキュリティポリシーの維持",
architectureImpact: "ポリシーのコード化。コンプライアンスチェックのCI/CD統合",
},
];
PCI DSSのネットワーク分離設計
graph TD
subgraph Public["パブリックゾーン"]
CDN["CDN"]
WAF["WAF/LB"]
end
subgraph DMZ["DMZ(非CDE)"]
GW["Web API Gateway"]
ACC["Account Service"]
TRF["Transfer Service"]
end
subgraph CDE["CDE(カード会員データ環境)<br/>※ すべての通信はmTLS<br/>※ 厳格なACLで制御"]
PAY["Payment Service"]
TOK["Tokenize Service"]
CDB["Card DB<br/>(暗号化)"]
end
CDN --> GW
WAF --> GW
GW --> PAY
classDef pub fill:#3498db,stroke:#2980b9,color:#fff
classDef dmz fill:#f39c12,stroke:#e67e22,color:#fff
classDef cde fill:#e74c3c,stroke:#c0392b,color:#fff
class CDN,WAF pub
class GW,ACC,TRF dmz
class PAY,TOK,CDB cde
資金決済法
法規制: 資金決済法
適用範囲: 前払式支払手段(チャージ残高)、資金移動業(送金)
アーキテクチャへの影響:
- 供託義務:
内容: 未使用残高の50%以上を法務局に供託
影響: 残高管理の正確性が法的義務。二重計上は許されない
- 利用者資金の分別管理:
内容: 自社資金と利用者資金を明確に分離
影響: 勘定系の設計に分別管理の仕組みが必須
- 犯収法対応:
内容: 10万円超の送金にはKYC(本人確認)が必須
影響: KYCサービスと送金サービスの連携設計
- 報告義務:
内容: 疑わしい取引の届出義務
影響: AMLモニタリングシステムのリアルタイム化
金融商品取引法(投資機能)
法規制: 金融商品取引法
適用範囲: 株式・投資信託の売買仲介
アーキテクチャへの影響:
- 適合性原則:
内容: 顧客の知識・経験・財産に適合した勧誘
影響: ユーザープロファイルと投資商品のマッチングロジック
- 最良執行義務:
内容: 顧客にとって最も有利な条件で注文を執行
影響: 複数取引所の価格比較と最適ルーティング
- 分別管理:
内容: 顧客資産と自社資産の分離
影響: 投資口座の勘定設計
- 取引記録の保存:
内容: 注文・約定の全記録を10年間保存
影響: イベントソーシングによる完全な監査証跡
「法規制はアーキテクチャの”外枠”を決める。その枠の中で最善の設計を考えるのがアーキテクトの仕事だ」 — 佐藤CTO
技術制約
既存システムからの移行
既存システム制約:
現行アーキテクチャ:
- モノリスアプリケーション(Java 11 / Spring Boot 2.x)
- PostgreSQL 13(単一インスタンス)
- AWS東京リージョン(単一AZ中心)
- Jenkins CI/CD
- 月次リリース
移行制約:
- ビッグバン移行は不可(300万ユーザーのサービス継続が必須)
- 既存APIとの後方互換性を2年間維持
- データ移行中のダウンタイムは最大4時間(深夜帯)
- 既存加盟店の決済端末ソフトウェア更新は段階的
共存期間:
- 新旧システムの並行運用期間: 12-18ヶ月
- ストラングラーフィグパターンで段階的に移行
チーム制約
// チーム構成と技術スキルマトリクス
interface TeamConstraints {
totalHeadcount: number;
teamStructure: TeamUnit[];
skillMatrix: Record<string, SkillLevel>;
}
const teamConstraints: TeamConstraints = {
totalHeadcount: 50,
teamStructure: [
{ name: "決済チーム", size: 12, focus: "Payment/Settlement" },
{ name: "送金チーム", size: 8, focus: "Transfer/Remittance" },
{ name: "投資チーム", size: 8, focus: "Investment" },
{ name: "共通基盤チーム", size: 8, focus: "Platform/Auth/KYC" },
{ name: "SRE/インフラチーム", size: 6, focus: "Infrastructure/SRE" },
{ name: "セキュリティチーム", size: 4, focus: "Security/Compliance" },
{ name: "QAチーム", size: 4, focus: "Quality Assurance" },
],
skillMatrix: {
"Java/Kotlin": "STRONG", // 全チーム
"TypeScript": "MODERATE", // フロントエンド中心
"Go": "BEGINNER", // SREの一部
"Kubernetes": "MODERATE", // SREチーム
"AWS": "STRONG", // 東京リージョン経験あり
"PostgreSQL": "STRONG", // 全チーム
"Kafka": "BEGINNER", // 一部メンバーのみ
"マイクロサービス": "BEGINNER", // モノリス経験中心
},
};
インフラ・予算制約
| 制約 | 内容 | アーキテクチャへの影響 |
|---|---|---|
| 年間インフラ予算 | 3億円以内 | マルチリージョン構成のコスト最適化が必要 |
| クラウドプロバイダー | AWS(既存契約) | AWSサービスを中心に設計 |
| リリース頻度目標 | 週1回以上 | CI/CDパイプラインの整備が必須 |
| 開発期間 | 2年(2027年末ローンチ) | 段階的リリース計画が必要 |
| 外部連携先 | 銀行API、証券API、カードネットワーク | 各外部システムのSLAに依存 |
制約のアーキテクチャへの影響マッピング
制約→設計判断マトリクス
| 制約 | 影響を受ける設計領域 | 設計方針 |
|---|---|---|
| PCI DSS Req-1 | ネットワーク設計 | CDE分離のための専用VPC/サブネット |
| PCI DSS Req-3 | データストレージ | カード番号のトークン化、HSMによる鍵管理 |
| PCI DSS Req-10 | ログ設計 | 集中ログ基盤(改ざん防止、1年保存) |
| 資金決済法 | 勘定系設計 | 二重計上防止の冪等性設計 |
| 犯収法 | サービス連携 | KYC→送金のゲートウェイパターン |
| 既存システム | 移行戦略 | ストラングラーフィグパターン |
| チームスキル | 技術選定 | Java/Kotlin中心、段階的なKafka導入 |
| 予算3億円 | インフラ設計 | リザーブドインスタンス、ティアード可用性 |
制約が設計を駆動する具体例
例: PCI DSSがサービス分割を駆動する
PCI DSSの「スコープ最小化」の原則は、カード情報を扱うサービスを最小限に分離することを要求します。これがマイクロサービスアーキテクチャ採用の強力な動機となります。
モノリスの場合:
全システムがPCI DSSスコープに入る
→ 監査対象が膨大、コンプライアンスコスト大
マイクロサービスの場合:
Payment Service + Tokenization ServiceのみがCDEスコープ
→ 監査対象を最小化、コンプライアンスコスト削減
→ 他のサービスはカード番号に触れない設計
例: チームスキルが技術選定を制約する
チームのKafka経験が浅いため、初期段階ではSQS/SNSを採用し、段階的にKafkaに移行する計画が現実的です。
Phase 1(0-6ヶ月): SQS/SNS(チームの既存スキルで対応可能)
Phase 2(6-12ヶ月): Amazon MSK(Managed Kafka)を一部導入
Phase 3(12-18ヶ月): イベント駆動基盤をKafkaに統一
制約の受容と交渉
すべての制約が絶対不可変ではありません。制約を3つのレベルに分類して管理します。
| レベル | 説明 | 例 | 対応 |
|---|---|---|---|
| Hard制約 | 法的・契約的に変更不可 | PCI DSS、資金決済法 | 設計の前提条件として受容 |
| Firm制約 | 大きなコストで変更可能 | クラウドプロバイダー、既存システム互換 | 変更のROIを評価して判断 |
| Soft制約 | 交渉・調整で変更可能 | 予算、リリース頻度、チーム構成 | ステークホルダーと交渉 |
「例えば、年間予算3億円はCFOとの交渉で4億円に増額できるかもしれない。でもPCI DSSは交渉の余地がない。この区別を明確にしておくことで、設計の自由度が見えてくる」 — 佐藤CTO
まとめ
| ポイント | 内容 |
|---|---|
| PCI DSS | 12要件がネットワーク・データ・ログ設計を規定。CDE分離が最重要 |
| 資金決済法 | 供託義務、分別管理、犯収法対応が勘定系設計を制約 |
| 金商法 | 投資機能の適合性原則、取引記録10年保存 |
| 技術制約 | 既存モノリスからの段階的移行、チームスキルに合った技術選定 |
| 制約レベル | Hard/Firm/Softに分類し、交渉可能性を明確化 |
チェックリスト
- PCI DSSの主要要件とアーキテクチャへの影響を理解した
- 資金決済法・犯収法の制約を把握した
- 既存システムからの移行制約を理解した
- チーム構成とスキルマトリクスの制約を認識した
- 制約のHard/Firm/Soft分類を理解した
次のステップへ
次はStep 1の演習です。ここまで学んだステークホルダー分析、品質属性シナリオ、制約分析を統合して、NexPayの要件分析ドキュメントを作成しましょう。
推定読了時間: 30分