如何限制特定组织对 'peer chaincode upgrade' 的访问

How to restrict access to 'peer chaincode upgrade' to specific organisation

是否可以将 'peer chaincode upgrade' 命令限制为特定组织?我希望一个组织作为整个网络的'maintenance officer'。

我正在建立一个包含三个组织的 Hyperledger Fabric 1.4.3 网络:Org1、Org2、Org3。该网络使用单一渠道和多个私人数据集合在组织之间共享敏感数据。我想将第四个组织添加到 运行 网络。我知道如何生成必要的加密 material、启动额外的 Docker 容器、加入频道并安装链代码。但是,添加第四个组织需要额外的私有数据集合,这些集合必须使用“--collections-config”参数在 'peer channel upgrade' 命令中指定。 目前一切正常。我使用来自 Org1 的 Peer0 的 CLI 发出所有 'peer chaincode ...' 命令。但是,我想将此功能的访问权限限制为某些其他组织,例如:只有来自 Org3 的管理员可以发出 'peer chaincode upgrade'。 我尝试将 configtx.yaml 的 Channel/Policies/Admins 部分更改为:

Type: Signature
Rule: "OR('Org3MSP.admin')"

但我仍然能够从 Peer0.Org1 CLI 发出 'peer chaincode upgrade'。

我的应用部分 configtx.yaml:

Application: &ApplicationDefaults
    Organizations:
    Policies:
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"
        Org1MemberPolicy:
            Type: Signature
            Rule: "OR('Org1MSP.member')"
        Org2MemberPolicy:
            Type: Signature
            Rule: "OR('Org2MSP.member')"
        Org3MemberPolicy:
            Type: Signature
            Rule: "OR('Org3MSP.member')"
    Capabilities:
        <<: *ApplicationCapabilities

我的频道部分 configtx.yaml:

Channel: &ChannelDefaults
    Policies:
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: ImplicitMeta
            Rule: "ANY Admins"
    Capabilities:
        <<: *ChannelCapabilities

我的个人资料部分 configtx.yaml:

Profiles:
    ThreeOrgsOrdererGenesis:
        <<: *ChannelDefaults
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Consortiums:
            SampleConsortium:
                Organizations:
                    - *Org1
                    - *Org2
                    - *Org3
    Orgs123Channel:
        <<: *ChannelDefaults
        Consortium: SampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2
                - *Org3
            Capabilities:
                <<: *ApplicationCapabilities

我认为这可以在 configtx.yaml 的某处进行配置,但我无法弄清楚具体位置。

实例化或升级链代码的访问控制是通过实例化策略处理的。使用 -i 选项将实例化策略定义为链代码包的一部分:

peer chaincode package -n mycc -p github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd -v 0 -s -S -i "AND('OrgA.admin')" ccpack.out

在 Fabric v2.x 及更高版本(即将推出)中,新的链代码生命周期模型也提供了更好的控制。