LoginSignup
1
1

More than 5 years have passed since last update.

TreasureDataのWrite-only keyについて

Last updated at Posted at 2018-02-19

概要

Write-only keyで参照権限しかないテーブルへのINSERTができるか調べたメモを残しておきます。

GUI (web-console)

よく利用するwebコンソールから実行できるか確認してみると

どうやら、API Keyを指定して実行する設定画面が見当たらない。
API KEYを使ってのクエリ実行はできないみたい・・・

tdコマンド

次にtdコマンドを使って、できないか確認する。

ターミナル
$ td
usage: td [options] COMMAND [args]

options:
  -c, --config PATH                path to the configuration file (default: ~/.td/td.conf)
  -k, --apikey KEY                 use this API key instead of reading the config file

       ・
       ・
       ・

-k オプションで API KEYが指定可能なようです。
早速実行してみる。

ターミナル
$ td -k {Write-only key} query -d hoge_db -T hive -w "INSERT OVERWRITE TABLE users SELECT td_global_id FROM fuga_db.access_log LIMIT 1;"
List databases failed: Access denied
Use 'td database:list' to show the list of databases.

エラーとなりました。
アクセスできないと言われているようです。

マスターキーを使ったら、問題なく実行できました。
キー指定はできるが、Write-only keyでは無理なようです。

Treasure Workflow

次にTreasureWorkflowを使ってみる。
「td wf secrets」コマンドで、apikeyをセットする。

ターミナル
$ td wf secrets --project hoge-pjt --set write-only.apikey
write-only.apikey:******************

secret keyを指定したdigファイルを作成する。

./hoge-pjt.dig
timezone: Asia/Tokyo

schedule:
  daily>: 06:00:00

_export:
  td:
    database: hoge

+update_users:
  _secrets:
    td:
      apikey:write-only.apikey
  td>: sql/users.sql
  engine: hive
  create_table: users

実行するクエリを作成する。

./sql/users.sql
WITH tmp AS (
  SELECT
    td_global_id 
  FROM
    fuga.access_log
  WHERE
    TD_TIME_RANGE(time, td_time_add(TD_SCHEDULED_TIME(), '-1d'), TD_SCHEDULED_TIME())
    AND td_global_id IS NOT NULL AND td_global_id <> ''
)

-- DIGDAG_INSERT_LINE
SELECT * FROM tmp

workflowを登録する。

ターミナル
$ td wf push hoge-pjt

workflowを実行してみる。

ターミナル
$ td wf start hoge-pjt hoge-pjt --session now

エラーになりました。

ログ
[403:Forbidden] API request to /v3/job/issue/hive/hoge has failed: Access denied

apikeyをmasterキーに変えてみるとWorkflowが正常に実行できる。
やはり、Write-only keyではダメなようです。

マニュアルと見てみると確かにimportはNGとなっている見たい。

Notice:
1. ...
2. ...
3. INSERT INTO requires the ability to execute a query, which is not allowed using a Write-only API key.

気づかなかった...

まとめ

javascript SDKやアプリからのログ書き込みの時だけ、Write-onlyキーを使い、それ以外は、masterキーが必要となる。

参考サイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1