セキュリティを、率直に。
バッジの壁ではなく、現時点でプロダクトに実装済みの、検証可能な管理策そのものを記載します。厳しい質問はこちらへ:hello@pauli.xyz。
通信と認証
- TLS専用の入口。APIはループバックにバインドされ、唯一の公開エントリポイントがTLSを終端します。ベアラーキーが平文で流れることはありません。
- キーはハッシュ化され、表示は1回のみ。保存されるのはSHA-256ハッシュ。平文が返されるのは作成時またはローテーション時の厳密に1回だけです。ローテーションと失効は即時に反映されます。
- すべてのクエリでワークスペースを分離。永続化レイヤーでスコープされ、テナントをまたぐ読み取りは403ではなく404を返します。
- キー単位のレート制限。Redis上のトークンバケット方式。フェイルオープンとフェイルクローズドは運用者が選択します。
Webhook
- 署名付きペイロード。ペイロードのバイト列そのものに対するタイムスタンプ付きHMAC-SHA256(
X-Pauli-Signature)により、傍受された配信の再送はお客様の検証許容時間内でしか成立しません。シークレットのローテーション中は、移行期間として新旧両方のシークレットで署名します。X-Pauli-Event-Idで重複を排除できます。 - 二重のSSRFガード。Webhook URLはhttpsのみ。非公開アドレス(ループバック、RFC 1918、リンクローカル、クラウドメタデータ)に解決されるURLは登録時に拒否され、配信時にもDNSリバインディング対策として再チェックされます。常時有効で、無効化はできません。
金銭とデータの完全性
- 端から端までDecimal。金銭は浮動小数点を一切通りません。APIの金額は正確な10進文字列です。
- データベースが強制する、厳密に1回の課金。部分ユニークインデックスが請求・引き落とし・返金を保護します。リトライや再配信で二重課金・二重付与が起きることはありません。
- 入金の確認後にのみ残高へ反映。StripeのWebhookは再送許容付きで署名検証され、ステータスのcompare-and-swapにより付与は冪等です。
- 追記専用の監査ログ。キーのライフサイクル、ジョブイベント、課金、コンプライアンス判定、認証失敗を、対象の操作と同一のトランザクションで記録します。
運用
- 信頼できる唯一の情報源。すべての状態はPostgresが保持します。キューを失っても、ジョブ・結果・金銭は失われません。
- クラッシュ耐性のある処理。ワーカーはリース付きでジョブを確保し、各フェーズ境界でコミットします。停止したプロセスが取りこぼした作業は、スイープが再導出します。
- 復元検証済みのバックアップ。スケジュールに沿って復元テストを実施します(復元されないバックアップはバックアップではありません)。暗号化したコピーをホスト外へ搬出します。
- エラーは内部情報を漏らしません。5xxのボディには安定したエラーコードとリクエストIDのみが含まれ、詳細はサーバー側のログに留まります。
- 公開ステータスページ。当社インフラの外部でホストされるstatus.pauli.xyzは、当社側が到達不能なときでも参照できます。
コンプライアンス体制
- ルーター内の輸出管理ゲート。規制対象ハードウェアは、管轄を申告しスクリーニングを通過したワークスペースにのみルーティングされ、すべての拒否が監査されます。
- 取引禁止対象のスクリーニング。すべてのスクリーニング判定は監査され、ルーティングはリクエストごとにそれを参照します。
SOC 2について:お客様が必要とされる時点で認証を取得します。セキュリティ質問票には、ご依頼に応じて回答します。
脆弱性の報告
再現手順を添えてhello@pauli.xyzまでご連絡ください。2営業日以内に受領をお知らせします。誠実な調査に対して法的措置を取ることはありません。