セキュリティ

Scandock は、お客様の本番データベースに接続して監視と調査を行います。どの権限で接続し、取得したデータをどこに保存し、AI に何を渡すのかを、導入の検討やセキュリティ審査のためにまとめました。

データの保存

  • アカウントとプロジェクトのデータ: アカウント、プロジェクトとメンバー、監視項目、インシデント、メモリ、監査ログ、Cloudflare Tunnel の設定、Cloudflare D1 と BigQuery の連携は TiDB Cloud のデータベースに保存します。
  • 監視の状態と取得した値: 監視の予約と、監視項目のクエリが返した値の履歴は、Cloudflare Durable Objects のストレージにプロジェクトごとに分けて保存します。
  • 接続文字列と連携先の認証情報: AES-256-GCM で暗号化してから保存します。暗号鍵は Cloudflare Workers のシークレットとして管理し、データベースには置きません。平文は画面・API の応答・AI への入力のいずれにも出しません。
  • 保存時の暗号化: TiDB Cloud と Cloudflare Durable Objects は、保存するデータをそれぞれのサービスの側で暗号化します。接続文字列などの認証情報は、それに加えて Scandock が暗号化します (上のとおり)。
  • 保存期間: 監視項目の値の履歴は Starter で30日、Business で90日、Enterprise で365日、監査ログは Starter で30日、Business で365日、Enterprise で3年保存し、それを過ぎたものを毎日削除します。契約が終わったプロジェクトには、30日間はそれまでのプランの期間を、その後はいちばん短い期間 (30日) を当てはめます。AI の判定の履歴は30日で削除します。インシデント、調査の記録、会話、メモリは、接続・会話・メモリ・プロジェクトを削除するまで残ります。
  • 保存先のリージョン: アカウント・プロジェクト・接続情報・インシデントなどを置く TiDB Cloud は、東京リージョンです。値の履歴と監視の予定を置く Cloudflare の Durable Objects は、Cloudflare が配置を決めるため、地域を固定していません。

