当社のengineがウェアハウスのパスワードを目にすることはありません
datahashi

03セキュリティと信頼

ウェアハウスのパスワードが当社のengineに届くことはありません。

SQLは当社が書きます。実行するのはお客様のネットワーク内のQuery Runnerで、読み取り専用ロールを使い、パスワードと監査ログもRunnerが保持します。

セマンティッククエリ
バインド済みSQL + Runnerキー
読み取り専用ロール

ステージ 1 / 4

呼び出し元

Metricを名前で要求します。SQLは書きません。

✗ウェアハウスのキーは持ちません。

受け取るもの

# a question, asked by metric name

渡すもの

{ "metrics": ["revenue"],
  "filters": [{ "region": "EU" }] }
Authorization: Bearer <JWT or API key>

ステージ 2 / 4

Engine

認証情報を確認し、権限と行ルールを適用してからSQLを生成します。

✗ウェアハウスのパスワードは見えません。

受け取るもの

semantic query + credential

渡すもの

SELECT SUM(o.amount) ... WHERE o.region = $1
+ runner key

ステージ 3 / 4

Query Runner · お客様側

読み取り専用ロールでSQLを実行します。パスワード、キルスイッチ、監査ログを保持します。

✓保持するもの:パスワード、キルスイッチ、監査ログ。

受け取るもの

bound SQL + runner key

渡すもの

native connection
(read-only role)

ステージ 4 / 4

ウェアハウス · お客様側

行をRunnerに返します。接続できるのはRunnerだけです。

✓データがコピーとしてお客様の外へ出ることはありません。

受け取るもの

read-only connection

渡すもの

rows
(not kept by the engine)
1 / 4

✗engineからウェアハウスへの直接接続。そのような経路はありません。

この形の理由

SQLを書くことと、実行することは別の仕事

多くのセマンティックレイヤーは、ウェアハウスへの接続を抱えています。私たちはそれを二つに分け、エージェントと話す側が鍵を持たないようにしました。

詳しくはこちら: engineがウェアハウスに直接接続することはありません →

  1. 01

    コンパイルは実行ではない

    SQLを書くプロセスがパスワードも持っていれば、本番環境ごとそのプロセスを信頼するしかありません。

  2. 02

    エージェントは被害範囲を広げる

    エージェントは数が多く、常に動いています。どれもパスワードの一歩手前にいるべきではありません。

  3. 03

    管理はウェアハウスの隣で

    パスワード、キルスイッチ、監査ログはRunnerが持ちます。

Query Runner

コンパイルはこちらで、実行はそちらで

engineはウェアハウスの隣にあるRunnerへSQLを送ります。Runnerを一時停止すれば、すべてのクエリが止まります。engineにほかの入り口はありません。

datahashi engine

コンパイルアクセスを確認し、行ルールを適用して、SQLを生成します。
SELECT SUM(o.amount) AS revenue
FROM analytics.orders o
WHERE o.region = $1

Query Runner · お客様側

実行DSNを保持し、ウェアハウスの隣でSQLを実行します。
✓ 接続済み · 読み取り専用ロール
稼働中。クエリは流れます。
  • 接続するのはRunnerだけ

    ほかの何も、ウェアハウスへの接続を開きません。

  • 読み取り専用、お客様の条件で

    お客様が作成し、いつでも取り消せる読み取り専用ロールを使います。

  • 何もコピーしない

    抽出も同期もしません。行は通過するだけで保存されません。Rollupはオプトインです。

すべてのリクエストで

毎回、この順で5つのチェック

呼び出し側はMetricを名前で指定します。生のテーブルや隠れた列を求める方法はありません。

  1. 1

    クレデンシャル

    誰が問い合わせているかは、検証済みのトークンやキーから決まります。リクエスト本文で他人になりすますことはできません。

  2. 2

    アクセスモード

    各キーはgovernedかexploreに固定されています。クライアントが切り替えることはできません。

  3. 3

    Metricとフィールドの権限

    キーには、許可したMetricとフィールドだけが見えます。

  4. 4

    行ルール

    行レベルセキュリティが、SQLを書く前にすべての読み取りを絞り込みます。テナント同士が互いの行を見ることはありません。

  5. 5

    コスト上限

    ワークスペースごとの行数上限とコスト上限が、ひとつの暴走した呼び出し元から全体を守ります。

  6. そのうえで、SQLはバインド・パラメータ化された形でRunnerへ送られます。

クレデンシャルと監査

配りやすく、取り消しやすいキー

  • パスワードではなくRunnerキー

    当社が保存するのはRunner用のキーです。それだけではウェアハウスを開けません。

  • エージェントはOAuthでサインイン

    短命でスコープ付きのトークン。長期間有効な秘密が設定ファイルに残ることはありません。

  • キーごとにオーナーとモードはひとつ

    どのキーも、ダウンタイムなしで取り消し・ローテーションできます。

  • すべてのクエリを計測

    各クエリがスキャン量を記録するので、チームや顧客ごとにコストを集計できます。

エージェントに渡すのは、アクセスではなく答え

コンソールを開くか、Runnerがパスワードをお客様の側に留める仕組みをご覧ください。