这是一个很好的问题。一个简短的回答是:这取决于您的用例。这里没有对与错。您可以在单个策略甚至单个规则中保护所有 API。
也就是说,请考虑整个策略生命周期:
- 需求收集
- 政策设计
- 政策创作
- 政策评估
- 政策审核
- 政策协调
在每个阶段,谁负责?同一群人?不同的球队?您希望如何在您的公司中扩大 XACML 的使用范围?您想要一个中央创作团队吗?当您需要支持 10、100、1000 个 API 时,这会起作用吗?答案很可能是否定的。
这意味着您希望让 API 所有者编写他们自己的策略。他们可以选择他们在政策中定义的内容,允许的内容,不允许的内容。
然后,您想拥有一个“策略打包者”角色。该人收集并汇总所有已编写的策略。有不同类型的政策:
- 应用程序策略(由 API 所有者编写的)
- 运营政策(关于全球检查的政策,例如上午 9 点之前禁止访问或来自流氓国家的禁止访问......)
- 合规和监管政策(关于 HL7、PCI-DSS 和其他法规的政策)
在全局策略集中,您可以组合策略(或策略集,因为策略集可以包含策略集)。您可以选择您的组合算法来满足您的需要。一个典型的就是first-applicable
。这意味着无论哪个政策/规则首先应用,都会在总体上获胜。一个更保守的选择是deny-unless-permit
,它拒绝所有请求,除非策略明确允许访问。
回到您的具体示例,根据过去的经验,我很想编写 3 个不同的策略,每个 API 一个。您可以使用策略引用和策略集引用来链接和重用策略。
Axiomatics(免责声明:这是我工作的公司)提供有关 XACML 和基于属性的访问控制的研讨会。