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

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

この記事では、Azure portal を通じて、および Azure Resource Manager デプロイを通じて、Stream Analytics ジョブの Blob 出力に対してマネージド ID を有効にする方法を示します。

Azure portal を使用して Stream Analytics ジョブを作成する

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

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

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

    System assigned managed identity

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

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

    Principal ID

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

Azure Resource Manager デプロイ

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

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

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

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

    {
        "$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"
                                    }
                                }
                            }
                        }
                    ]
                }
            }
        ]
    }
    

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

    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 を書き留めておきます。これは、Microsoft Entra ID 内でのジョブのマネージド ID を示し、Stream Analytics ジョブにストレージ アカウントへのアクセス権を付与する次の手順で使用します。

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

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

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

  1. コンテナー レベルのアクセス権: このオプションでは、既存の特定コンテナーへのアクセス権がジョブに付与されます。
  2. アカウント レベルのアクセス権: このオプションでは、ストレージ アカウントへの一般的なアクセス権がジョブに付与され、新しいコンテナーの作成など行うことができます。

自分のためにコンテナーを作成するためのジョブが必要でない限り、コンテナー レベルのアクセス権を選択してください。これは、このオプションでは、必要な最小レベルのアクセス権がジョブに付与されるためです。 Azure portal とコマンド ラインでの両方のオプションについて、以下で説明します。

注意

グローバル レプリケーションまたはキャッシュの待機時間が原因で、アクセス許可が取り消されたり付与されたりすると、遅延が発生することがあります。 変更は 8 分以内に反映される必要があります。

Azure portal を使用してアクセス権を付与する

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

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

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

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

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

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

    Screenshot that shows Add role assignment page in Azure portal.

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

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

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

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

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

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

    Screenshot that shows Add role assignment page in 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 からの出力を理解する」を参照してください。 操作が終了したら、 [OK] をクリックします。

    Configure Azure Blob storage output

VNET アクセスを有効にする

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

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

Enable VNET access

マネージド ID の削除

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

制限事項

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

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

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

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

次のステップ