请考虑以下有关 ABAC 策略设计和标记治理的最佳做法。
标准化属性和命名
在创建策略之前建立一致的标记分类。 协调跨团队的标签密钥名称、允许值和命名约定。 与临时标记的激增相比,一组定义完善的小型标记更易于管理。
例如,将单个sensitivity标记与受控值(public、、internalconfidential、restricted)而不是多个重叠标记(例如is_sensitive,data_class和pii_level)一起使用。
控制谁可以设置标记
标记是 ABAC 中的安全边界。 如果用户可以更改数据资产上的标记,他们可以更改应用于它的策略。 错误或缺失的标记会使数据不受保护或不可访问,因为策略仅在正确的标记到位时才适用。
为未分类的数据设置回退规则
不要假定所有对象都已正确标记。 使用自动化来强制实施标记标准并实现未分类数据的回退机制:
- 将默认限制性标记(如
classification : unverified)应用于新对象,直到数据专员审阅它们。 - 创建一个策略,用于限制对具有默认标记的对象的访问。
有关详细示例,请参阅 在标记敏感列之前阻止访问。
在最适用的范围内定义策略
尽可能在目录或架构级别附加策略。 表级策略很少见,应是例外。
目录范围的策略针对目录中的所有表进行评估,架构范围的策略针对架构中的所有表进行评估。 添加新表时,只要现有策略的标记与策略的条件匹配,现有策略就适用。
避免策略泛滥
ABAC 旨在减少访问控制规则的数量,而不是增加它们。 如果团队创建过多的标记和策略,则很难管理和审核结果。
- 在创建策略之前分析治理要求。
- 从少量广泛的策略开始,例如跨目录或区域行筛选的 PII 掩码。
- 避免为每个边缘情况创建单独的策略。
- 定期查看策略并合并重叠的策略。
大量策略和复杂条件可能会降低授权检查速度。 有关详细信息,请参阅 性能注意事项 。
首选 TO/EXCEPT 作为主体目标
对于行筛选器和列掩码策略,请使用策略和TOEXCEPT子句来定义策略适用的用户和组。 这让 UDF 逻辑保持简单。 该 EXCEPT 子句完全排除策略中的特定用户,因此它们不受任何筛选或掩码的约束。 当需要复杂的条件逻辑时,标识函数(如 is_account_group_member() UDF 内部)将保持有效选项。
对于 GRANT 策略(Beta), TOEXCEPT 是针对主体的唯一机制,因为 GRANT 策略不使用 UDF。
有关详细信息,请参阅 面向主体的方法。
动态策略评估计划
ABAC 策略是动态的。 与表级行筛选器和列掩码(在表定义上直接可见)不同,ABAC 策略在查询时根据用户的标识和组成员身份以及策略范围中的数据对象上的标记进行评估。 这使得数据使用者和表所有者更难理解哪些访问规则适用于给定表。
- 用于
SHOW EFFECTIVE POLICIES确定适用于特定表的内容。 - 记录标记分类、策略和组管理方法,以便团队无需单独检查每个策略即可了解治理模型。
- 如果透明度对于特定表至关重要,请考虑为该独立情况使用 表级行筛选器和列掩码 。 请确保首先解决可能的冲突。
了解详细信息
| Topic | Description |
|---|---|
| 性能注意事项 | ABAC 策略设计如何影响查询性能,以及如何优化和测试策略。 |
| 何时使用 ABAC 与表级行筛选器和列掩码进行比较 | 范围、所有权以及如何在两种方法之间进行选择的差异。 |
| OpenSharing 和 ABAC | 如何通过 OpenSharing 共享 ABAC 保护的表、处理收件人端策略和设置收件人本地视图。 |
| 将 RBAC 与 ABAC 配合使用 | 用户在 RBAC 下承担角色时 ABAC 策略的行为,包括标识函数行为(current_user()、is_member、is_account_group_member)和组合使用模式。 |