Hyperledger Fabric中的动态访问控制

问题描述 投票:1回答:1

我正在使用Hyperledger Fabric,并在Golang中开发Chaincode。我有以下用例,我不知道如何在Fabric中实现它。

假设我有Bank1,Bank2和Bank3对等组织。我想设计一个系统,每个系统都存储客户信息(客户是银行账户持有人)。通常情况下,我不希望Bank2访问Bank1的客户端 - 但如果客户端以某种方式调用某个函数调用,bank2应该能够从bank1获取该客户端的信息(假设所有银行共享一个通道)

如何在链码中实现这样的效果?

我看过ABAC,我不知道如何更新组织的属性以允许基于他们采取行动访问特定客户端

谢谢

hyperledger-fabric hyperledger
1个回答
1
投票

一种解决方案可以是在区块链之外拥有私人信息,并使每个银行能够通过API直接从您的链码查询其私人信息,并在通过链码调用共享信息的所有银行之间拥有共享信道。当然,所有API都必须是安全的,只能由它自己的银行查询。

另一个不必从区块链中实现的解决方案就是使用私有数据集合,这是对1.2版本中Fabric的改进。更多信息:https://hyperledger-fabric.readthedocs.io/en/release-1.2/private-data/private-data.html

更新:

从链码调用外部apis是否安全?我如何维护密钥/令牌?

是的,只要您保护通信和终端,这是安全的。一个简单的解决方案是将您的节点和私有数据存储在防火墙内的同一网络中。这样,您就不必担心应用程序内部的安全性。

要使用私有数据实现这一点,是否可能有一个字符串数组,这些字符串是Client结构中银行的标识符,客户端可以调用函数以允许更多的银行,当银行尝试查询客户端时,代码检查该数组是否包含银行的标识符?

在我看来,你是在正确的方向,但我会把它实现为一个JSON文件,而不是一个带有访问规则的数组,说明对于BankA,BankB可以访问这个和那个函数等等,还有你可以设置信息中的可见性级别,然后实现在链代码中读取和使用该配置的逻辑。在生产中,每个节点都必须有自己的配置文件,但是对于开发,您可以拥有包含所有规则的单个配置文件。

更新2:

组织中的某个人是否可以“查询”分类帐或直接读取其状态而不是通过链代码?

简短的回答:是的,这是可能的。无论在区块链中写入什么,对等的管理员以及任何控制私钥的人都可以读取。但这里是架构发挥作用的地方:如果你不需要区块链中写的东西,就不要写它。这取决于你想要的区块链。如果只是为了证明信息已被共享,只需保存必要的信息:'bankA与bankC共享有关userB的信息'。实际信息不必保存在区块链中。如果您需要在区块链中获取信息并且您希望将其保密,我认为最好的解决方案是使用私有数据集合,并且要注意事实上私有数据不会达成共识,因为私有数据会保存在侧DB仅在私有事务中涉及的对等体/组织中,而不是在每个对等体中。

© www.soinside.com 2019 - 2024. All rights reserved.