PII分離・暗号化・RBAC・監査ログ
機密度に応じた保管場所
ユーザー
│
▼
Firebase Auth ─────── 本人確認(認証情報を自社で持たない)
│
▼
Firestore ─────────── PII(住所・連絡先等)
│
▼
Cloudflare Workers ── 毎回認可チェック(条件付きアクセス)
│
├─▶ D1 ─────────── 業務データ(非PII:注文・原本メタ等)
│
└─▶ R2 ─────────── 完全非公開(直接URL不可)
| レイヤー | 方式 | 管理 |
|---|---|---|
| 通信 | TLS 1.3(Cloudflare自動) | Cloudflare |
| データベース(Firestore) | AES-256 + エンベロープ暗号化 | Google Cloud |
| ストレージ(R2) | Cloudflare管理暗号化 + アプリ暗号化 | Cloudflare + App |
| 画像(アプリ層) | AES-256-GCM(Cloud KMS鍵管理、90日ローテ) | Application |
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// 自分の組織のデータのみアクセス可能
match /projects/{projectId} {
allow read: if request.auth != null &&
get(/databases/$(database)/documents/users/$(request.auth.uid))
.data.orgId == resource.data.orgId;
// 削除は管理者のみ
allow delete: if request.auth != null &&
get(/databases/$(database)/documents/users/$(request.auth.uid))
.data.role == 'admin';
}
}
}アプリにバグがあってもFirestore側で不正アクセスをブロック
ルールはコードとして記述、監査人に論理的に説明可能
ロール変更・退職処理が即座に反映
Admin SDK以外ではルールを迂回できない
| ロール | 注文作成 | 注文閲覧 | PII閲覧 | 画像DL | 管理機能 |
|---|---|---|---|---|---|
| customer | ✓ | 自分のみ | 自分のみ | 自分のみ | − |
| studio_staff | ✓ | 事務所内 | 事務所内 | 事務所内 | − |
| factory_operator | − | 全注文 | − | 全注文 | − |
| admin | ✓ | 全注文 | 全注文 | 全注文 | ✓ |
Cloudflare WAF(OWASP Top10対応)
IPベース・ユーザーベースの制限
Cloudflare Unmetered DDoS保護
Firestore(7日)+ D1(30日)
全API操作のログ記録(7年保持)
Dependabotによる依存関係監視
| 項目 | 対応状況 |
|---|---|
| 個人情報保護法 | 対応済み(PII分離設計) |
| GDPR | 対応可能(データ削除API実装予定) |
| PCI DSS | Stripe/Paidy委託(Level 1準拠) |
| SOC 2 Type II | Cloudflare/Firebase/GCPが取得済み |
| ISO 27001 | インフラプロバイダが取得済み |