Azure 監視器中的角色、權限與安全性
本文會說明如何套用角色型存取控制 (RBAC) 監視角色來授與或限制存取權,並討論 Azure 監視器相關資源的安全性考量。
內建的監視角色
Azure 角色型存取控制 (RBAC) 提供監視的內建角色,可供您指派給使用者、群組、服務主體和受控身分識別。 最常見的角色是分別具有讀取和寫入權限的「監視讀者」 和「監視參與者」。
如需監視角色的詳細資訊,請參閱 RBAC 監視角色。
監視讀取器
受指派監視讀者角色的人員可以檢視訂閱中所有的監視資料,但無法修改任何資源或編輯與監視資源相關的任何設定。 這個角色適用於組織中的使用者,例如支援或作業工程師,這些人員必須︰
- 在Azure 入口網站中檢視監視儀表板。
- 檢視 Azure 警示中定義的警示規則。
- 使用 Azure 監視器 REST API、PowerShell 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
重要
- 請確認您有指派指定範圍中角色的必要權限。 您必須擁有訂用帳戶或資源群組的「擁有者」權限。
- 在您的資源所屬的資源群組或訂用帳戶中 (而不是資源本身) 指派存取權。
用於判斷角色成員資格的 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。
限制存取監控相關的事件中樞
可以對事件中樞採用類似的模式,但您必須先建立專用的接聽授權規則。 若應用程式僅須接聽監視相關的事件中樞,且您要授與存取權,請依循下列步驟︰
在入口網站裡,針對只有接聽宣告的串流監視資料所建立的事件中樞建立共用存取原則。 例如,您可能會將其稱為 “monitoringReadOnly”。可能的話,直接將該金鑰提供給取用者,並略過下一步。
若取用者必須視需要取得金鑰,請將該事件中樞的 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