マネージド ID を使用して Azure Stream Analytics ジョブを Azure Blob Storage に認証する

BLOB ストレージへの Azure出力に 管理 ID 認証 を使用すると、Stream Analytics ジョブは接続文字列を使用せずにストレージ アカウントに直接アクセスできます。 この機能により、セキュリティが向上し、Azure内の仮想ネットワーク (VNET) 内のストレージ アカウントにデータを書き込めます。

この記事では、Azure ポータルと Azure Resource Manager デプロイを使用して、Stream Analytics ジョブの BLOB 出力のマネージド ID を有効にする方法について説明します。

Azure ポータルを使用して Stream Analytics ジョブを作成する

まず、Azure Stream Analytics ジョブのマネージド ID を作成します。 

  1. Azure portal で、Azure Stream Analytics ジョブを開きます。 

  2. 左側のナビゲーション メニューから、 [構成] の下にある [マネージド ID] を選択します。 次に、 [システム割り当てマネージド ID を使用] のチェック ボックスをオンにして、 [保存] を選択します。

    システムによって割り当てられた管理されている ID

  3. Azureは、Microsoft Entra IDでStream AnalyticsジョブのID用にサービスプリンシパルを作成します。 Azureは、新しく作成された ID のライフ サイクルを管理します。 Stream Analytics ジョブを削除すると、Azureは関連付けられている ID (つまり、サービス プリンシパル) を自動的に削除します。 

    構成を保存すると、次のセクションに示すように、サービス プリンシパルのオブジェクト ID (OID) がプリンシパル ID として表示されます。

    プリンシパル ID

    サービス プリンシパルは、Stream Analytics ジョブと同じ名前を持ちます。 たとえば、ジョブの名前が MyASAJob であれば、サービス プリンシパルの名前も MyASAJob になります。 

Azure Resource Manager デプロイ

Azure Resource Managerを使用すると、Stream Analytics ジョブのデプロイを完全に自動化できます。 Azure PowerShellまたは Azure CLIを使用して、Resource Manager テンプレートをデプロイできます。 次の例では、Azure CLIを使用します。

  1. Microsoft.StreamAnalytics/streamingjobs リソースを、リソース マネージャー テンプレートのリソース セクションに次のプロパティを含めることで、マネージド ID で作成します。

    "Identity": {
      "Type": "SystemAssigned",
    },
    

    このプロパティにより、Stream Analytics ジョブの ID を作成し、管理するように Azure Resource Manager に通知されます。 次の例Resource Managerテンプレートは、マネージド ID が有効な Stream Analytics ジョブと、マネージド ID を使用する BLOB 出力シンクをデプロイします。

    {
        "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
            {
                "apiVersion": "2017-04-01-preview",
                "name": "MyStreamingJob",
                "location": "[resourceGroup().location]",
                "type": "Microsoft.StreamAnalytics/StreamingJobs",
                "identity": {
                    "type": "systemAssigned"
                },
                "properties": {
                    "sku": {
                        "name": "standard"
                    },
                    "outputs":[
                        {
                            "name":"output",
                            "properties":{
                                "serialization": {
                                    "type": "JSON",
                                    "properties": {
                                        "encoding": "UTF8"
                                    }
                                },
                                "datasource":{
                                    "type":"Microsoft.Storage/Blob",
                                    "properties":{
                                        "storageAccounts": [
                                            { "accountName": "MyStorageAccount" }
                                        ],
                                        "container": "test",
                                        "pathPattern": "segment1/{date}/segment2/{time}",
                                        "dateFormat": "yyyy/MM/dd",
                                        "timeFormat": "HH",
                                        "authenticationMode": "Msi"
                                    }
                                }
                            }
                        }
                    ]
                }
            }
        ]
    }
    

    上記のジョブをリソース グループ ExampleGroup にデプロイするには、次のAzure CLIコマンドを使用します。

    az deployment group create --resource-group ExampleGroup -template-file StreamingJob.json
    
  2. ジョブを作成したら、Azure Resource Managerを使用してジョブの完全な定義を取得します。

    az resource show --ids /subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP}/providers/Microsoft.StreamAnalytics/StreamingJobs/{RESOURCE_NAME}
    

    上記のコマンドは、次の例のような応答を返します。

    {
        "id": "/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP}/providers/Microsoft.StreamAnalytics/streamingjobs/{RESOURCE_NAME}",
        "identity": {
            "principalId": "{PRINCIPAL_ID}",
            "tenantId": "{TENANT_ID}",
            "type": "SystemAssigned",
            "userAssignedIdentities": null
        },
        "kind": null,
        "location": "West US",
        "managedBy": null,
        "name": "{RESOURCE_NAME}",
        "plan": null,
        "properties": {
            "compatibilityLevel": "1.0",
            "createdDate": "2019-07-12T03:11:30.39Z",
            "dataLocale": "en-US",
            "eventsLateArrivalMaxDelayInSeconds": 5,
            "jobId": "{JOB_ID}",
            "jobState": "Created",
            "jobStorageAccount": null,
            "jobType": "Cloud",
            "outputErrorPolicy": "Stop",
            "package": null,
            "provisioningState": "Succeeded",
            "sku": {
                "name": "Standard"
            }
        },
        "resourceGroup": "{RESOURCE_GROUP}",
        "sku": null,
        "tags": null,
        "type": "Microsoft.StreamAnalytics/streamingjobs"
    }
    

    ジョブの定義から principalId を書き留めます。これは、ジョブのマネージド ID をMicrosoft Entra ID内で識別し、次の手順で Stream Analytics ジョブにストレージ アカウントへのアクセス権を付与するために使用します。

  3. ジョブを作成したら、この記事の「 Stream Analytics ジョブにストレージ アカウントへのアクセス権を付与する 」セクションを参照してください。

