セキュリティとコンプライアンス
- アクセストークンは有効期間の短い JWT(15分)で、API ゲートウェイで検証されます。リフレッシュトークンはアイドル状態で30日、最長90日有効で、使用のたびにローテーションされ、HttpOnly、Secure、SameSite の Cookie に保存されます。ローテーション済みのリフレッシュトークンを再利用すると、チェーン全体が失効します。
- 署名鍵は重複期間を設けて90日ごとにローテーションされ、公開鍵は
/.well-known/jwks.jsonで公開されています。 - 権限はトークンに埋め込まれていません。リクエストのたびに読み取られるため、役割の変更はすぐに反映され、どのセッションも一元的に失効させることができます。
- 二要素認証(TOTP)は、任意、オーナーと管理者に必須、または全員に必須に設定できます。Google Workspace と Apple によるシングルサインオンはすべてのプランで利用できます。SAML 2.0、パスキー、SCIM によるプロビジョニングは計画中で、まだ利用できません。
- API キーは一度だけ表示され、SHA-256 ハッシュとして保存され、固定のカタログからスコープが選ばれ、所有者の権限の範囲に制限され、即座に取り消せます。認証を参照してください。
- サインインは IP ごと、メールアドレスごとにレート制限されます。10回失敗するとアカウントは30分間ロックされます。同じ IP アドレスからの失敗は集計・記録されますが、既定ではその IP アドレスはブロックされません。すべてのサインイン、失敗、リフレッシュ、権限の変更、管理操作は監査ログに記録されます。
テナントの分離
Section titled “テナントの分離”すべてのサービスのすべての行には、その行が属するアカウントが記録され、すべてのクエリは自動的にアカウントで絞り込まれます。この絞り込みを無効にするには明示的な許可リスト済みの呼び出しが必要で、それはテナントをまたぐスタッフの操作でのみ使われ、テストで保護されています。サイト単位の役割では、さらにサイトによる絞り込みが加わります。別のアカウントのリソースへのリクエストには 403 ではなく必ず 404 が返されるため、ID を列挙することはできません。書き込みのエンドポイントはすべて、厳格なフィールドの許可リストを使います。新しいエンドポイントには、アカウントをまたぐアクセスのテストが必須です。
すべてのリクエストの X-Account-Id ヘッダーはトークンと照合されるため、クライアントのバグや再送されたトークンによって、別のテナントのデータが気付かれないまま読み取られることはありません。
すべての公開エンドポイントで TLS 1.2 以降、サービス間では相互 TLS、すべてのデータストアへの TLS、保存時の暗号化されたボリューム、機密性の高いフィールドにはアカウントごとのエンベロープ暗号化を使っています。公開証明書は自動で発行・更新され、内部の証明書は有効期間が短く設定されています。
シークレット
Section titled “シークレット”お客様の BYOK プロバイダーキーや Webhook のシークレットを含むすべてのシークレットは、専用のシークレットマネージャーに暗号化して保存され、サービスごとに範囲が限定され、監査されます。ソース管理(コミット前のスキャンで強制)やコンテナイメージ(CI でチェック)には一切含まれません。開発者は既定で本番環境のシークレットにアクセスできません。緊急時のアクセスには2人の承認が必要で、有効期間は短く、黙らせることのできないチャネルに記録されます。
Webhook
Section titled “Webhook”送信する配信は、タイムスタンプと未加工の本文に対する HMAC-SHA256 で署名され、ノンスとイベント ID を含み、5分間の時間枠の外では拒否され、バックオフしながら再試行され、最終的にデッドレターキューに入ります。シークレットは重複期間を設けてローテーションされ、即座に取り消すこともできます。プロバイダーからの受信 Webhook は、処理を始める前に各プロバイダーの方式で検証されます。詳細: Webhook。
4つの層があります: エッジネットワークでの DDoS とボットへの対策、リバースプロキシでの IP ごとの制限、API ゲートウェイでのアカウントごと・ID ごとのトークンバケット、サービス内部でのドメインごとの制限。制限の詳細は API の概要にあります。
すべての変更は、追記のみ可能でハッシュチェーン化された監査ログに記録され、保存クラスは2種類あります: 一般的なイベントと、コンプライアンスのイベント(データ主体の請求、侵害、サブプロセッサー、KYC の記録)です。クラスは記録時に割り当てられ、ログは誰も編集・削除できません。クラスごとの自動クリーンアップはまだ稼働していません。オーナーと管理者は監査ログを絞り込んでエクスポートできます。パスワード、トークン、キーがログに記録されることはなく、ログの層で既知の機密キーはマスクされます。
- GDPR、英国 GDPR、CCPA、LGPD に基づくデータ主体の請求(アクセス、エクスポート、消去)は、コンプライアンスコンソールで受け付け、期限とともに追跡されます。消去は RolChat のスタッフが実施し、請求はスタッフが確認した時点で初めて完了となります。全モジュールを対象とした自動消去はまだ利用できません。
- データの所在地: データは EU 内に保存されます。リージョンは登録時の国では選ばれません。アカウント設定のリージョン設定は記録されるだけで、現時点ではデータを移動しません。
- プランに応じた保存期間: 1年、2年、または3年。会話や連絡先を削除すると、その期間が終わるまで非表示になります。アカウントの削除は、30日間の取り消し期間を設けた申請で、その後スタッフがデータを消去します。未払いのアカウントは90日間保持され、その後消去されます。これらの期間を実現する自動クリーンアップは導入中です。
- データ処理契約、サブプロセッサーの一覧、プライバシーポリシー、Cookie ポリシーは rolchat.com で公開しており、データ処理契約には登録時に同意します。
- GDPR 第33条の定めに従い、72時間以内に侵害を通知します。
依存関係は継続的に監視されています。ロックファイルはコミットされ、ベースイメージはダイジェストで、CI のアクションはコミットで固定されています。ベータ以降、毎年第三者によるペネトレーションテストを予定しており、API、ウィジェット、公開ページに加え、侵害を前提とした内部シナリオも対象とします。一般提供の開始に合わせて、非公開のバグバウンティを実施します。セキュリティの問題は security@rolchat.com に報告してください。
プラットフォームは複数のノードで稼働し、ステートレスなサービスには自動フェイルオーバー、データベースにはマネージドのレプリケーションを備えています。プランごとの稼働率の目標は、ご契約書に記載されています。
インシデント対応
Section titled “インシデント対応”すべてのサービスのランブック、オンコールのローテーション、自社のインフラが動かないときでも機能する外部の呼び出しシステム、そしてプロセスに組み込まれた顧客への通知義務があります。