Azure Data Factory or Azure Synapse のパイプライン内で Key Vault シークレットを取得・利用する

## はじめに

API仕様など都合上、シークレット情報をパイプライン内で利用しないといけない場合のTips

## 参考 

https://learn.microsoft.com/ja-jp/rest/api/keyvault/secrets/get-secret/get-secret?tabs=HTTP

## 準備

key vault のシークレットを作成しておきます。値は見えないですが、testと入れています

![2023-01-26-08-26-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ccfd644d-95ce-8396-0e47-a940897d714f.png)




利用する Synapse Workspace か Data Factory が Key Vault のシークレットユーザー権限を付与します。

![2023-01-26-08-26-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b0841970-19c5-6595-71e6-393c7daa62c8.png)


リンクサービスも作成しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/efc0717e-6cbf-eda3-27a8-37bacbcf2b96.png)



## 手順

1.パイプラインを作成してパラメータを二つ作成

![2023-01-26-08-28-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/806d6c16-59c8-ac78-f297-3ae3ad492c28.png)


2.確認用に変数も作成

![2023-01-26-08-29-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/8088b8b3-eee8-f2f4-3198-b63c2ba5cd7a.png)



3.Webアクティビティを配置

![2023-01-26-08-28-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/c0fa6b66-5b31-657d-0270-b2a50d165fb0.png)



4.**動的なコンテンツの追加**を選択


![2023-01-26-08-31-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/3f822dae-84cd-969e-def4-d3e2e6b063f0.png)


5.https://@{pipeline().parameters.vaultName}.vault.azure.net/secrets/@{pipeline().parameters.secretName}?api-version=7.3 と入力。参考に記載のGetSecretのAPI仕様に従います。

![2023-01-26-08-33-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ee64d5ea-c04e-a125-8bf4-f3efc62b32cb.png)


6.メソッドを設定して、MSI認証をするために認証を**システム割当マネージドID**に設定。リソースを **https://vault.azure.net** に設定。

![](.image/2023-01-26-08-34-29.png)
![2023-01-26-08-34-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b705307c-b456-6e84-7dca-2227bf2ad399.png)


7.確認用に変数の設定を配置

![2023-01-26-08-35-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/35913fe0-3f5b-07ac-b2f3-50bec32308c1.png)


8.確認用の変数を設定して、**動的なコンテンツの追加**を選択

![2023-01-26-08-36-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/727b785e-6c22-0141-7906-060944a60c2d.png)


9.**secret is @{activity('Web1').output.value}** と入力。※実際に利用する場合には、このようにoutput.valueから取得できるという例です。


![2023-01-26-09-00-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/2b4c82d5-aa93-9847-92d0-381110fa4bec.png)


10.デバッグ実行してみます。

![2023-01-26-08-38-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/4c8bb8a5-f1f1-b0ee-ed87-78078b3801b7.png)

11.出力を確認すると、valueがとれています

![2023-01-26-08-58-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/9b28d3b7-5c4d-19cf-1883-a69919da7bb2.png)


![2023-01-26-08-58-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d40c185d-26ff-8ddf-a364-44bef359484b.png)


12.変数設定の出力をみると想定通りですね


![2023-01-26-09-01-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/769ebb39-d3ed-8d8f-1484-880f291cb117.png)


13.最後に、シークレットの内容を平文でログされるのはよくないので、**セキュリティで保護された出力**をオンにします。

![2023-01-26-09-02-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/dc981ec0-ce4e-45ab-e90e-d0c1345683a9.png)


14.もう一度デバッグすると、きちんと隠ぺいされています。※後続で設定した変数もセキュリティで保護された出力をオンにしないとそちらで確認できてしまうので注意

![2023-01-26-09-28-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/83471fab-4926-321c-4aea-63067f088583.png)