Important
這項功能目前處於 公開預覽版。
此頁面描述 Unity 目錄中的屬性型存取控制 (ABAC)。
什麼是 ABAC?
ABAC 是一種數據控管模型,可提供跨 Azure Databricks 的彈性、可調整和集中式訪問控制。 ABAC 藉由允許根據套用至數據資產的受控標籤來定義原則,以補充 Unity 目錄的現有許可權模型。 這簡化了治理並增強了安全性。
具有 MANAGE 許可權或對象擁有權的使用者只需要定義原則一次,而且可以一致地套用至許多數據資產。 原則會附加在目錄、架構或數據表層級,並自動套用至該範圍內的所有數據表。 在較高層級定義策略時,它們會向下繼承至子物件。 數據資產的受控標籤會決定強制執行哪些原則,允許訪問控制動態調整。
ABAC 的優點
- 延展性: 利用標記而非個別許可權,大規模管理訪問控制。
- 靈活性: 藉由更新標籤或原則來輕鬆調整控管,而不需修改每個數據資產。
- 集中式治理: 透過跨越目錄、架構和數據表的統一模型簡化原則管理。
- 改善的安全性: 根據數據屬性動態強制執行精細的訪問控制。
- 稽核性: 透過完整的稽核記錄,維護資料存取的即時可見度。
ABAC 的運作方式
Unity 目錄中的 ABAC 會使用受控的標籤、原則和使用者定義函式 (UDF) 來強制執行動態屬性型存取控制。 下列元件和機制是 ABAC 的核心:
控管的標籤: 控管的標籤是透過標籤策略在帳戶層級定義。 這些標記代表數據敏感度、分類或商務網域等屬性,並指派給 Unity 目錄中的數據表、架構或目錄。 它們作為推動政策執行的屬性。 請參閱受 控管的標籤 和 將標籤套用至 Unity 目錄安全性實體物件。
政策: 政策會在 Unity Catalog 內的三個階層式層級建立和管理:
- 目錄層級: 套用影響所有所包含結構和數據表的廣泛政策。
- 架構層級: 套用架構及其數據表特有的原則。
- 數據表層級: 直接在個別數據表上套用精細的原則。
原則會遵循 繼承模型:在目錄或架構層級定義原則時,會自動套用至該範圍內的所有子對象、架構和數據表。 這可讓管理員透過套用單一原則來控管大型資料資產集,以實作有效率的治理。 繼承的政策可減少冗餘,並在整個數據階層中促進一致的執行。 Databricks 建議在最高適用層級定義原則,通常是目錄,以將治理效率最大化,並減少系統管理額外負荷。 請參閱 建立和管理屬性型訪問控制 (ABAC) 原則。
使用者定義函式 (UDF): UDF 是定義於架構層級的自定義函式,而且可以在 Unity 目錄命名空間之間全域參考。 UDF 會在原則內用來表示複雜的邏輯,例如根據屬性篩選數據列或遮罩數據行值。 例如,名為
filter_region的 UDF 可能會用於篩選行的原則,只傳回符合region = 'EMEA'條件的行。 請參閱 Unity 目錄中的使用者定義函式 (UDF)。動態強制執行: 當用戶嘗試存取標記的數據資產時,Unity Catalog 會根據標記評估適用的原則,並強制執行定義的訪問控制。
從原則中被明確排除的使用者可以繼續對基礎資料執行動作,例如進行深度和淺層複製,以及時間旅行。 但是,未從 ABAC 策略中排除的使用者將受到 適用於細粒度存取控制的相同限制的約束。
稽核記錄: 標記數據資產的所有作業都會擷取並記錄在稽核記錄系統日誌表中,以便於全面的可見性和合規性追蹤。 請參閱 稽核記錄。
若要瞭解如何設定 ABAC,請參閱 教學課程:設定 ABAC。
如需設定 ABAC 的示範,請參閱使用 Unity 目錄探索 Attribute-Based 存取控制 (ABAC)。
原則類型
支援兩種類型的 ABAC 規範:
數據列篩選原則 會根據其內容限制對數據表中個別數據列的存取。 篩選 UDF 會評估使用者是否應該看到每個數據列。 當存取取決於數據特性時,這些原則很有用。
範例使用案例: 只會在客戶交易資料表中顯示資料列,其中區域資料列符合所控管的標記,例如
region=EMEA。 這可讓區域團隊只看到與其區域相關的資料。數據行遮罩原則 可控制使用者在特定數據行中看到的值。 遮罩功能的 UDF 可以根據管控的標籤返回實際值或經過修訂的版本。
範例使用案例: 遮罩包含電話號碼的數據行,除非已標記
sensitivity=low數據表或要求的用戶位於合規性群組中。 沒有存取權的使用者會看到空值或預留位置值,例如XXX-XXX-XXXX。
局限性
- 您必須在 Databricks Runtime 16.4 或以上版本使用運算,或無伺服器運算,才能存取由 ABAC 保護的資料表。 不受該政策約束的使用者可以使用任何執行環境。
- 你不能直接將ABAC政策套用在觀看次數上。 然而,當你查詢基於具有 ABAC 政策的資料表的檢視時,檢視擁有者的身份與權限會被用來評估這些政策。 這意味著:
- 視圖擁有者必須對底層 ABAC 保護的資料表擁有適當的權限。
- 資料存取權是根據視圖擁有者的權限來評估的。 當使用者查詢檢視時,他們會看到篩選或遮罩的資料,這些資料呈現的方式與檢視擁有者所見相同。
- 行為可能會因你的運算設定而異。 詳情請參見 查詢視圖要求。
- 只有在政策對管線擁有者豁免的情況下,才支持具體化視圖和串流資料表的政策。
- 使用者可以共享由 ABAC 原則管理的 Delta 表,前提是他們具有必要的 Delta 分享許可權且不受 ABAC 原則的限制。 此原則不會控管收件者的存取權。 針對共享提供者,請參閱 將由 ABAC 原則保護的數據表和架構添加到共享。 關於分享接收者,請參閱 閱讀 ABAC 安全資料並套用 ABAC 政策。
- 對於特定資料表和特定使用者,執行時只能解析一個不同的列過濾器。 你可以定義多個列篩選策略,但當使用者查詢資料表時,只有一個策略的條件必須相符。 如果同一使用者和資料表同時被多個不同的列過濾器套用,Azure Databricks 會阻擋存取並拋出錯誤。 若多個策略產生相同過濾器(例如相同 UDF 且參數相同),則允許使用。 請參閱 多個篩選器或遮罩的故障排除。
- 在執行時,對於同一欄位和特定使用者,只有唯一的欄位遮罩會被解析。 你可以定義多個欄位遮罩政策,但當使用者查詢資料表時,每欄只需符合一個政策的條件。 如果同一使用者的同一欄位同時套用多個不同的欄位遮罩,Azure Databricks 會阻擋存取並拋出錯誤。 若多個策略產生相同遮罩(例如相同 UDF 與相同參數)則允許使用。 請參閱 多個篩選器或遮罩的故障排除。
- ABAC 政策的
MATCH COLUMNS子句中最多可以包含三個資料行條件。 - 你無法從透過 ABAC 策略套用列篩選或欄遮罩的表格中建立向量搜尋索引。
- ABAC 政策沒有資訊結構表。
information_schema.row_filters與information_schema.column_masks表格僅顯示直接套用到資料表的列過濾器和欄位遮罩。 它們不會在執行時顯示 ABAC 政策定義,或是從 ABAC 政策衍生出的過濾器與遮罩。 - 如需了解 ABAC 在專用運算上的限制,請參閱 限制。
有關資料列篩選器和資料行遮罩的限制,請參閱 限制。