区块链Fabric策略管理和访问控制

策略定义以及分类
Fabric网络中,有很多的地方使用策略进行管理,策略管理是一种权限管理的方法

Fabric支持下列三种策略:
交易背书策略
链码实例化策略
通道管理策略

策略类型有下列两种:
SignaturePolicy:在基于验证签名策略的基础上,支持条件AND、OR、NOutOf的任意组合,其中 NOutOf 指满足m个条件中的n个就表示满足策略(m>=n)。

ImplicitMetaPlicy:隐含的元策略,是在SignaturePolicy之上的策略,支持大多数组织管理员,只适合通道管理策略。

支持3种策略的规则:

  1. ImplicitMetaPolicy_ANY:任意一个子规则成立就满足策略。

  2. ImplicitMetaPolicy_ALL:全部子规则都成立才满足策略。

  3. ImplicitMetaPolicy_MAJORITY:大多数子规则成立就满足策略,计算规则是 threshold=len(subPolicies)/2+1

交易背书策略

发起交易的时候,发起端(一般是SDK),需要指定交易发给哪些节点进行背书验证(fabric不会自动发送),而是由sdk发送。发送后等待背书节点的返回,收集到足够的背书后将交易发送给orderer(排序节点或称共识节点)进行排序打包分发。最后,当每个Peer接受到block数据后,会对其中的交易进行验证,如果交易不符合背书策略,就不会在本地生效,所以真正验证背书是在这一步

背书策略有两个主要组成部分:

主体(principal):P定义了期望的签名来源实体 门槛(threshold
gate):T有两个参数:整数t(阈值)和n个主体,表示从这n个主体中获取t个签名

例如: T(2, ‘A’, ‘B’, ‘C’)表示需要A、B、C中任意2个主体的签名背书 T(1, ‘A’, T(2, ‘B’,
‘C’))表示需要来自主体A的签名或者来自B和C两者的签名背书

策略可以在部署时通过键 -P 来指定

例如: peer chaincode deploy -C testchainid -n mycc -p
github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
-c ‘{“Args”:[“init”,”a”,”100”,”b”,”200”]}’ -P “AND(‘Org1.member’,
‘Org2.member’)”

该命令使用 AND(‘Org1.member’, ‘Org2.member’) 策略,将chaincode mycc
部署到链testchain上。

链码实例化策略
链码实例化策略是用来验证是否有权限进行链码实例化和链码升级

什么时候配置链码实例化策略?
链码实例化策略在对链码进行打包和签名的时候指定,如果没有指定实例化策略,默认是通道的管理员才能实例化

什么时候验证链码实例化策略?
链码实例化策略的定义和背书策略完全一样,验证方法也相同,只是用途和用法不一样。链码实例化策略是直接在链码打包的时候获取的,实例化完成之后将策略存放到链上,在链码实例化和升级的时候会先验证是否符合当前的实例化策略,验证通过之后才可能更新链码实例化策略

区块链Fabric策略管理和访问控制_第1张图片
通道管理策略
通道配置是递归定义的,配置策略是基于SignaturePolicy和ImplicitMetaPlicy,通道定义了三种配置策略
区块链Fabric策略管理和访问控制_第2张图片通道管理策略

通道配置的递归定义:
1.最外层的是Channel,它定义了通道的子配置和策略定义,Channel的子配置里面定义Orderer和Application配置,它们分别是相同的递归定义结构。其中“----------->”显示的以后按照层级展开,代表的是/Channel/Application/Writers。

2.怎么来使用这些配置策略呢?比如在排序服务节点调用Deliver接口的时候会检查这个节点是否满足/Channel/Readers策略,Peer节点同步区块的时候会检查是否满足/Channel/Application/Readers策略。

区块链Fabric策略管理和访问控制_第3张图片

你可能感兴趣的:(区块链,区块链)