データベースへの接続

  • 読み取り専用ユーザーで動く: 監視と調査には読み取り専用のユーザーだけを使います。書き込みできる接続文字列を登録した場合は、その場で監視用のユーザーを作成し、そのユーザーで書き込めないことを確かめてから登録を終えます。
  • 監視用ユーザーに与える権限: テーブルの参照と、統計情報の参照だけです。PostgreSQL では pg_read_all_data (使えない場合はスキーマごとの SELECT) と pg_monitor、MySQL では SELECT と PROCESS、SQL Server では db_datareader と VIEW DATABASE STATE / VIEW SERVER STATE を与えます。環境によって与えられない権限は飛ばします。
  • 接続の側でも書き込みを止める: ユーザーの権限に加えて、PostgreSQL ではセッションを読み取り専用に固定し、SQL Server では毎回ロールバックするトランザクションの中でクエリを実行します。MySQL でもセッションを読み取り専用にしますが、TiDB などこの設定を受け付けない DB では、ユーザーの権限だけで書き込みを止めます。
  • AI が作るクエリの検査: AI が作ったクエリは、単文の読み取りであることを検査してから実行します。PostgreSQL と MySQL では SELECT・EXPLAIN・SHOW・WITH (本体が SELECT のもの)、SQL Server では SELECT と WITH、Cloudflare D1 では SELECT・EXPLAIN・WITH (本体が SELECT のもの)、BigQuery では SELECT と WITH (本体が SELECT のもの) だけを通します。複数の文や、MySQL・MariaDB の実行可能なコメント (/*! */ など) は拒否します。1回のクエリは15秒で打ち切り、返す行は200行までです。
  • 管理者の接続文字列: 書き込みできる接続文字列は、暗号化して保存します。使うのは、監視用ユーザーの作成と削除、および「管理者接続で実行」として登録した対処を実行するときだけです。読み取り専用の接続文字列だけを登録すれば、書き込みできる接続を Scandock に預けずに使えます (その場合、書き込みを伴う対処は使えません)。
  • 通信の暗号化: インターネットを通る接続では、PostgreSQL・MySQL・SQL Server のいずれにも TLS (1.2 以上) で接続し、サーバー証明書を必ず検証します。暗号化しない指定や証明書の検証を外す指定 (sslmode=disable、ssl-mode=DISABLED、encrypt=false、trustServerCertificate=true など) を含む接続文字列は、登録の時点でお断りします。Cloudflare Tunnel 経由の接続では、Cloudflare からお客様の cloudflared までを Tunnel が暗号化します。このとき DB とは TLS を使わずに話すため、cloudflared から DB までの区間 (お客様のネットワークの中) は暗号化されません。cloudflared は DB と同じネットワーク、できれば同じマシンで動かしてください。
  • 接続元の IP アドレス: 直接の接続は Cloudflare Workers から行い、接続元の IP アドレスは固定されていません。DB をインターネットに公開していない場合や、接続元を IP アドレスの許可リストで絞っている場合は、Cloudflare Tunnel を使えます。お客様のネットワークで cloudflared を動かすと、cloudflared から Cloudflare へ外向きに接続するため、DB をインターネットに公開したり、受け付ける側のファイアウォールを開けたりする必要がありません。Tunnel ごとに推測されにくいホスト名を、Scandock の本体とは別の専用ドメインに作ります。お客様が入力した DB のアドレスは Tunnel の設定にだけ書き、公開の DNS には載せません。このホスト名はすべて Cloudflare Access で守り、Scandock だけが持つサービストークンを付けた接続しか Tunnel に入れません。cloudflared の起動に使うトークンは保存せず、オーナーと管理者が求めたときだけ Cloudflare から取り出して表示します。
  • Cloudflare D1: Cloudflare D1 は、Cloudflare の OAuth でお客様が同意したアカウントの D1 を、Cloudflare の API を通して読み取ります。D1 にはユーザーの権限がないため、読み取り専用のユーザーの代わりに、同意で求める権限を読み取りだけ (D1・アカウントの分析・アカウントの設定の読み取り) にしています。書き込みは Cloudflare の側でも断られ、登録の時点で実際に書き込めないことを確かめます。権限は D1 ごとではなくアカウントごとに与えられるため、同意したアカウントの D1 はすべて読める状態になりますが、監視と調査に使うのは登録した D1 だけです。同意で受け取るリフレッシュトークンは暗号化して保存し、1時間で切れるアクセストークンは保存しません。同意は、Cloudflare のダッシュボードのプロフィールからいつでも取り消せます。
  • BigQuery: BigQuery は、Google の OAuth でお客様が同意した Google アカウントの権限で、お客様が選んだプロジェクトの BigQuery を、BigQuery の API を通して読み取ります。同意で求める権限は BigQuery の読み取りだけで、書き込みは Google の側でも断られ、登録の時点で実際に書き込めないことを確かめます。読めるのは、同意した Google アカウントが見られるデータです。監視専用の Google アカウントを用意し、プロジェクトでジョブを実行する権限 (BigQuery ジョブユーザー) と、監視したいデータセットを読む権限 (BigQuery データ閲覧者) だけを与えて同意すると、読める範囲を絞れます。クエリは選んだプロジェクトで実行され、読んだデータ量の BigQuery の料金はそのプロジェクトに付きます。1回のクエリで課金されるデータ量は 1 GiB までに制限し、超えるクエリは BigQuery が実行せずに断ります。同意で受け取るリフレッシュトークンは暗号化して保存し、1時間で切れるアクセストークンは保存しません。同意は、Google アカウントの「サードパーティ製のアプリとサービス」からいつでも取り消せます。

書き込みと承認

  • 登録した対処だけを実行する: 書き込みを伴う対処は、プロジェクトのオーナーか管理者が事前に登録したものに限ります。AI はその中から選んで提案するだけで、任意の書き込みを組み立てて実行することはありません。
  • 実行には承認が要る: 対処の実行には、既定でオーナーか管理者の承認が要ります。管理者接続で実行する対処は、常に承認が必要です。承認なしで実行できるのは、オーナーが自動実行を明示的に有効にした、管理者接続を使わない対処だけです。
  • 記録: AI が実行したクエリ、判断とその理由、承認・却下、実行の結果は、すべてインシデントに残ります。

AI に渡すデータ

AI には OpenAI の API を使います。監視項目の設計、異常の判定、原因の調査、会話への回答のために、接続の名前、スキーマの情報と DB の意味づけ、監視項目の定義と値、過去のインシデントとその決着、AI が実行したクエリとその結果、メモリ、お客様の指示や質問を送ります。接続文字列は送りません。

お客様の表にある名前やメールアドレスなどの文字列は、OpenAI に送る前に伏せます。数値と日時、表や列の名前、接続の状態、お客様がチャットに書いた文は、そのまま送ります。OpenAI の API の利用条件では、送ったデータは既定でモデルの学習に使われません。

