Azure 監視器 Log Analytics 中的細微角色型訪問控制(RBAC)可讓您根據指定條件篩選每位使用者可檢視或查詢的工作區資料,以符合您的商務和安全性需求。 此存取控制的優點包括:
- 資料列層級存取
- 資料表層級存取
- 控制與數據平面的分離
如果您的 Log Analytics 架構包含多個工作區,以容納資料隔離、隱私權或合規性,則細微的 RBAC 會藉由減少所需的工作區數目來協助簡化拓撲。
簡介影片
先決條件
| 動作 | 所需權限 |
|---|---|
| 建立新的自訂角色 |
在可指派範圍內的 Microsoft.Authorization/roleDefinitions/write 權限。
例如,由特殊權限內建角色所提供的,使用者存取系統管理員。 |
| 新增或更新條件 |
Log Analytics 工作區的 Microsoft.Authorization/roleAssignments/write 和 Microsoft.Authorization/roleAssignments/delete 權限。
例如,由特殊權限內建角色所提供的,角色型存取控制系統管理員。 |
何時使用細微 RBAC?
細微 RBAC 可協助您實現下列案例:
- 數據隔離 - 將不同單位、小組和地理位置的數據與相同的工作區分開,並確保每個使用者只能存取與其群組相關的數據。 存取條件會使用自定義記錄字段來強制執行數據列層級存取,這些存取權會依防火牆、裝置類型、訂用帳戶標識碼或其他標識碼等屬性隔離。
- 數據隱私權 - 保護敏感性或機密數據,例如個人資訊、健康情況記錄或財務交易,並且只允許存取授權的使用者。
- 數據合規性 - 使用細微的 RBAC 作為工具來協助您符合產業或區域的法規或法律需求。 對數據存取和使用方式強制執行適當的原則和控件。
細微 RBAC 可控制資料存取,例如檢視或查詢資料。 它不會處理控制平面動作,例如設定數據存取權、工作區管理、轉換或數據導出的許可權。
設定細微的 RBAC
使用逐步細微 RBAC 範例跳入細微 RBAC。
下列各節提供設定細微 RBAC 相關重要概念和步驟的概觀。
角色選擇
若要設定細微的 RBAC,請使用內建角色 Log Analytics 資料讀取者,或建立具有特定 必要動作的自訂角色。 然後使用 條件指派選取的角色。 如需自訂角色的詳細資訊,請參閱 Azure 自訂角色。
最低要求的動作和資料動作許可權:
| 自訂角色定義 | 權限 | 說明 |
|---|---|---|
| 控制平面 (動作) | Microsoft.OperationalInsights/workspaces/query/read |
在 Log Analytics 中執行查詢,並查看元數據。 此許可權不會授與數據的存取權。 |
| 資料平面 (DataActions) | Microsoft.OperationalInsights/workspaces/tables/data/read |
存取資料,且是在角色指派條件中選擇的 dataaction。 如果未設定任何條件,則此許可權會將存取權授與指派範圍中的所有數據。 |
選擇性地透過新增 Microsoft.OperationalInsights/workspaces/read 控制動作,以在 Azure 入口網站中包含對記錄 UI 的存取權。 如需詳細資訊,請參閱 Azure RBAC 控件和數據動作。
備註
細微 RBAC (例如 Azure RBAC) 是累加模型。 您的有效權限是角色指派的總和。 若要讓細微的 RBAC 條件生效,您必須移除具有較高訪問許可權的任何角色指派。
例如,如果您在相同的作用範圍內有兩個角色指派,一個設置了 */read 動作,另一個設置了限制特定記錄存取的條件,則結果許可權是 */read 動作授與作用範圍內所有日誌的存取權。 沒有明確的拒絕動作,只有拒絕指派。
條件和表達式
就像一般角色指派一樣,建立的自定義角色必須指派給使用者或群組。 差異在於,在角色指派期間,條件會設定為微調訪問控制。
細微 RBAC 可讓您根據每筆記錄中的資料,設定資料表和資料列層級的條件。 根據這兩個策略規劃限制:
| 訪問控制方法 | 範例 |
|---|---|
| 無權存取資料,但允許的資料除外 | 限制對應用程式記錄的存取,使使用者只能查看資料行中application id欄位為他們有權限存取之應用程式的記錄。 |
| 存取所有數據,但不允許的除外 | 允許存取所有登入記錄,除了 userPrincipalName 欄位是CEO的記錄之外。 |
條件是由角色的數據動作和表達式所組成。 表示式是邏輯語句,其格式為 AttributeOperatorValue。
值受限於下列字元的支援:
- 英數字元
- 特殊字元:
@、 、.-
Log Analytics 細微 RBAC 支援資料表與資料行/值屬性:
| 屬性來源 | 顯示名稱 | 類型 | 說明 | 屬性名稱 |
|---|---|---|---|---|
| 資源 | 資料表名稱 | 繩子 | 用來授與/限制的資料表名稱。 | Microsoft.OperationalInsights/workspaces/tables:`<name>` |
| 資源 | 欄位值(鍵是欄位名稱) | 字典 (索引鍵/值) | 欄位名稱和值。 資料行名稱為索引鍵。 資料行中的資料值為值。 | Microsoft.OperationalInsights/workspaces/tables/record:<key> |
以下是細微 RBAC 角色指派條件的範例螢幕擷取畫面,其中使用無權存取資料,但允許的資料除外方法,這是使用 Azure 入口網站所設定的方法。
透過在您設定其條件進行比對的範圍內設定細微 RBAC 角色指派,來減少複雜度。 例如,如果您的自訂角色是在資源群組範圍內指派的,則其他工作區可能沒有您運算式中指定的資料表或資料行資源,從而導致您的條件意外套用。
不過,如果您在數據表層級設定角色指派的條件,則必須建立兩個角色,如下所示:
- 角色 1:Action:表格工作區的
Microsoft.OperationalInsights/workspaces/query/read。 - 角色 2:DataAction:此工作區內資料表的
Microsoft.OperationalInsights/workspaces/tables/data/read。 使用數據動作定義角色的條件。
為了避免建立兩個角色,使用最簡單的方法是在工作區指派角色並設定條件來控制數據表層級。
如需詳細資訊,請參閱 Azure RBAC 範圍層級。
運算式運算子
細微 RBAC 運算式會使用屬性型存取控制 (ABAC) 運算子的子集。
數據表名稱屬性支援四個運算元。 這些運算子可讓您在設定條件時彈性地比對數據表名稱的值。
| ABAC 運算子 | 說明 |
|---|---|
StringEquals |
區分大小寫的比對。 這些值必須完全符合字串。 |
StringNotEquals |
StringEquals 的否定。 |
ForAllOfAnyValues:StringEquals |
邏輯上相當於 in()。 如果左側的每一個值都符合右側至少一個值的比較,則運算式會評估為 true。 |
ForAllOfAllValues:StringNotEquals |
邏輯上相當於 !in()。 如果左側的每個值都符合右側至少一個值的比較,則表達式會評估為 false。 |
Log Analytics 中針對數據行值定義的 ABAC 條件是以該數據行中的數據為基礎。 只能比較字串數據類型。 對於資料列層級存取屬性,任何轉換都完全基於 KQL 行為。
下列表格顯示支援的 ABAC 運算式運算子。 為了更加清楚,在此列出相對應的 Kusto 運算符。
| ABAC 運算子 | Kusto 對等運算子 | 說明 |
|---|---|---|
StringEquals / StringEqualsIgnoreCase |
== / =~ |
區分大小寫的 (或不區分大小寫的) 比對。 這些值必須完全符合字串。 |
StringNotEquals / StringNotEqualsIgnoreCase |
!= / !~ |
StringEquals (或 StringEqualsIgnoreCase) 的否定。 |
StringLike / StringLikeIgnoreCase |
has_cs / has |
區分大小寫的 (或不區分大小寫的) 比對。 運算子的右側 (RHS) 是左側 (LHS) 的整個字詞。 |
StringNotLike / StringNotLikeIgnoreCase |
!has_cs / !has |
StringLike (或 StringLikeIgnoreCase) 運算子的否定 |
StringStartsWith / StringStartsWithIgnoreCase |
startswith_cs/ startswith |
區分大小寫的 (或不區分大小寫的) 比對。 值會以字串開頭。 |
StringNotStartsWith / StringNotStartsWithIgnoreCase |
!startswith_cs / !startswith |
StringStartsWith (或 StringStartsWithIgnoreCase) 運算子的否定。 |
ForAllOfAnyValues:StringEquals / ForAllOfAnyValues:StringEqualsIgnoreCase ForAllOfAllValues:StringNotEquals / ForAllOfAllValues:StringNotEqualsIgnoreCaseForAnyOfAnyValues:StringLikeIgnoreCase |
In / In~ !in / !in~ has_any |
'ForAllOfAnyValues:<BooleanFunction>' 支援多個字符串和數位。
如果左側的每個值都符合右側至少一個值的比較,則表達式會評估為 true。 |
ABAC 條件不直接設定在函式上。 如果您在數據表上設定條件,則會傳播至任何依賴該條件的函式。 如需運算符和詞彙的詳細資訊,請參閱 字串運算元。
小提示
使用轉換來擴充數據、變更數據類型和變更案例,以更符合您的 ABAC 運算式。 如果您的數據不支援您想要套用的條件,轉換也是解決方案。 例如,若要將條件套用至高基數的數據,例如IP範圍,請使用轉換操作,依據子網名稱將所選子網的IP群組化。
如需詳細資訊,請參閱 Azure 監視器中的數據收集轉換。
考慮事項
在 Log Analytics 中使用細粒度 RBAC 時,有幾個考量需要注意。 下列各節提供細節。
- 具細微粒度的 RBAC 可在公用雲端、Azure 商業 (GCC)、Azure 中國中使用。
Azure 監視器
- 搜尋作業和摘要規則是針對細微的 RBAC 支援進行規劃,但不會進行數據匯出。 針對所有這些體驗,如果查詢數據表沒有完整存取權,則用戶無法設定搜尋作業或規則並收到錯誤。
- 警示:僅支援受控識別型記錄警示。
- Application Insights:僅支援以工作區為基礎的 Application Insights。
Microsoft Sentinel
使用搜捕、書籤、分析規則和事件,從原始資料表複寫資料時,複寫的資料不會受到 ABAC 條件的保護。
Azure ABAC 和 RBAC
一般的 Azure RBAC 和 ABAC 限制均適用。 例如,每個訂用帳戶角色指派上限的閾值是 RBAC 的 Azure 服務限制。 Azure ABAC 會限制每個條件的運算式數目,以及 KB 中條件的整體大小。 如需詳細資訊,請參閱下列文章:
稽核和監視
角色指派的變更會記錄在 Azure 活動記錄中。 數據表中的LAQueryLogs使用者查詢指出查詢是否在ConditionalDataAccess列中使用了適用的 ABAC 存取條件來執行。 使用 Log Analytics 工作區中的診斷設定來啟用記錄。 如需詳細資訊,請參閱 Azure 監視器記錄診斷設定。
常見問題
我正在透過資源內容存取記錄。 是否可以強制執行我的條件?
系統會針對資源內容查詢強制執行 RBAC 和 ABAC,但需要包含資源記錄的工作區才能滿足下列必要條件:
- 將所有相關工作區的 訪問控制模式 設定為 [需要工作區許可權]。
如果設定為 [使用資源或工作區許可權],指派給資源的 Azure 讀取許可權會提供所有記錄的存取權。 工作區和 ABAC 權限會被忽略。 - 在所有相關工作區上設定 ABAC。
如需詳細資訊,請參閱 管理 Log Analytics 工作區的存取權、存取模式。
匯出數據表時,細微的 RBAC 條件是否持續存在?
細微 RBAC 條件只會在查詢上強制執行。 例如,使用工作區數據匯出功能成功匯出的數據不會維護目標數據表數據的 ABAC 條件。
如何根據數據分類來設定存取權?
若要實作 Bell-LaPadula 樣式存取模型,您必須明確設定 ABAC 條件以堅持準則,例如 向下讀取。 例如,具有最高密碼許可權的使用者必須明確設定秘密、機密和未分類等較低層級的許可權,以確保他們可以存取低於其最高指派層級的數據。