SE の雑記

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

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

without comments

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 を使用することで、情報流出が抑えられるケースがあるのかなと。

Written by Masayuki.Ozawa

7月 8th, 2020 at 7:49 pm

Posted in Data Factory

Tagged with

Leave a Reply