OpenAI には、監視と調査のたびに必要なものだけを送ります。調査の会話は、OpenAI 側に会話の状態を残さない設定 (store: false) で呼び出します。OpenAI の API の利用条件では、不正利用の監視のため、送ったデータが OpenAI に一定期間 (最大30日) 保持されることがあります。

AI に送るのは、監視と調査に使うためだけです。お客様のデータを、ほかのお客様のための判定や、Scandock 自身の AI の学習には使いません。

アカウントと権限

  • メールアドレスの確認: 確認のリンクを開くまで、ログインできません。
  • パスワード: 8〜128文字で、ハッシュ化して保存します。再設定のリンクは1時間で無効になります。
  • 2段階認証: アカウントの設定から、認証アプリによる2段階認証 (TOTP) とバックアップコードを有効にできます。認証アプリの鍵とバックアップコードは暗号化して保存します。続けて失敗すると、しばらく確認を受け付けません。
  • SSO: Enterprise プランでは、SAML 2.0 と OpenID Connect の IdP (Microsoft Entra ID、Okta、Google Workspace など) で会社の ID のログインを使えます。メールのドメインの持ち主であることを DNS の TXT レコードで確かめるまで、その IdP ではログインできません。
  • SCIM: Enterprise プランでは、SCIM 2.0 に対応した IdP (Microsoft Entra ID、Okta など) から、メンバーを自動で追加・削除できます。対象は、DNS で確かめたドメインのメールアドレスの人だけです。IdP で割り当てを外すか無効にすると、そのプロジェクトのメンバーから外れます。SCIM のトークンはハッシュで保存し、発行したときに一度だけ表示します。
  • セッション: Cookie には HttpOnly・Secure・SameSite=Lax を付け、有効期間は30日です。
  • ボット対策: ログイン・登録・パスワード再設定の画面で Cloudflare Turnstile を使います。
  • ロール: オーナー・管理者・メンバー・閲覧者の4つがあります。接続と対処の登録や対処の承認ができるのはオーナーと管理者だけで、閲覧者は何も変更できません。

監査ログ

接続の追加と削除、Cloudflare Tunnel の作成と削除、メンバーの招待・ロールの変更・削除、対処と通知先の登録・変更、対処の承認と却下、インシデントの却下、監視の一時停止、SSO と SCIM の設定など、メンバーによる操作を監査ログに記録します。SCIM による IdP からのメンバーの追加・変更・削除も記録します。監査ログは画面で検索でき、CSV で書き出せます。

データの削除

  • 接続の削除: Scandock が作成した監視用ユーザーを、お客様のデータベースから削除します。あわせて、接続文字列、その接続の監視項目、インシデントと調査の記録を削除します。
  • プロジェクトの削除: 監視用ユーザーの削除に加えて、監視の予約と取得した値、接続・監視項目・インシデント・調査の記録・会話・メモリ・監査ログなど、プロジェクトのデータを削除します。Cloudflare Tunnel を作っていた場合は、Tunnel とその DNS レコードも削除します。Cloudflare D1 と BigQuery のために受け取った同意のトークンも削除します (連携先の側の同意の記録は、お客様が Cloudflare のダッシュボードや Google アカウントの設定から取り消してください)。
  • アカウントの削除: アカウントの設定から削除できます。ほかのメンバーがいるのにほかのオーナーがいないプロジェクトや、契約が続いているプロジェクトがある場合は、先にそれを片付けるまで削除できません。

委託先

  • Cloudflare: (米国) 実行基盤、監視の状態の保存、メールの送信、ボット対策 (Turnstile)、リクエストとエラーのログ、Cloudflare Tunnel 経由の接続 (Tunnel・DNS レコード・Access)、Cloudflare D1 の読み取り (D1 の API と GraphQL Analytics)。
  • TiDB Cloud (PingCAP): (米国) アカウント・プロジェクト・監視項目・インシデント・監査ログなどの保存。データは東京リージョンに置きます。
  • OpenAI: (米国) 監視項目の設計、異常の判定、原因の調査、会話への回答。
  • Stripe: (米国) 契約と決済、消費税の計算、請求書の発行。カードの情報と請求先の情報はお客様から Stripe に直接入力され、カードの情報を Scandock は保存しません。

このほか、お客様が通知先として設定したサービス (Slack・Microsoft Teams・Google Chat・LINE・Webhook など) には、インシデントの内容を送ります。

お問い合わせと脆弱性の報告

セキュリティに関するご質問、チェックシートへの回答のご依頼、脆弱性の報告は support@scandock.ai までお送りください。

最終更新日: 2026年10月31日