Azure Data Factory のマネージド ID

適用対象: Azure Data Factory Azure Synapse Analytics

ヒント

企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法について説明します。

この記事では、マネージド ID (旧称はマネージド サービス ID/MSI) の概要とそれが Azure Data Factory でどのように機能するのかについて説明します。

注意

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を開始するには、Azure PowerShell のインストールに関する記事を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

概要

マネージド ID により、資格情報を管理する必要がなくなります。 マネージド ID では、Microsoft Entra 認証をサポートするリソースに接続するときに、サービス インスタンス用の ID を提供されます。 たとえば、サービスでは、マネージド ID を使用することで、データ開発者が安全に資格情報を格納できる Azure Key Vault などのリソースにアクセスしたり、ストレージ アカウントにアクセスしたりできるようになります。 サービスでは、マネージド ID を使用して Microsoft Entra トークンを取得します。

次の 2 種類のマネージド ID がサポートされています。

  • システム割り当て: サービス インスタンスでマネージド ID を直接有効にできます。 サービスの作成時にシステム割り当てマネージド ID を許可すると、そのサービス インスタンスのライフサイクルに関連付けられている Microsoft Entra で ID が作成されます。 その ID を使用して Microsoft Entra ID にトークンを要求できるのは、必然的に、その Azure リソースのみとなります。 したがって、リソースが削除されると、その ID も Azure によって自動的に削除されます。
  • ユーザー割り当て: スタンドアロンの Azure リソースとしてマネージド ID を自分で作成することもできます。 ユーザー割り当てマネージド ID を作成して、それをデータ ファクトリの 1 つまたは複数のインスタンスに割り当てることができます。 ユーザー割り当てマネージド ID の場合、ID は、それを使用するリソースとは別に管理されます。

マネージド ID には、次の利点があります。

  • Azure Key Vault への資格情報の格納。この場合、マネージド ID は Azure Key Vault の認証に使用されます。
  • Azure Blob storage、Azure Data Explorer、Azure Data Lake Storage Gen1、Azure Data Lake Storage Gen2、Azure SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics、REST、Databricks アクティビティ、Web アクティビティなどのマネージ ID 認証を使用して、データ ストアまたはコンピューティングにアクセスします。 詳細については、コネクタとアクティビティに関する記事をご覧ください。
  • マネージド ID は、Azure Key Vault に格納されているカスタマー マネージド キーを使用してデータやメタデータを暗号化/暗号化解除する場合にも使用されます。こうして、二重暗号化が提供されます。

システム割り当てマネージド ID

Note

システム割り当てマネージド ID は、ドキュメント内の他の場所や Data Factory Studio では、下位互換性を考慮して "マネージド ID" とも呼ばれます。 "ユーザー割り当てマネージド ID" を表すときには、そのように明示的に呼ぶことにします。

システム割り当てマネージド ID を生成する

システム割り当てマネージド ID は、次のように生成されます。

  • Azure portal または PowerShell を使用してデータ ファクトリを作成すると、マネージド ID が常に自動的に作成されます。
  • SDK を使用してデータ ファクトリを作成すると、作成用のファクトリ オブジェクトで "Identity = new FactoryIdentity()" を指定した場合にのみマネージド ID が作成されます。.NET クイック スタートの「データ ファクトリの作成」内の例を参照してください。
  • REST API を使用してデータ ファクトリを作成すると、要求本文で "Identity" セクションを指定した場合にのみマネージド ID が作成されます。 REST のクイックスタート - データ ファクトリの作成の例をご覧ください。

マネージド ID の取得」の手順に従ってサービス インスタンスにマネージド ID がまだ関連付けられていない場合は、ID イニシエーターを使用してプログラムでそれを更新することで、マネージド ID を明示的に生成できます。

Note

  • マネージド ID は変更できません。 マネージド ID が既に存在するサービス インスタンスを更新しても影響はなく、マネージド ID が変更されることはありません。
  • ファクトリ オブジェクトで "identity" パラメーターを指定せずに、または REST 要求本文で "identity" セクションを指定せずに、マネージド ID が既に存在するサービス インスタンスを更新した場合、エラーが発生します。
  • サービス インスタンスを削除すると、関連付けられているマネージド ID も削除されます。

PowerShell を使用してシステム割り当てマネージド ID を生成する

