使用受控識別向 Azure Blob 儲存體驗證 Azure 串流分析作業
針對輸出向 Azure Blob 儲存體進行的受控識別驗證,可讓串流分析作業直接存取儲存體帳戶,而不是使用連接字串。 除了改善安全性之外,此功能也可讓您將資料寫入到 Azure 內虛擬網路 (VNET) 中的儲存體帳戶。
此文章說明如何透過 Azure 入口網站和 Azure Resource Manager 部署,針對串流分析作業的 Blob 輸出啟用受控識別。
使用 Azure 入口網站建立串流分析作業
首先,您會建立 Azure 串流分析作業的受控識別。
在 Azure 入口網站中,開啟您的 Azure 串流分析作業。
從左側導覽功能表中,選取位於 [設定] 之下的 [受控識別]。 然後,核取 [使用系統指派的受控識別] 旁的方塊,然後選取 [儲存]。
Microsoft Entra ID 中已建立串流分析作業的識別服務主體。 Azure 會管理新建立的身分識別生命週期。 當串流分析作業刪除時,Azure 會自動刪除已與其建立關聯的身分識別 (亦即服務主體)。
當您儲存組態時,服務主體的物件識別碼 (OID) 會列為主體識別碼,如下所示:
服務主體與串流分析作業的名稱相同。 例如,如果作業的名稱是
MyASAJob
,則服務主體的名稱也會是MyASAJob
。
Azure Resource Manager 部署
使用 Azure Resource Manager,可讓您將串流分析作業的部署完全自動化。 您可以使用 Azure PowerShell 或 Azure CLI 來部署 Resource Manager 範本。 下列範例使用 Azure CLI。
您可以藉由在 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
建立該作業之後,您可以使用 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 內的作業受控識別,並在下一個步驟中用來為串流分析作業授與儲存體帳戶的存取權。
現在已建立作業,請參閱此文章的為串流分析作業提供對儲存體帳戶的存取一節。
為串流分析作業提供對儲存體帳戶的存取
您可以選擇為串流分析作業提供兩種存取層級:
- 容器層級存取:此選項可為作業提供對特定現有容器的存取。
- 帳戶層級存取:此選項可為作業提供對儲存體帳戶的一般存取,包括建立新容器的能力。
除非您需要讓作業代表您建立容器,否則應該選擇 [容器層級存取],因為此選項會為作業授與所需的最低存取層級。 以下將針對 Azure 入口網站和命令列說明這兩個選項。
注意
由於全域複寫或快取延遲,在撤銷或授與權限時可能會有延遲。 變更應該會在 8 分鐘內反映。
透過 Azure 入口網站授與存取
容器層級存取
瀏覽至儲存體帳戶內容器的設定窗格。
選取 [存取控制 (IAM)]。
選取 [新增] > [新增角色指派],開啟 [新增角色指派] 頁面。
指派下列角色。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色。
設定 值 角色 儲存體 Blob 資料參與者 存取權指派對象 使用者、群組或服務主體 成員 <為您的串流分析工作命名>
帳戶層級存取
瀏覽至您的儲存體帳戶。
選取 [存取控制 (IAM)]。
選取 [新增] > [新增角色指派],開啟 [新增角色指派] 頁面。
指派下列角色。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色。
設定 值 角色 儲存體 Blob 資料參與者 存取權指派對象 使用者、群組或服務主體 成員 <為您的串流分析工作命名>
透過命令列授與存取
容器層級存取
若要授與對特定容器的存取,請使用 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 資源當作輸入或輸出新增到您的串流分析作業。
在 Azure Blob 儲存體輸出接收的輸出屬性視窗中,選取 [驗證模式] 下拉式清單,然後選擇 [受控識別]。 如需其他輸出屬性的相關資訊,請參閱了解來自 Azure 串流分析的輸出。 當您完成後,請按一下 [儲存]。
啟用 VNET 存取
設定儲存體帳戶的 [防火牆與虛擬網路] 時,您可以選擇性地允許來自其他受信任 Microsoft 服務的網路流量。 當串流分析使用受控識別進行驗證時,其會提供要求源自受信任服務的證明。 以下是啟用此 VNET 存取例外狀況的指示。
- 瀏覽至儲存體帳戶設定窗格中的 [防火牆與虛擬網路] 窗格。
- 確認已啟用 [允許受信任的 Microsoft 服務存取此儲存體帳戶] 選項。
- 如果您已加以啟用,請按一下 [儲存]。
移除受控識別
只有在刪除作業時,才會刪除針對串流分析作業而建立的受控識別。 刪除受控識別時,無法不刪除作業。 若不想再使用該受控識別,可變更輸出的驗證方法。 刪除該作業之前,受控識別將繼續存在,並在您決定再次使用受控識別驗證時提供使用。
限制
以下是此功能的目前限制:
傳統 Azure 儲存體帳戶。
沒有 Microsoft Entra ID 的 Azure 帳戶。
不支援多租用戶存取。 針對指定串流分析作業所建立的服務主體,必須位於和建立該作業所在的相同 Microsoft Entra 租用戶中,而且不能與位於不同 Microsoft Entra 租用戶的資源搭配使用。