Fabric 1.2.1新特性,测试源码1.3 网络
fabric 使用访问控制列表,经过将策略(在给定一组身份的状况下指定评估为“真”或“假”的规则)与资源关联在一块儿的方式来管理对资源的访问。函数
访问控制的权限是通道管理级别的,没法对链码进行权限控制 工具
用户经过定位用户链代码user chaincode
, 系统链代码system chaincode
或事件流源events stream source
与Fabric进行交互。所以,这些端点被视为应在其上执行访问控制的“资源”。测试
这些资源在在configtx.yaml定义,lua
<component>/<resource>
// 系统链码cscc的资源(方法)GetConfigBlock
cscc/GetConfigBlock
复制代码
什么是策略spa
策略的类型code
Signature策略 SIGNATURE策略指定经过签名来对数据进行认证,例如数据必须知足必定的签名身份组合 这种策略比较灵活,主要定义MSP主体组合规范。在验证签名策略的基础上,支持AND、OR、NOutOf,能够构建如:‘An admin of org A and 2 other admins, or 11 of 20 org admins’等规范component
NOutOf指的是知足m个条件中的n个就表示知足策略(m≥n) 事件
Policies:
Readers:
Type: Signature
Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')"
Writers:
Type: Signature
Rule: "OR('Org1MSP.admin', 'Org1MSP.client')"
复制代码
ImplicitMeta策略 这种策略不如SignaturePolicy灵活,而且只在配置上下文中有效。它不直接进行签名检查,而是经过引用其子元素的策略(最终仍是经过Signature策略)来进行检查 检查结果又Rule限制,它支持默认规则,如:‘A majority of the organization admin policies’ip
Policies:
AnotherPolicy:
Type: ImplicitMeta
Rule: "MAJORITY Admins"
# ANY 知足任意子组的对应策略
# ALL 知足全部子组的对应策略
# MAJORITY 知足过半子组的对应策略
message ImplicitMetaPolicy {
enum Rule {
ANY = 0; // 任意子策略被知足便可
ALL = 1; // 全部子策略都必须知足
MAJORITY = 2; // 超过一半的子策略被知足
}
string sub_policy = 1; // 在子元素中查找的子策略名称
Rule rule = 2; // 限制规则为MAJORITY
}
复制代码
默认定义
更新访问控制列表
在configtx.yaml中更新ACL默认值
ACL定义默认值
ACL被定义为键值对格式,由资源名称后跟描述相应策略的字符串组成。
默认资源与其对应的访问限制策略由系统定义,在fabric/sampleconfig/configtx.yaml文件中有样例介绍
ACL更新须要在配置文件configtx.yaml中定义ACL以覆盖默认访问控制列表
ACL键值对定义(访问控制列表定义)位置
Application: &ApplicationDefaults
ACLs: &ACLsDefault
# 在peer节点提交链码的ACL策略
peer/Propose: /Channel/Application/Writers
# 发送区块事件的ACL策略
event/Block: /Channel/Application/Readers
# 这些ACL定义对‘peer/Propose’和‘event/Block’资源的访问限制为知足‘/Channel/Application/Writers’和‘ /Channel/Application/Readers’定义的策略
复制代码
策略定义位置
# 策略能够在下列位置定义
# /Channel/Application/<PolicyName>
# /Channel/Orderer/<PolicyName>
# /Channel/<PolicyName>
# /Channel/<Application|Orderer>/<OrgName>/<PolicyName>
Policies:
Readers:
Type: Signature
Rule: "OR('Org2MSP.admin', 'Org2MSP.peer', 'Org2MSP.client')"
Writers:
Type: Signature
Rule: "OR('Org2MSP.admin', 'Org2MSP.client')"
Admins:
Type: Signature
Rule: "OR('Org2MSP.admin')"
其中"/Channel/<Application|Orderer>/<OrgName>/<PolicyName>"
只能定义(修改)默认的 Readers、Writers、Admins
定义其余会报以下错误:
# code = Unknown desc = failed evaluating policy on signed data during check policy [/Channel/Application/Org1MSP/MyPolicy1]: [policy /Channel/Application/Org1MSP/MyPolicy1 not found] - proposal response: <nil>
复制代码
修改ACL
# 首先在configtx.yaml的上述Policies位置处定义新的策略MyPolicy,如:
Policies:
Readers:
Type: ImplicitMeta
Rule: "ANY Readers"
MyPolicy:
Type: Signature
Rule: "OR('SampleOrg.admin')"
# 而后在ACLs下修改对应资源的访问限制策略
peer/Propose: /Channel/Application/Writers
改成
peer/Propose: /Channel/Application/MyPolicy
# 在configtx.yaml中修改好访问控制配置后,configtxgen工具将使用在configtx.yaml中定义的策略和ACL建立通道配置
# 同时,还能够在某个通道配置设置专有的访问控制路径或者覆盖其余ACL值
SampleSingleMSPChannel:
Consortium: SampleConsortium
Application:
<<: *ApplicationDefaults
ACLs:
<<: *ACLsDefault
event/Block: /Channel/Application/MyPolicy
# 此处将覆盖ACLsDefault中定义的event/Block资源对应的访问限制策略
复制代码
通道策略默认值
# 全局默认策略
/Channel/Readers : ImplicitMetaPolicy for ANY of /Channel/*/Readers
/Channel/Writers : ImplicitMetaPolicy for ANY of /Channel/*/Writers
/Channel/Admins : ImplicitMetaPolicy for MAJORITY of /Channel/*/Admins
# 应用通道默认策略(仅当前应用通道)
/Channel/Application/Readers : ImplicitMetaPolicy for ANY of /Channel/Application/*/Readers
/Channel/Application/Writers : ImplicitMetaPolicy for ANY of /Channel/Application/*/Writers
/Channel/Application/Admins : ImplicitMetaPolicy for MAJORITY of /Channel/Application/*/Admins
# 系统通道默认策略
/Channel/Orderer/Readers : ImplicitMetaPolicy for ANY of /Channel/Orderer/*/Readers
/Channel/Orderer/Writers : ImplicitMetaPolicy for ANY of /Channel/Orderer/*/Writers
/Channel/Orderer/Admins : ImplicitMetaPolicy for MAJORITY of /Channel/Orderer/*/Admins
# 应用通道中各组织默认策略(仅当前应用通道)
/Channel/Application/Org/Readers : SignaturePolicy for 1 of MSP Principal Org Member
/Channel/Application/Org/Writers : SignaturePolicy for 1 of MSP Principal Org Member
/Channel/Application/Org/Admins : SignaturePolicy for 1 of MSP Principal Org Admin
# 系统通道中各组织默认策略
/Channel/Orderer/Org/Readers : SignaturePolicy for 1 of MSP Principal Org Member
/Channel/Orderer/Org/Writers : SignaturePolicy for 1 of MSP Principal Org Member
/Channel/Orderer/Org/Admins : SignaturePolicy for 1 of MSP Principal Org Admin
#联盟组的默认策略(仅当系统通道)
/Channel/Consortiums/Admins: SignaturePolicy for ANY
#联盟的默认策略(仅当系统通道)
/Channel/Consortiums/Consortum/ChannelCreationPolicyIrrplic: ImplicitMeta-Policy-ANY for Admin
#联盟中组织的默认策略(仅当系统通道)
/Channel/Consortiums/Consortium/Org/Readers: SignaturePolicy for 1 of MSP Org Meber:ImplicitMetaPlicy-ANY for Admin
/Channel/Consortiums/Consortium/Org/Writers: SignaturePolicy for 1 of MSP Org Member
/Channel/Consortiums/Consortium/Org/Admins : SignaturePolicy for 1 of MSP Org Admin
复制代码