权限管理是区块链网络十分重要的功能,负责控制某个身份在某个场景下是否允许采取某个操作(如读写某个资源)。
超级账本 Fabric 项目通过策略(Policy)来灵活指定各场景下的操作权限。
策略应用场景
具体来看,常见的策略场景包括如下表所示。其中,大部分都与系统配置链码相关,可以在通道配置中进行指定;部分为代码中的规定。
对于存储在通道配置中的策略,可以利用 configtx.yaml 指定,在生成新建通道交易时初始化到通道配置内。
操作场景 | 策略检查 | 相关实现文件 |
---|---|---|
调用 Broadcast() 接口向 Orderer 发送交易信息 | Orderer 会检查是否满足通道的 Writers 策略 | orderer/multichain/chainsupport.go |
调用 Deliver() 接口从 Orderer 获取区块结构 | Orderer 会检查是否满足通道的 Readers 策略 | orderer/common/deliver/deliver.go |
新建应用通道 | Orderer 会检查是否申请者满足系统通道的 Writers 策略 | orderer/multichain/chainsupport.go |
修改通道配置 | Orderer 会检查所有的修改项需满足对应的 modPolicy 策略,默认为 Admins | common/configtx/update.go |
Peer 加入应用通道 | 配置管理系统链码(CSCC)会检查申请者是否为某个 MSP 的管理员身份 | core/scc/cscc/configure.go |
Peer 获取所加入通道列表 | 配置管理系统链码(CSCC)会检查申请者是否为某个 MSP 的成员身份 | core/scc/cscc/configure.go |
获取某应用通道的区块 | 配置管理系统链码会检查是否满足应用通道的 Readers 策略 | core/scc/cscc/configure.go |
安装链码 | 链码生命周期管理系统链码(LSCC)会检查安装提案中签名者是否为本地 MSP 的 Admin 身份 | core/scc/lscc/lscc.go |
实例化部署链码 | 链码生命周期管理系统链码(LSCC)默认会检查提案者是否是通道内成员 | core/scc/lscc/lscc.go 和 core/committer/txvalidator/v20/plugindispatcher/dispatcher.go |
调用链码 | 背书节点在背书过程中会检查链码是否满足应用通道的 Writers 策略和 Readers 策略;确认节点也会检查交易是否满足背书策略 | core/endorser/endorser.go 和 core/scc/lscc/lscc.go |
Peer 通过 Gossip 协议获取到区块 | 对区块进行校验,检查需要满足 BlockValidation 策略 | peer/gossip/mcs.go |
监听事件 | Peer 会检查是否满足应用通道的 Readers 策略 | core/peer/deliverevents.go |
注:Readers、Writers、Admins、管理员、成员等都代表了一组事先定义的身份。
身份证书
实现权限管理的基础是身份证书机制。
通过基于 PKI 的成员身份管理,Fabric 网络可以对接入的节点和用户的各种能力进行限制。
Fabric 设计中考虑了三种类型的证书:登记证书(Enrollment Certificate)、交易证书(Transaction Certificate),以及保障通信链路安全的 TLS 证书。证书的默认签名算法为 ECDSA,Hash 算法为 SHA-256。
- 登记证书(ECert):颁发给提供了注册凭证的用户或节点等实体,代表网络中身份。一般长期有效。
- 交易证书(TCert):颁发给用户,控制每个交易的权限,不同交易可以不同,实现匿名性。短期有效。
- 通信证书(TLSCert):控制对网络层的接入访问,可以对远端实体身份进行校验,防止窃听。