Set-AzDataFactoryV2 コマンドを呼び出すと、"Identity" フィールドが新たに生成されます。

PS C:\> Set-AzDataFactoryV2 -ResourceGroupName <resourceGroupName> -Name <dataFactoryName> -Location <region>

DataFactoryName   : ADFV2DemoFactory
DataFactoryId     : /subscriptions/<subsID>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/ADFV2DemoFactory
ResourceGroupName : <resourceGroupName>
Location          : East US
Tags              : {}
Identity          : Microsoft.Azure.Management.DataFactory.Models.FactoryIdentity
ProvisioningState : Succeeded

REST API を使用してシステム割り当てマネージド ID を生成する

Note

ファクトリ オブジェクトで identity パラメーターを指定せずに、または REST 要求本文で identity セクションを指定せずに、マネージド ID が既に存在するサービス インスタンスの更新を試みた場合、エラーが発生します。

要求本文の "identity" セクションで、次の API を呼び出します。

PATCH https://management.azure.com/subscriptions/<subsID>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/<data factory name>?api-version=2018-06-01

要求本文: add "identity": { "type":"SystemAssigned" } を追加します。

{
    "name": "<dataFactoryName>",
    "location": "<region>",
    "properties": {},
    "identity": {
        "type": "SystemAssigned"
    }
}

応答: マネージド ID が自動的に作成され、これに応じて "identity" セクションが設定されます。

{
    "name": "<dataFactoryName>",
    "tags": {},
    "properties": {
        "provisioningState": "Succeeded",
        "loggingStorageAccountKey": "**********",
        "createTime": "2017-09-26T04:10:01.1135678Z",
        "version": "2018-06-01"
    },
    "identity": {
        "type": "SystemAssigned",
        "principalId": "765ad4ab-XXXX-XXXX-XXXX-51ed985819dc",
        "tenantId": "72f988bf-XXXX-XXXX-XXXX-2d7cd011db47"
    },
    "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/<dataFactoryName>",
    "type": "Microsoft.DataFactory/factories",
    "location": "<region>"
}

Azure Resource Manager テンプレートを使用してシステム割り当てマネージド ID を生成する

テンプレート: add "identity": { "type":"SystemAssigned" } を追加します。

{
    "contentVersion": "1.0.0.0",
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "resources": [{
        "name": "<dataFactoryName>",
        "apiVersion": "2018-06-01",
        "type": "Microsoft.DataFactory/factories",
        "location": "<region>",
        "identity": {
            "type": "SystemAssigned"
        }
    }]
}

SDK を使用してシステム割り当てマネージド ID を生成する

Identity=new FactoryIdentity() を指定して、create_or_update 関数を呼び出します。 .NET を使用したサンプル コードは以下のとおりです。

Factory dataFactory = new Factory
{
    Location = <region>,
    Identity = new FactoryIdentity()
};
client.Factories.CreateOrUpdate(resourceGroup, dataFactoryName, dataFactory);

システム割り当てマネージド ID を取得する

マネージド ID は、Azure portal から取得することも、プログラムによって取得することもできます。 以降のセクションでは、いくつかの例を示します。

ヒント

マネージド ID が表示されない場合は、ご利用のサービス インスタンスを更新してマネージド ID を生成してください。

Azure portal を使用してシステム割り当てマネージド ID を取得する

Azure portal -> 自分のデータ ファクトリ -> [プロパティ] でマネージド ID 情報を検索できます。

Shows the Azure portal with the system-managed identity object ID and Identity Tenant for an Azure Data Factory.

  • マネージド ID オブジェクト ID
  • マネージド ID のテナント

マネージ ID 情報は、Azure Blob、Azure Data Lake Storage、Azure Key Vault などのマネージド ID 認証をサポートする、リンクされたサービスを作成するときにも表示されます。

アクセス許可を付与するには、次の手順に従います。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

  1. [アクセス制御 (IAM)] を選択します。

  2. [追加]>[ロール割り当ての追加] の順に選択します。

    Screenshot that shows Access control (IAM) page with Add role assignment menu open.

  3. [メンバー] タブで、[マネージド ID] を選択し、[メンバーの選択] を選択します。

  4. Azure サブスクリプションを選択します。

  5. [システム割り当てマネージド ID][Data Factory] を選択し、データ ファクトリを選択します。 オブジェクト ID またはデータ ファクトリ名 (マネージド ID 名) を使用して、この ID を検索することもできます。 マネージド ID のアプリケーション ID を取得するには、PowerShell を使用します。

  6. [確認と 割り当て] タブで、 [確認と割り当て] を選択して ロールを割り当てます。

