# コマンドラインからのワークフローシークレットの設定 ワークフローでは、特定のTD APIキーやPostgreSQL認証情報を使用する必要があることがよくあります。 TD APIキー、データベース認証情報、およびその他のオブジェクトは、潜在的に機密性の高いビジネスデータへのアクセスに使用できるため、安全に取り扱うことが重要です。 TD Workflowsは、通常のワークフローパラメータとは別に認証情報を安全に管理できる、セキュアなシークレット管理システムを提供しています。 [シークレットのベストプラクティス](/ja/products/customer-data-platform/data-workbench/workflows/about-workflow-secret-management)も参照してください。 [TD Workflows SFTPデータコネクタの例](/ja/products/customer-data-platform/data-workbench/workflows/workflows-sftp-data-connector-example)を確認してください。 ## 制限事項 * セキュリティ上の理由から、TD Workflowsサービスにアップロードされたシークレットをダウンロードすることはできません。 * シークレットは主にtd_loadでYAMLに認証情報を展開するために使用されます。SQL変数、演算子のパラメータなどとしては使用できません。 ## デフォルトのワークフロー権限 ワークフローがTD Workflowsにプッシュされると、ワークフローをプッシュしたユーザーの権限が自動的に使用されます。 別のユーザーの権限でワークフローを実行するには、`td wf secrets`コマンドを使用して別のキーをTD Workflowsサービスにアップロードします。特定のTD APIキーを使用してワークフローを設定します。 ## APIキーの設定、変更、および元に戻す 以下のコマンドを実行して使用するAPIキーをアップロードし、プロンプトが表示されたらAPIキーを入力します。APIキーはターミナルに表示されません。その後、Enterキーを押します。 ```bash td wf secrets \ --project nasdaq_analysis \ --set td.apikey ``` これで、このプロジェクト内のすべてのワークフローがそのAPIキーを使用します。ワークフローを開始して試してみてください。 ```bash td wf start nasdaq_analysis \ nasdaq_analysis \ --session now ``` 指定されたAPIキーはワークフローログに表示されませんが、ワークフローは正常に実行されるはずです。無効なAPIキーが指定された場合、実行は失敗します。 APIキーを変更するには、secretsのsetコマンドを再度実行し、別のAPIキーを指定します。 デフォルトのAPIキーの使用に戻すには、アップロードしたAPIキーを削除します。 ```bash td wf secrets \ --project nasdaq_analysis \ --delete td.apikey ``` ## 複数のAPIキーを使用するワークフローの設定 ワークフロー内のタスクを、異なるTDアカウントにアクセスするために異なるAPIキーを使用するように設定したい場合があります。 ワークフローを正常に実行するには、一時ファイルがまだ存在しない場合、2つのそれぞれのAPIキーのアカウントにデータベースworkflow_tempを作成する必要がある場合があります。 2つの異なるAPIキーをアップロードします。 ```bash td wf secrets --project nasdaq_analysis --set apikey1 td wf secrets --project nasdaq_analysis --set apikey2 ``` 2つのタスクが2つの異なるAPIキーを使用するように設定します。 ```yaml 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 ``` ワークフローを開始し、正常に実行されることを確認します。 ```bash td wf start nasdaq_analysis \ nasdaq_analysis \ --session now ``` ## PostgreSQL認証情報の安全な設定 このセクションでは、`pg>`演算子を使用するワークフローがすでにあることを前提としています。 PostgreSQLのユーザーとパスワードを安全に設定するには、`td wf secrets`コマンドを使用してTD Workflowsにアップロードします。 ```bash td wf secrets --project my_project --set pg.user td wf secrets --project my_project --set pg.password ``` ワークフローファイルに`pg.user`と`pg.password`が存在する場合は、必ず削除してください。 このプロジェクト内のすべてのワークフローは、`pg>`演算子を実行する際に指定されたユーザーとパスワードを使用します。他のいくつかの演算子設定オプションも安全に定義できます。これには以下が含まれます: * `host` * `port` * `user` * `password` * `database` * `ssl` * `connect_timeout` * `socket_timeout` * `schema` さまざまな設定オプションの詳細については、[Digdagドキュメント](http://docs.digdag.io/)を参照してください。 ワークフロープロジェクト内で異なるPostgreSQL認証情報のセットを使用するには、異なる名前でアップロードします。 ```bash 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 ``` 次に、それぞれ`db1`と`db2`の名前を使用して認証情報を参照します。 名前は自由に選択できます。 ```yaml +task1: _secrets: pg: db1 pg>: query1.sql +task2: _secrets: pg: db2 pg>: query2.sql ``` これで、`task1`は`db1`の認証情報を使用し、`task2`は`db2`の認証情報を使用します。 ## ファイルからのシークレットのアップロード 複数の認証情報セットを管理する場合、ファイルを使用して一度にすべてをアップロードする方が便利な場合があります。YAMLおよびJSON形式のサンプルを以下に示します。 ### YAML形式 1. 認証情報のキーと値のペアを含むファイルを作成します。 ```yaml 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にアップロードします ```bash td wf secrets --project my_project --set @credentials.yml ``` ### JSON形式 1. 認証情報のキーと値のペアを含むファイルを作成します。 ```json 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にアップロードします ```bash td wf secrets \ --project my_project \ --set @credentials.json ``` ## シークレットの一覧表示 プロジェクトにアップロードされたシークレットを一覧表示するには、secretsコマンドを実行する際に`--set`オプションを省略します。 ```bash td wf secrets --project my_project ``` ## ローカルシークレット ローカルモードでシークレットを使用するには、secretsコマンドを実行する際に`--project`の代わりに`--local`オプションを使用します。 ```bash td wf secrets --local --set @credentials.yml ``` ## シークレットの削除 プロジェクトにアップロードされた認証情報を削除するには、`--delete`オプションを使用し、削除する1つ以上のシークレットを指定します。 ```bash td wf secrets \ --project my_project \ --delete db2.pg.user db2.pg.password ```