マネージド ID を使用して、Azure Blob Storage 出力に対して Azure Stream Analytics ジョブを認証する (プレビュー)Use Managed Identity to authenticate your Azure Stream Analytics job to Azure Blob Storage output (Preview)

Azure Blob Storage への出力に対するマネージド ID 認証は、Azure Stream Analytics でプレビューとして使用できます。Managed Identity authentication for output to Azure Blob storage is available for Azure Stream Analytics as a preview. これにより、Stream Analytics ジョブで、接続文字列を使用せずに、ストレージ アカウントに直接アクセスできます。This gives Stream Analytics jobs direct access to a storage account instead of using a connection string. この機能により、セキュリティが向上し、さらに Azure 内の仮想ネットワーク (VNET) のストレージ アカウントにデータを書き込むことができます。In addition to improved security, this feature also enables you to write data to a storage account in a Virtual Network (VNET) within Azure.

この記事では、Azure portal を通じて、および Azure Resource Manager デプロイを通じて、Stream Analytics ジョブの Blob 出力に対してマネージド ID を有効にする方法を示します。This article shows you how to enable Managed Identity for the Blob output(s) of a Stream Analytics job through the Azure portal and through an Azure Resource Manager deployment.

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

  1. Azure portal で、新しい Stream Analytics ジョブを作成するか、既存のジョブを開きます。Create a new Stream Analytics job or open an existing job in the Azure portal. 画面の左側にあるメニュー バーで、 [構成] の下にある [マネージド ID] を選択します。From the menu bar located on the left side of the screen, select Managed Identity located under Configure. [システム割り当てマネージド ID を使用] が選択されていることを確認し、画面下部にある [保存] ボタンをクリックします。Ensure that "Use System-assigned Managed Identity" is selected and then click the Save button on the bottom of the screen.

    Stream Analytics のマネージド ID の構成

  2. Azure Blob Storage 出力シンクの [出力プロパティ] ウィンドウで、[認証モード] ドロップダウンを選択し、 [マネージド ID] を選択します。In the output properties window of the Azure Blob storage output sink, select the Authentication mode drop-down and choose Managed Identity. その他の出力プロパティについて詳しくは、「Azure Stream Analytics からの出力を理解する」を参照してください。For information regarding the other output properties, see Understand outputs from Azure Stream Analytics. 操作が終了したら、 [OK] をクリックします。When you are finished, click Save.

    Azure Blob Storage 出力を構成する

  3. ジョブが作成されたので、この記事の「Stream Analytics ジョブにストレージ アカウントへのアクセス権を付与する」セクションを参照してください。Now that the job is created, see the Give the Stream Analytics job access to your storage account section of this article.

Azure Resource Manager デプロイAzure Resource Manager deployment