PowerShell を使用してシステム割り当てマネージド ID を取得する

特定のサービス インスタンスを取得すると、次のように、マネージド ID のプリンシパル ID とテナント ID が返されます。 PrincipalId を使用してアクセス権を付与します。

PS C:\> (Get-AzDataFactoryV2 -ResourceGroupName <resourceGroupName> -Name <dataFactoryName>).Identity

PrincipalId                          TenantId
-----------                          --------
765ad4ab-XXXX-XXXX-XXXX-51ed985819dc 72f988bf-XXXX-XXXX-XXXX-2d7cd011db47

アプリケーション ID を取得するには、上のプリンシパル ID をコピーし、プリンシパル ID をパラメータとして指定して次の Microsoft Entra ID コマンドを実行します。

PS C:\> Get-AzADServicePrincipal -ObjectId 765ad4ab-XXXX-XXXX-XXXX-51ed985819dc

ServicePrincipalNames : {76f668b3-XXXX-XXXX-XXXX-1b3348c75e02, https://identity.azure.net/P86P8g6nt1QxfPJx22om8MOooMf/Ag0Qf/nnREppHkU=}
ApplicationId         : 76f668b3-XXXX-XXXX-XXXX-1b3348c75e02
DisplayName           : ADFV2DemoFactory
Id                    : 765ad4ab-XXXX-XXXX-XXXX-51ed985819dc
Type                  : ServicePrincipal

REST API を使用したマネージド ID の取得

特定のサービス インスタンスを取得すると、次のように、マネージド ID のプリンシパル ID とテナント ID が返されます。

要求で次の API を呼び出します。

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}?api-version=2018-06-01

応答: 次の例のような応答が返されます。 "identity" セクションに値が適宜入力されます。

{
    "name":"<dataFactoryName>",
    "identity":{
        "type":"SystemAssigned",
        "principalId":"554cff9e-XXXX-XXXX-XXXX-90c7d9ff2ead",
        "tenantId":"72f988bf-XXXX-XXXX-XXXX-2d7cd011db47"
    },
    "id":"/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/<dataFactoryName>",
    "type":"Microsoft.DataFactory/factories",
    "properties":{
        "provisioningState":"Succeeded",
        "createTime":"2020-02-12T02:22:50.2384387Z",
        "version":"2018-06-01",
        "factoryStatistics":{
            "totalResourceCount":0,
            "maxAllowedResourceCount":0,
            "factorySizeInGbUnits":0,
            "maxAllowedFactorySizeInGbUnits":0
        }
    },
    "eTag":"\"03006b40-XXXX-XXXX-XXXX-5e43617a0000\"",
    "location":"<region>",
    "tags":{

    }
}

ヒント

ARM テンプレートからマネージド ID を取得するには、ARM JSON に outputs セクションを追加します。

{
    "outputs":{
        "managedIdentityObjectId":{
            "type":"string",
            "value":"[reference(resourceId('Microsoft.DataFactory/factories', parameters('<dataFactoryName>')), '2018-06-01', 'Full').identity.principalId]"
        }
    }
}

ユーザー割り当てマネージド ID

Microsoft Entra ID では、ユーザー割り当てマネージド ID の作成、削除、管理を行うことができます。 詳細については、「Azure portal を使用してユーザー割り当てマネージド ID を作成、一覧表示、削除したり、それにロールを割り当てたりする」をご覧ください。

ユーザー割り当てマネージド ID を使用するには、まず、サービス インスタンスで UAMI の資格情報を作成する必要があります。

マネージド ID を使用する状況と方法を紹介する次のトピックをご覧ください。

Azure Data Factory のマネージド ID の基になっている、Azure リソースのマネージド ID の詳細については、Azure リソースのマネージド ID の概要に関する記事をご覧ください。

マネージド ID の「制限事項」を参照してください。これは、Azure Data Factory のマネージド ID にも適用されます。