Security Overview — Bookyou株式会社 (jpcite)
jpcite (運営: Bookyou株式会社、適格請求書発行事業者番号 T8010001213708) の情報セキュリティ posture を外部公開向けに集約しました。 6 層 defense / 暗号化 / アクセス制御 / 副処理者 5 社 / DR / dependency audit / 脆弱性開示プロセス / SOC 2 alternative の自己宣言を含みます。 詳細な脆弱性開示は /security/policy.html + /.well-known/security.txt (RFC 9116) を参照してください。
1. Defense layers (6 層)
jpcite は外側の Cloudflare WAF から内側の Stripe metered billing まで、6 層の独立した防御層を持ちます。 上位層が突破されても下位層で被害を限定する設計です。
- Cloudflare WAF Custom Rules — 国別 / IP / User-Agent / path pattern による block + Cloudflare Managed Ruleset (OWASP CRS 派生)
- Cloudflare Rate Limiting — zone-wide の絶対上限。 異常 traffic を edge で吸収
- App middleware:
RateLimitMiddleware— per-key 10 req/s、anonymous 1 req/s - Anonymous IP limit — 匿名は 1 IP あたり 1 日 3 req (JST 翌日 00:00 リセット)
- Customer cap middleware — 顧客自身が
monthly_cap_yenで支出上限を設定 - Stripe metered billing — 4xx / 5xx は課金しない。 不正課金リスクを edge から遮断
2. 暗号化 (Encryption)
| カテゴリ | 仕様 |
|---|---|
| In transit | TLS 1.2+ (Cloudflare → Fly.io / Stripe → Bookyou / Postmark / Sentry の全 leg)。 HSTS 適用、HTTP は 301 で HTTPS に redirect |
| At rest (DB) | Fly.io volume AES-256 (LUKS 派生)、SQLite WAL モード |
| At rest (backup) | Cloudflare R2 への weekly backup は server-side encryption (AES-256) + Fly.io snapshot は volume 暗号化を継承 |
| PII redaction | query log は INV-21 invariant により T-number / email / 電話番号 を mask してから永続化 |
| API key 保管 | 顧客 API key は raw を保管せず api_keys.key_hash (SHA-256 + pepper) のみ |
| 決済情報 | Bookyou 側に保管せず Stripe (PCI-DSS Level 1) 経由で token 化 |
3. アクセス制御 (Access control)
- Operator: 1 名 (代表 梅田 茂利)。 全本番 secret + admin endpoint は単独管理
- Admin endpoint:
/v1/admin/*はADMIN_API_KEY専用、IP allowlist + 2FA required - Secrets: Fly secrets manager 経由で注入 (環境変数 / リポジトリでは扱わない)。 Gitleaks pre-commit hook で漏洩 commit を block
- Pepper / Salt: API key hash + ピアウェアパスワード保存に 6 種の pepper を使用、年次 rotation
- Session: REST API は stateless (X-API-Key bearer)、session cookie 不発行
4. 副処理者 (Sub-processors) 5 社
| 委託先 | 業務 | 所在 | 第三者認証 | 個人情報 |
|---|---|---|---|---|
| Stripe Japan K.K. | 決済 / 適格請求書発行 | 日本 (US 親会社) | PCI-DSS Level 1 / SOC 1 Type II / SOC 2 Type II | email、決済 token、住所 (請求書発行用) |
| Fly.io, Inc. | API hosting (NRT region = 東京) | 米国 (運用 region は東京) | SOC 2 Type II | 無し (volume 内のみ) |
| Cloudflare, Inc. | CDN / WAF / DNS | 米国 (世界 PoP) | SOC 2 Type II / ISO 27001 / PCI-DSS | edge アクセスログ (90 日 rolling) |
| Postmark (ActiveCampaign LLC) | Transactional email 送信 | 米国 | SOC 2 Type II / GDPR-DPA | 送信先 email、件名・本文 |
| Sentry (Functional Software, Inc.) | サーバ error tracking | 米国 | SOC 2 Type II / ISO 27001 | 無し (PII を送信しない設定) |
本一覧は /privacy.html §7 と一致します。 副処理者の追加・変更は /audit-log.rss で 30 日前通知します。
5. Backup & DR (RPO 24h / RTO 4h)
- RPO (Recovery Point Objective): 24 時間。 Cloudflare R2 weekly backup + Fly.io volume snapshot daily
- RTO (Recovery Time Objective): 4 時間。 Fly.io 別 region (HND fallback) + 最新 R2 backup から restore
- Backup スクリプト: API DB backup と R2 backup を GitHub Actions の定期ジョブで実行
- Restore drill: 四半期 1 回、別 region に R2 backup から restore して boot 確認
- Backup 暗号化: R2 server-side encryption (AES-256)、key は Cloudflare 管理
6. 脆弱性開示 (Vulnerability disclosure)
- RFC 9116: /.well-known/security.txt (Expires=2027-04-26) 公開
- Ack window: 報告から 72 時間以内に一次返信 (JST 営業日)
- Fix target: server-side は 14 日以内、client-side は次回 PyPI release で対応
- Disclosure window: ack 後 90 日。 90 日経過時点で未修正かつ延長要請なしの場合、公開可
- Safe harbour: 善意・最小データ・無破壊・非公開維持の条件下で法的措置を取らない (詳細: /security/policy.html)
- Bug bounty: 金銭報酬は提供しない (Solo ops)。 release notes + 本 page で credit (本人同意あり)
7. Dependency audit
- Pre-commit blocking:
ruff(lint + format) /bandit(CWE-style 静的解析) /mypy --strict(型) /gitleaks(secret scan) を全 commit で実行 - 週次: GitHub Actions
pip-audit+ Dependabot で CVE 監視 (public repo 化後に自動化) - Boot 時 invariant:
tests/test_no_llm_in_production.pyが anthropic / openai / google.generativeai / claude_agent_sdk の import を hard-fail。 prompt injection の入口を物理遮断 - License audit:
pip-licenses結果を定例 cron で生成、license breakdown を開示予定 (現行: MIT 主体、Apache 2.0 / BSD 一部、GPL 採用なし) - SBOM: CycloneDX 1.4 形式 (8 shard) を
/.well-known/sbom.jsonから公開、月次 cron (.github/workflows/sbom-publish-monthly.yml) で再生成
8. インシデント対応 (Incident response)
- Detect — Sentry alert + Cloudflare anomaly + cron monitoring
- Contain — 該当 endpoint を Cloudflare で block / API key を強制 rotate
- Communicate — 確認後 24 時間以内に影響顧客へ email 通知 + /status.html 更新
- Patch — 14 日以内 (server-side) / 次 release (client-side)
- Postmortem — 7 日以内に root cause + 再発防止を /security/ に redacted 公開
9. SOC 2 / ISO27001 取得なし — 代替自己宣言
jpcite は Solo zero-touch ops のため SOC 2 Type II / ISO 27001 / Pマーク は取得しません。 代替として以下の自己宣言・第三者検証可能な指標を提示します。
| 代替表明 | 状態 | 検証 URL (取得後) |
|---|---|---|
| OpenSSF Best Practices Badge (passing → silver → gold) | 申請予定 | https://www.bestpractices.dev/projects/<id> (取得後追記) |
| OWASP ASVS Level 1 self-assessment | 作業中 | /security/asvs.html (公開後) |
| CSA STAR CAIQ (self-assessment Level 1) | 作業中 | /security/caiq.html (公開後) |
| Cloudflare Trust Hub (CF 側 control) | 参照可 | cloudflare.com/trust-hub/ → |
| RFC 9116 security.txt | 公開済 | /.well-known/security.txt |
| HTTPS / TLS observatory (Mozilla / SSL Labs) | A+ 目標 | 外部評価サービスで第三者検証可能 |
10. 連絡先
- Bookyou株式会社: 〒112-0006 東京都文京区小日向2-22-1
- 適格請求書発行事業者番号:
T8010001213708(令和7年5月12日登録) — 国税庁公表 → - 代表: 梅田 茂利
- 連絡先: [email protected] (件名先頭に
[security]を付すとセキュリティ報告として優先処理)
本 page は外部公開向けの security overview です。 詳細な運用手順や具体的な secret 管理手順は公開範囲から外しています。 関連 page: 法人購買 1-screen · 脆弱性開示ポリシー · security.txt (RFC 9116) · trust.json (machine-readable) · 法令フェンス
