使用受控識別向 Azure Blob 儲存體驗證 Azure 串流分析作業

針對輸出向 Azure Blob 儲存體進行的受控識別驗證,可讓串流分析作業直接存取儲存體帳戶,而不是使用連接字串。 除了改善安全性之外,此功能也可讓您將資料寫入到 Azure 內虛擬網路 (VNET) 中的儲存體帳戶。

此文章說明如何透過 Azure 入口網站和 Azure Resource Manager 部署,針對串流分析作業的 Blob 輸出啟用受控識別。

使用 Azure 入口網站建立串流分析作業

首先,您會建立 Azure 串流分析作業的受控識別。 

  1. 在 Azure 入口網站中,開啟您的 Azure 串流分析作業。 

  2. 從左側導覽功能表中,選取位於 [設定] 之下的 [受控識別]。 然後,核取 [使用系統指派的受控識別] 旁的方塊,然後選取 [儲存]

    System assigned managed identity

  3. Microsoft Entra ID 中已建立串流分析作業的識別服務主體。 Azure 會管理新建立的身分識別生命週期。 當串流分析作業刪除時,Azure 會自動刪除已與其建立關聯的身分識別 (亦即服務主體)。 

    當您儲存組態時,服務主體的物件識別碼 (OID) 會列為主體識別碼,如下所示:

    Principal ID

    服務主體與串流分析作業的名稱相同。 例如,如果作業的名稱是 MyASAJob,則服務主體的名稱也會是 MyASAJob。 

Azure Resource Manager 部署

使用 Azure Resource Manager,可讓您將串流分析作業的部署完全自動化。 您可以使用 Azure PowerShell 或 Azure CLI 來部署 Resource Manager 範本。 下列範例使用 Azure CLI。

  1. 您可以藉由在 Resource Manager 範本的資源區段中包括下列屬性來建立具有受控識別的 Microsoft.StreamAnalytics/streamingjobs 資源:

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

    此屬性告知 Azure Resource Manager 為您建立及管理串流分析作業的身分識別。 以下為範例 Resource Manager 範本,其會部署已啟用受控識別的串流分析作業,以及使用受控識別的 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"
                                    }
                                }
                            }
                        }
                    ]
                }
            }
        ]
    }
    

    您可以使用下列 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 內的作業受控識別,並在下一個步驟中用來為串流分析作業授與儲存體帳戶的存取權。

  3. 現在已建立作業,請參閱此文章的為串流分析作業提供對儲存體帳戶的存取一節。

為串流分析作業提供對儲存體帳戶的存取

您可以選擇為串流分析作業提供兩種存取層級:

  1. 容器層級存取:此選項可為作業提供對特定現有容器的存取。
  2. 帳戶層級存取:此選項可為作業提供對儲存體帳戶的一般存取,包括建立新容器的能力。

除非您需要讓作業代表您建立容器,否則應該選擇 [容器層級存取],因為此選項會為作業授與所需的最低存取層級。 以下將針對 Azure 入口網站和命令列說明這兩個選項。

注意

由於全域複寫或快取延遲,在撤銷或授與權限時可能會有延遲。 變更應該會在 8 分鐘內反映。

透過 Azure 入口網站授與存取

容器層級存取

  1. 瀏覽至儲存體帳戶內容器的設定窗格。

  2. 選取 [存取控制 (IAM)]。

  3. 選取 [新增]> [新增角色指派],開啟 [新增角色指派] 頁面。

  4. 指派下列角色。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色

    設定
    角色 儲存體 Blob 資料參與者
    存取權指派對象 使用者、群組或服務主體
    成員 <為您的串流分析工作命名>

    Screenshot that shows Add role assignment page in Azure portal.

帳戶層級存取

  1. 瀏覽至您的儲存體帳戶。

  2. 選取 [存取控制 (IAM)]。

  3. 選取 [新增]> [新增角色指派],開啟 [新增角色指派] 頁面。

  4. 指派下列角色。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色

    設定
    角色 儲存體 Blob 資料參與者
    存取權指派對象 使用者、群組或服務主體
    成員 <為您的串流分析工作命名>

    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 輸入或輸出

您的受控識別現已設定,因此可將 Blob 資源當作輸入或輸出新增到您的串流分析作業。

  1. 在 Azure Blob 儲存體輸出接收的輸出屬性視窗中,選取 [驗證模式] 下拉式清單,然後選擇 [受控識別]。 如需其他輸出屬性的相關資訊,請參閱了解來自 Azure 串流分析的輸出。 當您完成後,請按一下 [儲存]

    Configure Azure Blob storage output

啟用 VNET 存取

設定儲存體帳戶的 [防火牆與虛擬網路] 時,您可以選擇性地允許來自其他受信任 Microsoft 服務的網路流量。 當串流分析使用受控識別進行驗證時,其會提供要求源自受信任服務的證明。 以下是啟用此 VNET 存取例外狀況的指示。

  1. 瀏覽至儲存體帳戶設定窗格中的 [防火牆與虛擬網路] 窗格。
  2. 確認已啟用 [允許受信任的 Microsoft 服務存取此儲存體帳戶] 選項。
  3. 如果您已加以啟用,請按一下 [儲存]

Enable VNET access

移除受控識別

只有在刪除作業時,才會刪除針對串流分析作業而建立的受控識別。 刪除受控識別時,無法不刪除作業。 若不想再使用該受控識別,可變更輸出的驗證方法。 刪除該作業之前,受控識別將繼續存在,並在您決定再次使用受控識別驗證時提供使用。

限制

以下是此功能的目前限制:

  1. 傳統 Azure 儲存體帳戶。

  2. 沒有 Microsoft Entra ID 的 Azure 帳戶。

  3. 不支援多租用戶存取。 針對指定串流分析作業所建立的服務主體,必須位於和建立該作業所在的相同 Microsoft Entra 租用戶中,而且不能與位於不同 Microsoft Entra 租用戶的資源搭配使用。

下一步