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 は、それを使用するリソースとは別に管理されます。
Note
信頼されたバイパスでは、ユーザー割り当てマネージド ID を利用できません。 Azure Storage と Azure Key Vault への接続には、システム割り当てマネージド 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 に必要なロール
Azure Data Factory でマネージド ID を効果的に使うには、適切なアクセスと機能のために特定のロールを割り当てる必要があります。 必要なロールは次のとおりです。
システム割り当てマネージド ID
- 閲覧者ロール: このロールは、リソースのメタデータを読み取るために必要です。
- 共同作成者ロール: このロールは、マネージド ID がアクセスする必要があるリソースを管理するために必要です。
ユーザー割り当てマネージド ID
- マネージド ID オペレーター ロール: このロールを使うと、ユーザー割り当てマネージド ID を管理できます。
- 閲覧者ロール: このロールは、リソースのメタデータを読み取るために必要です。
- 共同作成者ロール: このロールは、マネージド ID がアクセスする必要があるリソースを管理するために必要です。
システム割り当てマネージド 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 を明示的に生成できます。
- PowerShell を使用したマネージド ID の生成
- REST API を使用したマネージド ID の生成
- Azure Resource Manager テンプレートを使用したマネージド ID の生成
- SDK を使用したマネージド 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": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
},
"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 情報を検索できます。
- マネージド ID オブジェクト ID
- マネージド ID のテナント
マネージ ID 情報は、Azure Blob、Azure Data Lake Storage、Azure Key Vault などのマネージド ID 認証をサポートする、リンクされたサービスを作成するときにも表示されます。
Data Factory マネージド ID のアクセス許可を Azure データ ソースに付与するには、次の手順を実行します。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
データ ソースの Azure portal ページで [アクセス制御 (IAM)] を選択します。
[追加]>[ロール割り当ての追加] の順に選択します。
必要なロールを選択して、データ ソースへの必要なアクセス権を付与します。 これは、データ ソースと、データ ファクトリで必要とされるアクセス許可によって異なる場合があります。 たとえば、Azure SQL Server からの読み取りのみがデータ ファクトリに必要な場合は、閲覧者ロールを選択します。
[メンバー] タブで、[マネージド ID] を選択し、[メンバーの選択] を選択します。
Azure サブスクリプションを選択します。
[システム割り当てマネージド ID] で[Data Factory] を選択し、データ ファクトリを選択します。 オブジェクト ID またはデータ ファクトリ名 (マネージド ID 名) を使用して、この ID を検索することもできます。 マネージド ID のアプリケーション ID を取得するには、PowerShell を使用します。
[確認と 割り当て] タブで、 [確認と割り当て] を選択して ロールを割り当てます。
PowerShell を使用してシステム割り当てマネージド ID を取得する
特定のサービス インスタンスを取得すると、次のように、マネージド ID のプリンシパル ID とテナント ID が返されます。 PrincipalId を使用してアクセス権を付与します。
PS C:\> (Get-AzDataFactoryV2 -ResourceGroupName <resourceGroupName> -Name <dataFactoryName>).Identity
PrincipalId TenantId
----------- --------
aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb aaaabbbb-0000-cccc-1111-dddd2222eeee
アプリケーション ID を取得するには、上のプリンシパル ID をコピーし、プリンシパル ID をパラメータとして指定して次の Microsoft Entra ID コマンドを実行します。
PS C:\> Get-AzADServicePrincipal -ObjectId aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
ServicePrincipalNames : {00001111-aaaa-2222-bbbb-3333cccc4444, https://identity.azure.net/P86P8g6nt1QxfPJx22om8MOooMf/Ag0Qf/nnREppHkU=}
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
DisplayName : ADFV2DemoFactory
Id : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
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":"bbbbbbbb-cccc-dddd-2222-333333333333",
"tenantId":"aaaabbbb-0000-cccc-1111-dddd2222eeee"
},
"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 にも適用されます。