Hyperledger fabric 当尝试将对等方加入到频道时,“;本政策要求';读者';要满足的子策略:拒绝许可“;发生错误

Hyperledger fabric 当尝试将对等方加入到频道时,“;本政策要求';读者';要满足的子策略:拒绝许可“;发生错误,hyperledger-fabric,hyperledger,Hyperledger Fabric,Hyperledger,我正在尝试Fabric v2.2,但由于某些策略问题(我猜),未能加入对等通道。为了获得订购方和对等方的MSP,我使用订购方组织和对等方组织(有一个对等方组织)的CAs 我认为MSP还可以,因为网络运行良好 然后,我启动了一个CLI容器并创建了一个名为identitych的频道。我认为它工作得很好,因为我检查了所有订购者的chains目录下创建的identitych目录 之后,当我提议使用以下命令将对等方连接到通道时,由于权限被拒绝,订购方无法向对等方交付块,并且由于禁止的问题,对等方无法从订购

我正在尝试Fabric v2.2,但由于某些策略问题(我猜),未能加入对等通道。为了获得订购方和对等方的MSP,我使用订购方组织和对等方组织(有一个对等方组织)的CAs

我认为MSP还可以,因为网络运行良好

然后,我启动了一个CLI容器并创建了一个名为
identitych
的频道。我认为它工作得很好,因为我检查了所有订购者的
chains
目录下创建的
identitych
目录

之后,当我提议使用以下命令将对等方连接到通道时,由于权限被拒绝,订购方无法向对等方交付块,并且由于禁止的问题,对等方无法从订购方检索块

peer channel join -b /channel-artifacts/identitych.block
我的
configtx.yaml
文件如下所示:

组织:
-&BPlorderErrorg
姓名:BPLOrdererMSP
ID:BPLOrdererMSP
MSPDir://订购者/组织msp
政策:
读者:
类型:签名
规则:“或('bplordermsp.member')”
作者:
类型:签名
规则:“或('bplordermsp.member')”
管理员:
类型:签名
规则:“或('bplordermsp.admin')”
订购点:
-order0.common.bpl:7050
-&bPlug
名称:BPLMSP
ID:BPLMSP
MSPDir:/同级/组织msp
政策:
读者:
类型:签名
规则:“或('BPLMSP.admin','BPLMSP.peer','BPLMSP.client')”
作者:
类型:签名
规则:“或('BPLMSP.admin','BPLMSP.client')”
管理员:
类型:签名
规则:“或('BPLMSP.admin')”
背书:
类型:签名
规则:“或('BPLMSP.peer')”
通过将
config.yaml
放置在每个订购方和对等方的msp目录上,可以启用
NodeOUs

#config.yaml
结节状:
启用:true
客户识别器:
证书:“cacerts/cacert.pem”
组织初始标识:“客户”
管理员标识符:
证书:“cacerts/cacert.pem”
组织初始标识:“管理”
对等标识符:
证书:“cacerts/cacert.pem”
组织初始标识:“对等”
订购者标识符:
证书:“cacerts/cacert.pem”
组织初始标识:“订购方”
订购方重复打印以下警告:

2020-08-20 11:35:08.041 UTC [comm.grpc.server] 1 -> INFO 0c3 streaming call completed grpc.service=orderer.AtomicBroadcast grpc.method=Deliver grpc.peer_address=172.24.0.11:42642 grpc.code=OK grpc.call_duration=792.5µs
2020-08-20 11:35:15.176 UTC [common.deliver] deliverBlocks -> WARN 0c4 [channel: identitych] Client 172.24.0.8:60236 is not authorized: implicit policy evaluation failed - 0 sub-policies were satisfied, but this policy requires 1 of the 'Readers' sub-policies to be satisfied: permission denied
同时,对等方也会重复打印以下警告:

2020-08-20 11:34:28.604 UTC [peer.blocksprovider] DeliverBlocks -> WARN 02b Got error while attempting to receive blocks: received bad status FORBIDDEN from orderer channel=identitych orderer-address=orderer0.common.bpl:7050
2020-08-20 11:34:28.604 UTC [peer.blocksprovider] func1 -> WARN 02c Encountered an error reading from deliver stream: EOF channel=identitych orderer-address=orderer0.common.bpl:7050
我发现了一个类似的问题和答案(),我对下面的引语很好奇:

检查您在configtx.yaml中定义的读卡器策略。此错误是由于策略不匹配而生成的。您已在读卡器策略中定义了某些特定的用户类型(管理员、对等方、客户端),但此特定的用户类型不会传递到您为对等方生成的证书中

我同意我的问题是因为政策不匹配,但我不理解以下内容:

但此特定用户类型不会传递到您为对等方生成的证书中


我如何解决我的问题?提前感谢。

您似乎尚未为频道配置中包含的MSP定义启用Nodoous

通过将config.yaml放置在每个订购方和对等方的msp目录上,可以启用NodeOUs

这将在对等方和订购方的“本地MSP”中启用节点输出支持,但对于通道操作,如调用
Deliver
API,使用的是通道MSP定义

在为订购方系统通道生成genesis块之前,确保已将
config.yaml
放置在
configtx.yaml
引用的MSP目录中(例如,在您的情况下,位于
/peers/org MSP

补充说明:

您可以通过更改
configtx.yaml
中的读卡器策略以引用对等组织的
member
来确认它与Nodeout相关,就像您对订购者组织所做的那样。如果事情与会员政策有关,那么这肯定与NodeOU有关


您还可以通过设置
FABRIC\u LOGGING\u SPEC=info:cauthdsl=debug:policies=debug:msp=debug
来启动策略评估的调试。对于正常操作来说,这通常过于冗长,但会让您更清楚地了解导致故障的确切原因。

谢谢您的评论,我可以解决问题!谢谢
2020-08-20 11:34:28.604 UTC [peer.blocksprovider] DeliverBlocks -> WARN 02b Got error while attempting to receive blocks: received bad status FORBIDDEN from orderer channel=identitych orderer-address=orderer0.common.bpl:7050
2020-08-20 11:34:28.604 UTC [peer.blocksprovider] func1 -> WARN 02c Encountered an error reading from deliver stream: EOF channel=identitych orderer-address=orderer0.common.bpl:7050