Stream Analytics ジョブにストレージ アカウントへのアクセス権を付与する

Stream Analytics ジョブには、次の 2 つのレベルのアクセス権を付与できます。

  1. コンテナー レベルのアクセス: このアクセス レベルは、ジョブに特定の既存のコンテナーへのアクセスを許可します。
  2. アカウント レベルのアクセス: このアクセス レベルでは、新しいコンテナーを作成する機能を含め、ストレージ アカウントへの一般的なアクセス権をジョブに付与します。

コンテナーを作成するジョブが必要な場合を除き、 コンテナー レベルのアクセス を選択して、ジョブに必要な最小レベルのアクセス権を付与します。 次のセクションでは、Azure ポータルとコマンド ラインの両方のオプションについて説明します。

注意

グローバル レプリケーションまたはキャッシュの待機時間のため、アクセス許可の取り消しまたは許可には時間がかかる場合があります。 変更は 8 分以内に表示されます。

Azure ポータルを使用してアクセス権を付与する

コンテナー レベルのアクセス権

  1. ストレージ アカウントのコンテナーの構成ウィンドウに移動します。

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

  3. [追加]>[ロールの割り当ての追加] を選択して、[ロールの割り当ての追加] ページを開きます。

  4. 次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

    設定
    役割 ストレージ BLOB データ共同作成者
    アクセスを割り当てる ユーザー、グループ、またはサービス プリンシパル
    メンバー <Stream Analytics ジョブの名前>

    Azure portal の [ロールの割り当ての追加] ページを示すスクリーンショット。

アカウント レベルのアクセス権

  1. ストレージ アカウントに移動します。

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

  3. [追加]>[ロールの割り当ての追加] を選択して、[ロールの割り当ての追加] ページを開きます。

  4. 次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

    設定
    役割 ストレージ BLOB データ共同作成者
    アクセスを割り当てる ユーザー、グループ、またはサービス プリンシパル
    メンバー <Stream Analytics ジョブの名前>

    Azure portal の [ロールの割り当ての追加] ページを示すスクリーンショット。

コマンド ラインを使用してアクセス権を付与する

コンテナー レベルのアクセス権

特定のコンテナーへのアクセス権を付与するには、Azure CLI を使用して次のコマンドを実行します。

az role assignment create --role "Storage Blob Data Contributor" --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourcegroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>/blobServices/default/containers/<container-name>

アカウント レベルのアクセス権

アカウント全体へのアクセス権を付与するには、Azure CLI を使用して次のコマンドを実行します。

az role assignment create --role "Storage Blob Data Contributor" --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourcegroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>

Blob の入力または出力を作成する

マネージド ID を構成したので、BLOB リソースを入力または出力として Stream Analytics ジョブに追加する準備ができました。

  1. Azure Blob Storage 出力シンクの [出力プロパティ] ウィンドウで、[認証モード] ドロップダウンを選択し、 [マネージド ID] を選択します。 その他の出力プロパティについて詳しくは、「Azure Stream Analytics からの出力を理解する」を参照してください。 完了後は、保存 を選択します。

    Azure Blob Storage 出力を構成する

仮想ネットワーク アクセスを有効にする

ストレージ アカウントのファイアウォールと仮想ネットワークを構成するときに、必要に応じて、他の信頼されたMicrosoft サービスからのネットワーク トラフィックを許可できます。 Stream Analytics は、マネージド ID を使用して認証を行うときに、要求が信頼されたサービスから送信されていることを証明します。 次の手順では、この仮想ネットワーク アクセス例外を有効にする方法について説明します。

  1. ストレージ アカウントの構成ウィンドウ内の [ファイアウォールと仮想ネットワーク ] ウィンドウに移動します。
  2. [信頼された Microsoft サービスによるこのストレージ アカウントに対するアクセスを許可します] オプションが有効になっていることを確認します。
  3. 有効にした場合は、[ 保存] を選択します。

VNET アクセスを有効にする

マネージド ID の削除

Stream Analytics ジョブ用に作成したマネージド ID は、ジョブを削除した場合にのみ削除されます。 ジョブを削除せずにマネージド ID を削除することはできません。 マネージド ID を使用する必要がなくなった場合は、出力の認証方法を変更できます。 マネージド ID は、ジョブを削除するまで存在し続け、マネージド ID 認証をもう一度使用する場合に使用されます。

制限事項

この機能の現在の制限事項は次のとおりです。

  1. 従来の Azure Storage アカウント。

  2. Microsoft Entra ID のない Azure アカウント。

  3. マルチテナント アクセスはサポートされていません。 特定の Stream Analytics ジョブ用に作成されたサービス プリンシパルは、ジョブを作成したのと同じMicrosoft Entra テナントに存在する必要があり、別のMicrosoft Entra テナントに存在するリソースでは使用できません。

次のステップ