SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Data Factory の任意のアクティビティで Key Vault の情報を使用するためにシークレットから情報を取得

leave a comment

Azure Key Vault への資格情報の格納 で解説されていますが、Azure Data Factory (ADF) では、Linked Service を設定する際にパスワードの情報を Key Vault のシークレットから取得することができます。
image

Key Vault のコンテナーに対して、ADF の Managed Identity (マネージド ID) 権限を付与しておくことで、Linked Service としてリンクした Key Vault からシークレットから情報を取得して、Linked Service 内の設定で使用することができます。

これにより、Linked Service でパスワードを入力する必要がなくなり、パスワード変更が発生した場合も Key Vault の情報を変更することで対応ができるようになる等、いくつかのメリットを享受することができます。

Linked Service の情報を設定する際だけでなく、パイプライン内で Key Vault から情報を取得することができるかを試してみたので、メモとして。

今回はサブスクリプション ID を Key Vault のシークレットから取得しているのですが、この程度の情報であれば、パイプライン実行時のパラメーターで指定してもよいと思いますが。

初めに、Key Vault のアクセスポリシーとして、ADF の Managed Identity に対してシークレットのアクセス権を設定しておきます。 (この設定自体は、Linked Service で Key Vault を使用する場合も共通ですが)

image

 

これで事前準備は完了ですので、Web アクティビティから、Get Secret – Get Secret の REST API を Managed Identity で呼び出せば、Key Vault の情報を取得できます。

image

パイプラインの定義としては次のような内容です。

{
    "name": "pipeline8",
    "properties": {
        "activities": [
            {
                "name": "Get Key Vault Info",
                "type": "WebActivity",
                "dependsOn": [],
                "policy": {
                    "timeout": "7.00:00:00",
                    "retry": 0,
                    "retryIntervalInSeconds": 30,
                    "secureOutput": false,
                    "secureInput": false
                },
                "userProperties": [],
                "typeProperties": {
                    "url": {
                        "value": "@concat('https://',pipeline().parameters.keyvaultName,'.vault.azure.net/secrets/subscriptionId?api-version=7.0')",
                        "type": "Expression"
                    },
                    "method": "GET",
                    "authentication": {
                        "type": "MSI",
                        "resource": "https://vault.azure.net"
                    }
                }
            }
        ],
        "parameters": {
            "keyvaultName": {
                "type": "string"
            }
        },
        "annotations": []
    }
}

 

パイプラインの実行時パラメーターとして、Key Vault の名称を指定し、その Key Vault 内の subscriptionId というシークレットを Web アクティビティから取得するというシンプルなものです。

Key Vault のシークレットの値は、アクティビティの value として出力が行われていますので、この値を後続のアクティビティで利用すれば、Key Vault に格納した値を任意のアクティビティで利用することができます。

image

パラメーターで済むケースの方が多いと思いますが、アクティビティ内で使用する情報を隠蔽化しながら、Git で ADF の設定を管理するときなどに Key Vault を使用することで、情報流出が抑えられるケースがあるのかなと。

Share

Written by Masayuki.Ozawa

7月 8th, 2020 at 7:49 pm

Posted in Data Factory

Tagged with

Leave a Reply