Share via


Azure 監視器中的角色、權限與安全性

本文說明如何套用 角色型訪問控制 (RBAC) 監視角色來授與或限制存取權,並討論 Azure 監視器相關資源的安全性考慮。

內建的監視角色

Azure 角色型訪問控制 (Azure RBAC) 提供內建角色來監視,您可以指派給使用者、群組、服務主體和受控識別。 最常見的角色分別是監視讀取者和監視參與者,以取得讀取和寫入許可權。

如需監視角色的詳細資訊,請參閱 RBAC 監視角色

監視讀取器

受指派監視讀者角色的人員可以檢視訂閱中所有的監視資料,但無法修改任何資源或編輯與監視資源相關的任何設定。 這個角色適用於組織中的使用者,例如支援或作業工程師,這些人員必須︰

  • 在Azure 入口網站中檢視監視儀表板。
  • 檢視 Azure 警示中定義的警示規則。
  • 使用 Azure 監視器 REST APIPowerShell cmdlets,或跨平台 CLI 查詢 Azure 監視器計量。
  • 使用入口網站、Azure 監視器 REST API、PowerShell Cmdlets,或跨平台 CLI 查詢活動記錄檔。
  • 檢視用於資源的 診斷設定
  • 檢視用於訂用帳戶的 記錄檔設定檔
  • 檢視自動調整設定。
  • 檢視警示活動和設定。
  • 搜尋 Log Analytics 工作區資料,包括工作區的使用狀況資料。
  • 擷取 Log Analytics 工作區中的資料表結構描述。
  • 在 Log Analytics 工作區中擷取和執行記錄查詢。
  • 存取 Application Insights 資料。

注意

若記錄檔資料已串流至事件中樞或儲存於儲存體帳戶,此角色則不會取得讀取權限。 如需設定這些資源存取權的資訊,請參閱本文稍後監視資料的安全性考量一節。

監視參與者

受指派監視參與者角色的人員可以檢視訂閱中所有的監視資料。 他們也可以建立或修改監視設定,但無法修改任何其他資源。

此角色是監視讀取者角色的超集, 此角色適用於組織的監視團隊成員,或受管理的服務提供者;且除了上述權限外,這些對象必須︰

  • 在入口網站中檢視監視儀表板,並建立自己的私人監視儀表板。
  • 建立和編輯資源的診斷設定1
  • 透過 Azure 警示設定警示規則活動和設定。
  • 列出 Log Analytics 工作區的共用金鑰。
  • 建立、刪除並執行 Log Analytics 工作區中已儲存的搜尋。
  • 建立及刪除 Log Analytics 工作區儲存體設定。
  • 為 Application Insights 建立 web 測試和元件。

1 使用者也必須在目標資源上個別被授與 ListKeys 權限 (儲存體帳戶或事件中樞命名空間),以建立或編輯診斷設定。

注意

若記錄檔資料已串流至事件中樞或儲存於儲存體帳戶,此角色則不會取得讀取權限。 如需設定這些資源存取權的資訊,請參閱本文稍後監視資料的安全性考量一節。

監視權限和 Azure 自訂角色

如果內建角色不符合小組的需求,您可以建立具有細微許可權的 Azure 自定義角色。

例如,您可以使用細微的許可權,為具有下列 PowerShell 腳本的活動記錄讀取器建立 Azure 自定義角色。

$role = Get-AzRoleDefinition "Reader"
$role.Id = $null
$role.Name = "Activity Log Reader"
$role.Description = "Can view activity logs."
$role.Actions.Clear()
$role.Actions.Add("Microsoft.Insights/eventtypes/*")
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/mySubscription")
New-AzRoleDefinition -Role $role 

注意

存取警示、診斷設定和資源的度量需要使用者具有資源類型和該資源範圍的讀取存取權限。 建立診斷設定,其會將資料傳送至儲存體帳戶或串流至事件中樞,該使用者也需要在目標資源上擁有 ListKeys 權限。

指派角色

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az

若要指派角色,請參閱 使用 Azure PowerShell 指派 Azure 角色。

例如,下列 PowerShell 腳本會將角色指派給指定的使用者。

將取代 <RoleId> 為您想要指派的 RBAC 監視角色 識別碼。

<SubscriptionID><ResourceGroupName><UserPrincipalName> 取代為您環境適用的值。

# Define variables
$SubscriptionId = "<SubscriptionID>"
$ResourceGroupName = "<ResourceGroupName>"
$UserPrincipalName = "<UserPrincipalName>"  # The UPN of the user to whom you want to assign the role
$RoleId = "<RoleId>"  # The ID of the role

# Get the user object
$User = Get-AzADUser -UserPrincipalName $UserPrincipalName

# Define the scope (e.g., subscription or resource group level)
$Scope = "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName"

# Assign the role
New-AzRoleAssignment -ObjectId $User.Id -RoleDefinitionId $RoleId -Scope $Scope

您也可以使用 Azure 入口網站 來指派 Azure 角色。

重要

  • 請確定您有指派指定範圍中角色的必要許可權。 您必須擁有 訂用帳戶或資源群組的擁有者 許可權。
  • 指派資源群組或訂用帳戶中您資源所屬的存取權,而不是資源本身。

用於判斷角色成員資格的 PowerShell 查詢

產生屬於指定角色的使用者清單會很有説明。 為了協助產生這些類型的清單,您可以調整下列範例查詢來符合自己的特定需求。

查詢整個訂用帳戶以尋找系統管理員角色 + 參與者角色

(Get-AzRoleAssignment -IncludeClassicAdministrators | Where-Object {$_.RoleDefinitionName -in @('ServiceAdministrator', 'CoAdministrator', 'Owner', 'Contributor') } | Select -ExpandProperty SignInName | Sort-Object -Unique) -Join ", "

