Architecture 如何在聚合来自自治服务的数据时强制实施安全策略?

Architecture 如何在聚合来自自治服务的数据时强制实施安全策略?,architecture,soa,Architecture,Soa,当使用请求/重播通信时,很容易实施数据安全策略,因为拥有数据的服务可以对每个请求执行检查——当然,这会破坏自治性,因为它引入了时间耦合,服务SLA依赖于其他服务 如果使用自治服务,则与权威服务相关的数据子集将存储在订阅相关事件的多个其他自治服务中 如何确保服务使用并随后发布数据子集和/或其转换遵守原始权威服务的安全策略 我考虑的一个解决方案是创建策略服务,但: 如果策略服务以请求/应答方式运行,性能将下降,我还可以对数据本身使用请求/应答 如果策略服务发布与策略更改相关的事件,则必须存在对受该策

当使用请求/重播通信时,很容易实施数据安全策略,因为拥有数据的服务可以对每个请求执行检查——当然,这会破坏自治性,因为它引入了时间耦合,服务SLA依赖于其他服务

如果使用自治服务,则与权威服务相关的数据子集将存储在订阅相关事件的多个其他自治服务中

如何确保服务使用并随后发布数据子集和/或其转换遵守原始权威服务的安全策略

我考虑的一个解决方案是创建策略服务,但:

如果策略服务以请求/应答方式运行,性能将下降,我还可以对数据本身使用请求/应答 如果策略服务发布与策略更改相关的事件,则必须存在对受该策略保护的数据进行操作的每个使用者实施该策略的代码-除非找到一种方法将策略代码和规则作为黑盒包分发给所有使用者,以供所有使用者使用复制策略的解决方案为所有消费者强制执行代码对我没有吸引力。。 在实施安全策略的同时,是否有关于实体数据聚合的最佳实践/建议

非常感谢

更新 我的问题是,即使服务边界正确,UI组合也会出现问题,因为它需要一个聚合数据存储,以便能够提供性能排序和筛选—Udi Dahan称之为it/Ops服务。 原因是每个服务中的每个组件只知道字段的子集,因此除非对数据进行聚合,否则无法有效地进行排序和筛选。 如果不需要排序,则每个服务组件将强制执行自己的策略。然而,即使如此,在某些情况下,我们可能会发现自己处于一种选择n+1的情况,没有聚合存储-我查看了Arnon Rotem Gal Oz针对这种情况所描述的。它没有提到安全性,我认为这意味着聚合报告服务中的安全策略重复

此外,发布/发布敏感信息是否还可以?此外,您发布的内容是合同的一部分,但如果政策发生变化,您将不再发布该信息-这将改变合同。。。正如我所说,req/reply很容易涵盖这一点


我很可能在所有方面都错了,所以我很感激你的任何想法-

我选择的解决方案是使用一个策略服务,它将充当使用者、权威服务和聚合器服务之间的中介。这样,安全策略只在一个地方实现:既不在权威服务中,也不在聚合器服务中,而是在策略服务中


UI组合将以请求/应答方式运行,并由策略服务进行调解。此外,对权威服务的订阅将基于角色,因此只有经过授权的使用者才能直接使用敏感消息。规则是,如果这些使用者公开数据,则需要通过相同的策略服务访问它们,这样它们就不会成为安全漏洞。

您可能会对每个响应进行签名或加密,然后在策略服务上存在密钥。然后,该密钥在给定的时间到期,并且当该密钥到期时,各个SLA必须请求一个新密钥。不太完美,但我认为它确实让你走上了正确的道路。@JessieA.Morris-这真的很有道理!但问题是,应该限制访问数据的不是服务本身,而是使用这些服务的人员。所以密钥可能应该分配给每个用户。@JessieA.Morris continuation我在想一些类似于你的建议但没有加密的东西。每次安全策略更改时,我都会让策略服务每天或每小时定期发布一个规范策略。基于用户的组织等因素,安全策略可能相当复杂。结构、职位、部门等,但规范策略始终会引用特定的用户列表。规范策略是否会过期。@JessieA.Morris continuation此方法的问题是,每个使用者都必须实现代码才能遵守规范策略。如果规范策略是过期的用户特定解密密钥,则情况也是如此。SVC仍然必须检查到期时间-区别在于,在我的案例中,强制执行将通过检查到期时间并根据授权列表检查用户,而在您的案例中,强制执行将检查到期时间并解密。所以我的问题还是,,
这是一种好的做法吗?它看起来很有创意,肯定有一些指导@杰西娅,莫里斯,当然,谢谢你的回答