使用受控身分識別來將您的 Azure 串流分析 作業驗證至 Azure Blob 儲存體

當你使用 managed identity authentication 輸出到 Azure Blob 儲存時,Stream Analytics 的工作可以直接存取儲存帳號,無需使用 連接字串。 此功能提升安全性,並允許您在 Azure 的虛擬網路(VNET)中將資料寫入儲存帳號。

本文說明如何透過 Azure 入口網站與 Azure Resource Manager 部署,為 Stream Analytics 作業的 Blob 輸出啟用受控識別。

透過 Azure 入口網站建立 Stream Analytics 職缺

首先,為你的 Azure 串流分析 工作建立一個受管理身份。 

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

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

    系統指派的受控識別  

  3. Azure 會在 Microsoft Entra ID 中為 Stream Analytics 工作身份建立服務主體。 Azure 負責管理新建立身份的生命週期。 當你刪除 Stream Analytics 工作時,Azure 會自動刪除相關的身份(也就是服務主體)。 

    當你儲存設定時,服務主體的物件 ID(OID)會以主體 ID 的形式出現,如以下章節所示:

    主體識別碼

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

Azure Resource Manager 部署

透過使用 Azure Resource Manager,您可以完全自動化 Stream Analytics 工作的部署。 你可以用 Azure PowerShell 或 Azure CLI 來部署Resource Manager範本。 以下範例使用 Azure CLI。

  1. 建立一個Microsoft/StreamAnalytics/streamingjobs資源,並使用受控身分識別,透過在資源管理器範本的資源區塊中加入以下屬性:

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

    此屬性指示 Azure Resource Manager 為您的串流分析作業建立並管理身分識別。 下列範例 Resource Manager 範本會部署已啟用受控識別的 Stream Analytics 作業,以及使用受控識別的 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 中工作所需的管理身份,並在下一步中被使用,以授權 Stream Analytics 工作存取儲存帳戶。

  3. 現在你已經建立了這個工作,請參考本文中 「讓串流分析工作存取你的儲存帳戶 」部分。

授與 Stream Analytics 作業存取您儲存體帳戶的權限

您可以授與 Stream Analytics 作業兩個層級的存取權:

  1. 容器層級存取: 此存取層級賦予工作對特定現有容器的存取權限。
  2. 帳號層級存取權限: 此存取層級賦予工作對儲存帳號的一般存取權限,包括建立新容器的能力。

除非你需要該工作來建立容器,否則請選擇容器 層級存取 權,以賦予該工作所需的最低存取權限。 以下章節將說明 Azure 入口網站和命令列的兩種選項。

注意

由於全域複製或快取延遲,撤銷或授予權限可能需要一些時間。 變更應該會在八分鐘內出現。

透過 Azure 入口網站授予存取權限

容器層級存取

  1. 到你的儲存帳戶裡容器的設定頁面。

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

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

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

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

    顯示 Azure 入口網站中新增角色指派頁面的螢幕擷取畫面。

帳戶層級存取

  1. 前往您的儲存帳戶。

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

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

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

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

    顯示 Azure 入口網站中新增角色指派頁面的螢幕擷取畫面。

透過命令列授與存取

容器層級存取

若要授與對特定容器的存取,請使用 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 串流分析的輸出。 完成時,選取儲存。

    設定 Azure Blob 儲存體輸出

啟用虛擬網路存取

當你設定儲存帳號的 防火牆和虛擬網路時,你可以選擇允許來自其他可信任Microsoft服務的網路流量。 當 Stream Analytics 使用管理式身份驗證時,它能證明請求來自受信任的服務。 以下說明說明如何啟用此虛擬網路存取例外。

  1. 進入儲存帳號設定窗格中的 防火牆與虛擬網路 面板。
  2. 請確保已啟用允許受信任的 Microsoft 服務存取此儲存體帳戶選項。
  3. 如果你啟用了,請選擇 儲存。

啟用 VNET 存取

移除管理式身份識別

你為 Stream Analytics 工作建立的管理身份只有在刪除該工作時才會被刪除。 你無法刪除管理身份,除非刪除該工作。 若不想再使用該受控識別,可變更輸出的驗證方法。 管理身份會持續存在,直到你刪除該工作,且如果你決定再次使用管理身份驗證,該身份會被使用。

限制

此功能目前的限制包括:

  1. 傳統 Azure 儲存體帳戶。

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

  3. 不支援多租戶存取。 為特定 Stream Analytics 工作建立的服務主體必須存在於你創建該工作的同一個 Microsoft Entra 租戶中,且不能與位於不同 Microsoft Entra 租戶的資源一起使用。

下一步