Skip to content
Last updated

コマンドラインからのワークフローシークレットの設定

ワークフローでは、特定のTD APIキーやPostgreSQL認証情報を使用する必要があることがよくあります。

TD APIキー、データベース認証情報、およびその他のオブジェクトは、潜在的に機密性の高いビジネスデータへのアクセスに使用できるため、安全に取り扱うことが重要です。

TD Workflowsは、通常のワークフローパラメータとは別に認証情報を安全に管理できる、セキュアなシークレット管理システムを提供しています。

シークレットのベストプラクティスも参照してください。

TD Workflows SFTPデータコネクタの例を確認してください。

制限事項

  • セキュリティ上の理由から、TD Workflowsサービスにアップロードされたシークレットをダウンロードすることはできません。
  • シークレットは主にtd_loadでYAMLに認証情報を展開するために使用されます。SQL変数、演算子のパラメータなどとしては使用できません。

デフォルトのワークフロー権限

ワークフローがTD Workflowsにプッシュされると、ワークフローをプッシュしたユーザーの権限が自動的に使用されます。

別のユーザーの権限でワークフローを実行するには、td wf secretsコマンドを使用して別のキーをTD Workflowsサービスにアップロードします。特定のTD APIキーを使用してワークフローを設定します。

APIキーの設定、変更、および元に戻す

以下のコマンドを実行して使用するAPIキーをアップロードし、プロンプトが表示されたらAPIキーを入力します。APIキーはターミナルに表示されません。その後、Enterキーを押します。

td wf secrets \
--project nasdaq_analysis \
--set td.apikey

これで、このプロジェクト内のすべてのワークフローがそのAPIキーを使用します。ワークフローを開始して試してみてください。

td wf start nasdaq_analysis \
nasdaq_analysis \
--session now

指定されたAPIキーはワークフローログに表示されませんが、ワークフローは正常に実行されるはずです。無効なAPIキーが指定された場合、実行は失敗します。

APIキーを変更するには、secretsのsetコマンドを再度実行し、別のAPIキーを指定します。

デフォルトのAPIキーの使用に戻すには、アップロードしたAPIキーを削除します。

td wf secrets \
--project nasdaq_analysis \
--delete td.apikey

複数のAPIキーを使用するワークフローの設定

ワークフロー内のタスクを、異なるTDアカウントにアクセスするために異なるAPIキーを使用するように設定したい場合があります。

ワークフローを正常に実行するには、一時ファイルがまだ存在しない場合、2つのそれぞれのAPIキーのアカウントにデータベースworkflow_tempを作成する必要がある場合があります。

2つの異なるAPIキーをアップロードします。

td wf secrets --project nasdaq_analysis --set apikey1

td wf secrets --project nasdaq_analysis --set apikey2

2つのタスクが2つの異なるAPIキーを使用するように設定します。

nasdaq_analysis.dig
timezone: UTC

schedule:
  daily>: 07:00:00

_export:
  td:
    database: workflow_temp

+task1:
  _secrets:
    td:
      apikey: apikey1
  td>: queries/daily_open.sql
  create_table: daily_open

+task2:
  _secrets:
    td:
      apikey: apikey2
  td>: queries/monthly_open.sql
  create_table: monthly_open

ワークフローを開始し、正常に実行されることを確認します。

td wf start nasdaq_analysis \
nasdaq_analysis \
--session now

PostgreSQL認証情報の安全な設定

このセクションでは、pg>演算子を使用するワークフローがすでにあることを前提としています。

PostgreSQLのユーザーとパスワードを安全に設定するには、td wf secretsコマンドを使用してTD Workflowsにアップロードします。

td wf secrets --project my_project --set pg.user

td wf secrets --project my_project --set pg.password

ワークフローファイルにpg.userpg.passwordが存在する場合は、必ず削除してください。

このプロジェクト内のすべてのワークフローは、pg>演算子を実行する際に指定されたユーザーとパスワードを使用します。他のいくつかの演算子設定オプションも安全に定義できます。これには以下が含まれます:

  • host

  • port

  • user

  • password

  • database

  • ssl

  • connect_timeout

  • socket_timeout

  • schema

さまざまな設定オプションの詳細については、Digdagドキュメントを参照してください。

ワークフロープロジェクト内で異なるPostgreSQL認証情報のセットを使用するには、異なる名前でアップロードします。

td wf secrets --project my_project --set db1.pg.user

td wf secrets --project my_project --set db1.pg.password

td wf secrets --project my_project --set db2.pg.user

td wf secrets --project my_project --set db2.pg.password

次に、それぞれdb1db2の名前を使用して認証情報を参照します。

名前は自由に選択できます。

+task1:
  _secrets:
    pg: db1
  pg>: query1.sql

+task2:
  _secrets:
    pg: db2
  pg>: query2.sql

これで、task1db1の認証情報を使用し、task2db2の認証情報を使用します。

ファイルからのシークレットのアップロード

複数の認証情報セットを管理する場合、ファイルを使用して一度にすべてをアップロードする方が便利な場合があります。YAMLおよびJSON形式のサンプルを以下に示します。

YAML形式

  1. 認証情報のキーと値のペアを含むファイルを作成します。
credentials.yaml
db1.pg.user: user1
db1.pg.password: pw1
db2.pg.user: user2
db2.pg.password: pw2
db3.pg.user: user3
db3.pg.password: pw3
  1. 認証情報をTD Workflowsにアップロードします
td wf secrets --project my_project --set @credentials.yml

JSON形式

  1. 認証情報のキーと値のペアを含むファイルを作成します。
credentials.json
{
  "db1.pg.user": "user1",
  "db1.pg.password": "pw1",
  "db2.pg.user": "user2",
  "db2.pg.password": "pw2",
  "db3.pg.user": "user3",
  "db3.pg.password": "pw3"
}
  1. 認証情報をTD Workflowsにアップロードします
td wf secrets \
--project my_project \
--set @credentials.json

シークレットの一覧表示

プロジェクトにアップロードされたシークレットを一覧表示するには、secretsコマンドを実行する際に--setオプションを省略します。

td wf secrets --project my_project

ローカルシークレット

ローカルモードでシークレットを使用するには、secretsコマンドを実行する際に--projectの代わりに--localオプションを使用します。

td wf secrets --local --set @credentials.yml

シークレットの削除

プロジェクトにアップロードされた認証情報を削除するには、--deleteオプションを使用し、削除する1つ以上のシークレットを指定します。

td wf secrets \
--project my_project \
--delete db2.pg.user db2.pg.password