Azure Resource Manager を使用すると、Stream Analytics ジョブのデプロイを完全に自動化できます。Using Azure Resource Manager allows you to fully automate the deployment of your Stream Analytics job. Azure PowerShell または Azure CLI を使用して、Resource Manager テンプレートをデプロイできます。You can deploy Resource Manager templates using either Azure PowerShell or the Azure CLI. 次の例では、Azure CLI を使用しています。The below examples use the Azure CLI.

  1. Resource Manager テンプレートのリソース セクションに次のプロパティを含めることで、マネージド ID を持つ Microsoft.StreamAnalytics/streamingjobs リソースを作成できます。You can create a Microsoft.StreamAnalytics/streamingjobs resource with a Managed Identity by including the following property in the resource section of your Resource Manager template:

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

    このプロパティにより、Stream Analytics ジョブの ID を作成し、管理するように Azure Resource Manager に通知されます。This property tells Azure Resource Manager to create and manage the identity for your Stream Analytics job. 次に示すのは、マネージド ID が有効になった Stream Analytics ジョブと、マネージド ID を使用する Blob 出力シンクをデプロイする Resource Manager テンプレートの例です。Below is an example Resource Manager template that deploys a Stream Analytics job with Managed Identity enabled and a Blob output sink that uses Managed Identity:

    {
        "$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 にデプロイできます。The above job can be deployed to the Resource group ExampleGroup using the below Azure CLI command:

    az group deployment create --resource-group ExampleGroup -template-file StreamingJob.json
    
  2. ジョブが作成された後、Azure Resource Manager を使用して、そのジョブの完全な定義を取得できます。After the job is created, you can use Azure Resource Manager to retrieve the job's full definition.

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

    上記のコマンドでは、次のような応答が返されます。The above command will return a response like the below:

    {
        "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 を書き留めておきます。これは、Azure Active Directory 内でのジョブのマネージド ID を示し、Stream Analytics ジョブにストレージ アカウントへのアクセス権を付与する次の手順で使用します。Take note of the principalId from the job's definition, which identifies your job's Managed Identity within Azure Active Directory and will be used in the next step to grant the Stream Analytics job access to the storage account.

  3. ジョブが作成されたので、この記事の「Stream Analytics ジョブにストレージ アカウントへのアクセス権を付与する」セクションを参照してください。Now that the job is created, see the Give the Stream Analytics job access to your storage account section of this article.

Stream Analytics ジョブにストレージ アカウントへのアクセス権を付与するGive the Stream Analytics job access to your storage account

Stream Analytics ジョブには、次の 2 つのレベルのアクセス権のいずれかを付与できます。There are two levels of access you can choose to give your Stream Analytics job:

  1. コンテナー レベルのアクセス権: このオプションでは、既存の特定コンテナーへのアクセス権がジョブに付与されます。Container level access: this option gives the job access to a specific existing container.
  2. アカウント レベルのアクセス権: このオプションでは、ストレージ アカウントへの一般的なアクセス権がジョブに付与され、新しいコンテナーの作成など行うことができます。Account level access: this option gives the job general access to the storage account, including the ability to create new containers.

自分のためにコンテナーを作成するためのジョブが必要でない限り、コンテナー レベルのアクセス権を選択してください。これは、このオプションでは、必要な最小レベルのアクセス権がジョブに付与されるためです。Unless you need the job to create containers on your behalf, you should choose Container level access since this option will grant the job the minimum level of access required. Azure portal とコマンド ラインでの両方のオプションについて、以下で説明します。Both options are explained below for the Azure portal and the command-line.

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

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

  1. ストレージ アカウント内のコンテナーの構成ウィンドウに移動します。Navigate to the container's configuration pane within your storage account.

  2. 左側で [アクセス制御 (IAM)] を選択します。Select Access Control (IAM) on the left-hand side.

  3. [ロールの割り当てを追加する] セクションで、 [追加] をクリックします。Under the "Add a role assignment" section click Add.

  4. [ロールの割り当て] ウィンドウで、次のようにします。In the role assignment pane:

    1. [ロール] を [ストレージ BLOB データ共同作成者] に設定します。Set the Role to "Storage Blob Data Contributor"
    2. [アクセスの割り当て先] ドロップダウンが [Azure AD のユーザー、グループ、サービス プリンシパル] に設定されていることを確認します。Ensure the Assign access to dropdown is set to "Azure AD user, group, or service principal".
    3. 検索フィールドに、ご使用の Stream Analytics ジョブの名前を入力します。Type the name of your Stream Analytics job in the search field.
    4. ご使用の Stream Analytics ジョブを選択し、 [保存] をクリックします。Select your Stream Analytics job and click Save.

    コンテナー アクセス権を付与する

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

  1. ストレージ アカウントに移動します。Navigate to your storage account.

  2. 左側で [アクセス制御 (IAM)] を選択します。Select Access Control (IAM) on the left-hand side.

  3. [ロールの割り当てを追加する] セクションで、 [追加] をクリックします。Under the "Add a role assignment" section click Add.

  4. [ロールの割り当て] ウィンドウで、次のようにします。In the role assignment pane:

    1. [ロール] を [ストレージ BLOB データ共同作成者] に設定します。Set the Role to "Storage Blob Data Contributor"
    2. [アクセスの割り当て先] ドロップダウンが [Azure AD のユーザー、グループ、サービス プリンシパル] に設定されていることを確認します。Ensure the Assign access to dropdown is set to "Azure AD user, group, or service principal".
    3. 検索フィールドに、ご使用の Stream Analytics ジョブの名前を入力します。Type the name of your Stream Analytics job in the search field.
    4. ご使用の Stream Analytics ジョブを選択し、 [保存] をクリックします。Select your Stream Analytics job and click Save.

    アカウント アクセス権を付与する

コマンド ラインを使用してアクセス権を付与するGrant access via the command line

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

特定のコンテナーへのアクセス権を付与するには、Azure CLI を使用して次のコマンドを実行します。To give access to a specific container, run the following command using the 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>

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

アカウント全体へのアクセス権を付与するには、Azure CLI を使用して次のコマンドを実行します。To give access to the entire account, run the following command using the 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>

VNET アクセスを有効にするEnable VNET access

ストレージ アカウントの [ファイアウォールと仮想ネットワーク] を構成する場合、必要に応じて、他の信頼された Microsoft サービスからのネットワーク トラフィックを許可できます。When configuring your storage account's Firewalls and virtual networks, you can optionally allow in network traffic from other trusted Microsoft services. Stream Analytics は、マネージド ID を使用して認証を行う場合、要求が信頼されたサービスから発信されていることを証明します。When Stream Analytics authenticates using Managed Identity, it provides proof that the request is originating from a trusted service. この VNET アクセスの例外を有効にする手順を次に示します。Below are instructions to enable this VNET access exception.

  1. ストレージ アカウントの構成ウィンドウ内の [ファイアウォールと仮想ネットワーク] ウィンドウに移動します。Navigate to the “Firewalls and virtual networks” pane within the storage account’s configuration pane.
  2. [信頼された Microsoft サービスによるこのストレージ アカウントに対するアクセスを許可します] オプションが有効になっていることを確認します。Ensure the “Allow trusted Microsoft services to access this storage account” option is enabled.
  3. これを有効にした場合、 [保存] をクリックします。If you enabled it, click Save.

VNET アクセスを有効にする

制限事項Limitations

この機能の現在の制限は次のとおりです。Below are the current limitations of this feature:

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

  2. Azure Active Directory なしの Azure アカウント。Azure accounts without Azure Active Directory.

  3. マルチテナント アクセスは、サポートされていません。Multi-tenant access is not supported. 特定の Stream Analytics ジョブに対して作成されたサービス プリンシパルは、ジョブが作成された同じ Azure Active Directory テナントに配置する必要があり、別の Azure Active Directory テナントに配置されたリソースでは使用できません。The Service principal created for a given Stream Analytics job must reside in the same Azure Active Directory tenant in which the job was created, and cannot be used with a resource that resides in a different Azure Active Directory tenant.

  4. ユーザー割り当て ID はサポートされていません。User Assigned Identity is not supported. つまりユーザーは、Stream Analytics ジョブで使用される、独自のサービス プリンシパルを入力することはできません。This means the user is not able to enter their own service principal to be used by their Stream Analytics job. サービス プリンシパルは、Azure Stream Analytics で生成する必要があります。The service principal must be generated by Azure Stream Analytics.

次の手順Next steps