Hyperledger fabric Hyperledger结构中的动态访问控制

Hyperledger fabric Hyperledger结构中的动态访问控制,hyperledger-fabric,hyperledger,Hyperledger Fabric,Hyperledger,我正在使用Hyperledger Fabric,并在Golang中开发链码。我有以下用例,不确定如何在Fabric中实现这一点 假设我有Bank1、Bank2和Bank3对等组织。我想设计一个系统,每个系统存储客户信息(客户是银行账户持有人)。通常,我不希望Bank2访问Bank1的客户机——但如果客户机以某种方式调用某个函数调用,Bank2应该能够从Bank1获取该客户机的信息(假设所有银行共享一个通道) 如何在链码中实现类似的功能 我已经看过ABAC了,我不知道如何更新组织的属性以允许访问特

我正在使用Hyperledger Fabric,并在Golang中开发链码。我有以下用例,不确定如何在Fabric中实现这一点

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

如何在链码中实现类似的功能

我已经看过ABAC了,我不知道如何更新组织的属性以允许访问特定的客户机,因为他们已经采取了行动


谢谢

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

另一个不必在区块链之外实施的解决方案是使用私有数据收集,这是对1.2版结构的改进。更多信息请点击此处:

更新:


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

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

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

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

更新2:

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


简短回答:是的,这是可能的。无论写在区块链中的内容是什么,都可以被对等方的管理员和任何控制私钥的人阅读但是这里是架构发挥作用的地方:如果你不需要在区块链中写东西,就不要写。这取决于你想要区块链做什么。如果只是为了证明某个信息已被共享,只需保存必要的信息:“bankA与bankC共享有关userB的信息”。实际信息不必保存在区块链中。如果你需要将信息保存在区块链中,并且你想保持信息的私密性,我认为最好的解决方案是使用私密数据收集,并且要注意,事实上私密数据不受共识的约束,因为私密数据只保存在私密交易所涉及的对等方/组织的侧数据库中,不是在每个对等机中。

从链码调用外部API安全吗?我如何维护密钥/令牌?为了使用私有数据实现这一点,是否可能在
客户机
结构中有一个字符串数组作为银行的标识符,并且客户机可以调用函数以允许更多银行,当银行试图查询<代码>客户机<代码>时,代码会检查该数组是否包含银行的标识符?另一个问题是,组织中的某人是否可以直接“查询”分类账或读取其状态,而不是通过链码?因为在这种情况下,链码中的访问控制逻辑不再重要,如果他们愿意,他们仍然可以读取信息