Azure Key Vault に Azure Data Factory からシークレットを登録する方法

## 概要

Azure Key Vault に Azure Data Factory からシークレットを登録する方法を共有します。Azure Key Vault を閉域内で構築した場合などに Azure ポータルからシークレットを登録できない場合があり、シークレットを登録する手順を構築する必要があります。Azure Data Factory から実施する方法であれば、マネージド ID 認証で手軽に実施できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1cfc025f-8136-2590-6c0d-ab5452e37e3c.png)

## パイプラインの手順

### 1. Azure Data Factory に対して キー コンテナー シークレット責任者（Key Vault Administrator）を

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/60992110-1de6-d257-a7a6-dde5039ace18.png)

### 2. Azure Key Vault の Web 接続のリンクサービスを作成

| #    | 項目        | 値                                                  |
| ---- | ----------- | --------------------------------------------------- |
| 1    | ベース  URL | https://{KeyVaultName}.vault.azure.net/             |
| 2    | 認証        | システム割り当てマネージドID                        |
| 3    | リソース    | [https://vault.azure.net](https://vault.azure.net/) |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0bd2f7ac-a230-6dbf-80fd-d9eb1ae5f33e.png)

### 3. パラメータを追加

| #    | 項目        | 値                                                  |
| ---- | ----------- | --------------------------------------------------- |
| 1    | KeyVaultAPIVersion | {APIのバージョン}             |
| 2    | KeyValutlName        | {Azure Key Vault の名称}                        |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a93491fa-3af4-dcdc-99ef-7238e57151b7.png)


### 4. 変数を追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/288fd19e-7aba-ad88-1175-6d4e78625f37.png)

### 4. `SecretValue`変数に追加する変数追加のアクティビティを追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/411e736f-fdef-351d-f47e-e30d3a45b9f5.png)

### 5. `SecretName`変数に追加する変数追加のアクティビティを追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/792d4814-3540-20e3-420c-bd93e1090fb4.png)

### 6. シークレットを登録する Web アクティビティを追加

| #    | 項目            | 値                                     |
| ---- | --------------- | -------------------------------------- |
| 1    | 接続の種類      | リンクサービス                         |
| 2    | リンク サービス | 作成したリンクサービス                 |
| 3    | 相対 URL        | @concat( '/secrets/', variables('SecretName'), '?api-version=', pipeline().parameters.KeyVaultAPIVersion) |
| 4    | メソッド        | Put                                    |
| 4    | 本文            | @concat('{"value":"', variables('SecretValue'),'"}')                                    |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/5409255e-3ce1-fa4f-8321-de1ad868e8b0.png)

### 7. シークレットを確認する Web アクティビティを追加

| #    | 項目            | 値                                     |
| ---- | --------------- | -------------------------------------- |
| 1    | 接続の種類      | リンクサービス                         |
| 2    | リンク サービス | 作成したリンクサービス                 |
| 3    | 相対 URL        | @concat( '/secrets/', variables('SecretName'), '?api-version=', pipeline().parameters.KeyVaultAPIVersion) |
| 4    | メソッド        | Get                                    |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0afdd4bb-b13a-65f2-b79e-aa008fc504f9.png)

### 8. デバック実行しシークレットが登録さえることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0879caef-a45c-8a09-8abb-eaf39d67b457.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/3bfc366d-7648-270b-bbd6-5f996558f6a9.png)

### 9. デバック実行の出力結果としてシークレットが表示されないようにするためのすべての入力と出力をセキュリティで保護するように設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/66fe5388-9329-23e0-7f0f-c550adecd50a.png)

### 10. 再度デバック実行し モニター -> パイプライン実行 -> デバックからデバック実行したパイプラインの実行結果にてすべての入力と出力が隠蔽化されていることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9b879343-2fc3-6874-93ad-95dcb3a57a23.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4c546f9f-f7bc-8c49-1abd-c6e5dd82c026.png)

## 運用手順

### 1. `Set Secret Name`アクティビティの値にシークレットとして登録するシークレット名を設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f6832382-fbf7-cced-2d83-647d1006fd41.png)

### 2. `Set Secret Value`アクティビティの値にシークレットとして登録するシークレット値を設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/60019b7e-786f-630e-7948-a213a141b0de.png)

### 3. デバック実行し正常終了することを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/75c1f68a-580c-0f2d-53a9-94e953d9f9f1.png)

### 4. パイプラインを保存せずに閉じる

パイプラインを保存するとシークレット値が残ってしまうため絶対に保存しないでください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4d9b4a62-e49a-df5a-ca8f-ea046a3025ef.png)