在特定 Application Insights 資源的範圍中查詢,以尋找擁有者與參與者

$resourceGroup = "ResourceGroupName"
$resourceName = "AppInsightsName"
$resourceType = "microsoft.insights/components"
(Get-AzRoleAssignment -ResourceGroup $resourceGroup -ResourceType $resourceType -ResourceName $resourceName | Where-Object {$_.RoleDefinitionName -in @('Owner', 'Contributor') } | Select -ExpandProperty SignInName | Sort-Object -Unique) -Join ", "

在特定資源群組的範圍中查詢,以尋找擁有者與參與者

$resourceGroup = "ResourceGroupName"
(Get-AzRoleAssignment -ResourceGroup $resourceGroup | Where-Object {$_.RoleDefinitionName -in @('Owner', 'Contributor') } | Select -ExpandProperty SignInName | Sort-Object -Unique) -Join ", "

監視資料的安全性考量

Azure 監視器中的資料都可以傳送至儲存體帳戶或串流到事件中樞,兩者都是一般用途的 Azure 資源。 一般用途的資源、建立、刪除和存取這些資源是保留給系統管理員的特殊許可權作業。 由於此資料可以包含 IP 位址或使用者名稱等敏感性資訊,因此請使用下列做法來監視相關資源,以防止誤用:

  • 針對監視資料使用單一、專用的儲存體帳戶。 如果您需要將監視數據分成多個記憶體帳戶,請一律使用不同的記憶體帳戶來監視數據和其他類型的數據。 如果您共用用於監視的記憶體帳戶和其他資料類型,您可能會不小心將其他數據的存取權授與只應該存取監視數據的組織。 例如,非 Microsoft 組織的安全性資訊和事件管理應該只需要存取監視數據。
  • 以上述相同的原因在所有的診斷設定中使用單一、專用的服務匯流排或事件中樞命名空間。
  • 將存取監視相關的儲存體帳戶或事件中樞保存在不同的資源群組中,以限制存取它們。 在監視角色上使用範圍,以限制只能存取該資源群組。
  • 當使用者只需要監視數據的存取權時,您絕不應授與訂用帳戶範圍中記憶體帳戶或事件中樞的 ListKeys 許可權。 反之,對資源或資源群組 (如果您有專用的監視資源群組) 範圍內的使用者授與這些權限。

當使用者或應用程式須存取儲存體帳戶中的監視資料時,請針對包含監視資料的儲存體帳戶 (具有 Blob 儲存體服務層級的唯讀存取權) 產生共用存取簽章 (SAS)。 在 PowerShell 中,帳戶的 SAS 可能類似下列程式碼:

$context = New-AzStorageContext -ConnectionString "[connection string for your monitoring Storage Account]"
$token = New-AzStorageAccountSASToken -ResourceType Service -Service Blob -Permission "rl" -Context $context

接著,您可將權杖提供給需要從該儲存體帳戶進行讀取的實體。 該實體可以列出和讀取該儲存體帳戶中的所有 Blob。

或者,如果您需要使用 Azure RBAC 控制此權限,可以在該特定儲存體帳戶上對該實體授與 Microsoft.Storage/storageAccounts/listkeys/action 權限。 若使用者必須設定診斷設定以將資料傳送至儲存體帳戶,則此為必要權限。 例如,針對只需要從一個儲存體帳戶進行讀取的使用者或應用程式,您可以建立下列 Azure 自訂角色︰

$role = Get-AzRoleDefinition "Reader"
$role.Id = $null
$role.Name = "Monitoring Storage Account Reader"
$role.Description = "Can get the storage account keys for a monitoring storage account."
$role.Actions.Clear()
$role.Actions.Add("Microsoft.Storage/storageAccounts/listkeys/action")
$role.Actions.Add("Microsoft.Storage/storageAccounts/Read")
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/mySubscription/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/myMonitoringStorageAccount")
New-AzRoleDefinition -Role $role 

警告

ListKeys 權限可讓使用者列出主要和次要的儲存體帳戶金鑰。 在該儲存體帳戶中所有已簽署的服務 (blob、佇列、資料表、檔案) 中,這些金鑰會授予使用者所有已簽署的權限 (例如讀取、寫入、建立 blob、刪除 blob 等)。 我們建議盡可能使用帳戶 SAS。

可以對事件中樞採用類似的模式,但您必須先建立專用的接聽授權規則。 若應用程式僅須接聽監視相關的事件中樞,且您要授與存取權,請依循下列步驟︰

  1. 在入口網站裡,針對只有接聽宣告的串流監視資料所建立的事件中樞建立共用存取原則。 例如,您可能會將其稱為 “monitoringReadOnly”。可能的話,直接將該金鑰提供給取用者,並略過下一步。

  2. 如果取用者需要視需要取得密鑰,請將該事件中樞的 ListKeys 動作授與使用者。 若使用者必須設定診斷設定或記錄設定檔以串流至事件中樞,這也是必要步驟。 例如,您可能會建立 Azure RBAC 規則︰

    $role = Get-AzRoleDefinition "Reader"
    $role.Id = $null
    $role.Name = "Monitoring Event Hub Listener"
    $role.Description = "Can get the key to listen to an event hub streaming monitoring data."
    $role.Actions.Clear()
    $role.Actions.Add("Microsoft.EventHub/namespaces/authorizationrules/listkeys/action")
    $role.Actions.Add("Microsoft.EventHub/namespaces/Read")
    $role.AssignableScopes.Clear()
    $role.AssignableScopes.Add("/subscriptions/mySubscription/resourceGroups/myResourceGroup/providers/Microsoft.ServiceBus/namespaces/mySBNameSpace")
    New-AzRoleDefinition -Role $role 
    

下一步