概要
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ファイルを作成する。
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
実行するクエリを作成する。
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キーが必要となる。