爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      Hyperledger Fabric 权限策略和访问控制

      首页 知识中心 其他 文章详情页

      Hyperledger Fabric 权限策略和访问控制

      2024-06-28 06:18:03 阅读次数:509

      fabric

      Hyperledger Fabric 权限策略和访问控制

      访问控制是区块链网络十分重要的功能,负责控制某个身份在某个场景下是否允许采取某个操作(如读写某个资源)。

      常见的访问控制模型包括强制访问控制(Mandatory Access Control)、自主访问控制(Discretionary Access Control)、基于角色的访问控制(Role BasedAccess Control)和基于属性的访问控制(Attribute Based Access Control)。功能越强大的模型,实现起来往往越复杂。

      Fabric通过权限策略和访问控制列表(ACL)机制实现了基于角色的访问控制模型,可以满足通道内资源访问、背书控制或链码调用控制等多个场景下的需求。

      应用场景

      访问场景包括采用不同策略(如通道策略、节点策略、背书策略等),按照访问控制列表(如要求身份为Admins、Writers等)对某资源的特定操作进行限制。

      Hyperledger Fabric 权限策略和访问控制

      Hyperledger Fabric 权限策略和访问控制


      身份证书

      实现权限策略的基础是身份,身份的实现依赖证书机制。通过基于PKI的成员身份管理,Fabric网络可以对网络内的资源和接入用户的各种能力进行限制。

      Fabric最初设计中考虑了三种类型的证书:登记证书(Enrollment Certificate)、交易证书(Transaction Certif icate),以及保障通信链路安全的TLS证书。证书的默认签名算法为ECDSA,Hash算法为SHA-256。

      ●登记证书(ECert):颁发给提供了注册凭证的用户或节点等实体,代表网络中身份。可以长期有效。

      ●交易证书(TCert):颁发给用户,控制每个交易的权限,不同交易可以不同,实现匿名性,短期有效。暂未实现。

      ●通信证书(TLSCert):控制对网络层的接入访问,可以对远端实体身份进行校验,防止窃听。可以长期有效。

      目前,在实现上,主要通过ECert来对实体身份进行检验,通过检查签名来实现权限管理。TCert功能暂未实现,用户可以使用idemix机制来实现部分匿名性。


      身份集合

      基于证书机制,Fabric设计了身份集合(MSPPrincipal)来灵活标记一组拥有特定身份的个体.

      Hyperledger Fabric 权限策略和访问控制

      对应的MSPPrincipal的数据结构:

      Hyperledger Fabric 权限策略和访问控制

      身份集合支持从以下不同维度对身份进行分类。

      ●Role:根据证书角色来区分,如Member、Admin、Client、Peer、Orderer等。

      ●OrganizationUnit:根据身份证书中指定的OU信息来区分。

      ●Identity:具体指定某个个体的证书,只有完全匹配才认为合法。

      ●Anonymity:证书是否是匿名的,用于idemix类型的MSP。

      ●Combined:由其他多个子身份集合组成,需要符合所有的子集合才认为合法。

      基于不同维度可以灵活指定符合某个身份的个体,例如,某个MSP的特定角色(如成员或管理员),或某个MSP的特定单位(OrganizationUnit),当然也可以指定为某个特定个体。

      注意,目前对不同角色的认可采取不同方法。对于管理员角色,会认可本地msp/admincerts路径下的证书列表或证书带有代表管理员角色的OU信息;Client、Peer、Orderer等角色则需要查看证书是否带有对应的OU域;对于成员角色,则需要证书是由对应组织根证书签发。


      权限策略的实现

      权限策略指定了可以执行某项操作的身份集合。以通道相关的策略为例,一般包括对读操作(例如获取通道的交易、区块等数据)、写操作(例如向通道发起交易)、管理操作(例如加入通道、修改通道的配置信息)等进行权限限制。对策略配置自身的修改是通过额外指定的修改策略(mod_policy)来实现的。

      操作者在发起操作时,其请求中签名组合只有满足策略指定的身份规则,才允许执行。实现上,每种策略结构都要实现Policy接口。对于给定的一组签名数据或身份,按照给定规则进行检验,看是否符合约定的条件。符合则说明满足了该策略;反之则拒绝。

      数据结构

      策略相关的数据结构定义在fabric-protos-go项目的common/policies.pb.go文件中,其中主要包括Policy、SignaturePolicyEnvelope(内嵌SignaturePolicy结构)和ImplicitMetaPolicy三种数据结构,如图14-20所示。

      Hyperledger Fabric 权限策略和访问控制

      其中,Type的数值代表策略的类型,具体含义为:

      ●UNKNOWN,保留值,用于初始化。

      ●SIGNATURE,通过匹配基于签名的组合,如某个MSP中至少有三个签名。

      ●MSP,代表策略必须匹配某MSP下的指定身份,如MSP的管理员身份。

      ●IMPLICIT_META,隐式类型,包括若干子策略,并通过Rule来指定具体的规则,包括ANY、ALL、MAJORITY三种,仅用于通道配置内标记通道规则。

      目前已经实现支持的策略类型主要包括SIGNATURE策略和IMPLICIT_META策略两种。

      SIGNATURE策略

      SIGNATURE策略指定通过签名来对数据进行认证,例如,必须满足给定身份的签名组合

      Hyperledger Fabric 权限策略和访问控制

      其中,SignaturePolicy结构体代表了一个策略规则(rule)。支持指定某个特定签名,或者满足给定策略集合中的若干个(NOutOf)即可。NOutOf用法十分灵活,基于它可以递归地构建任意复杂的策略语义,指定多个签名规则的与、或组合关系。

      SignaturePolicyEnvelope结构体代表了一个完整的策略,包括版本号(version)、策略规则(rule)和策略关联的身份集合(identities)。

      例如,某个策略要求满足MP1身份集合签名,或者MP2集合和MP3集合同时签名,则可以表达为MP1||(MP2&&MP3)。对应的策略结构如下:

      SignaturePolicyEnvelope{
          version: 0,
          rule: SignaturePolicy{
              n_out_of: NOutOf{
                  N: 1,
                  rules: [
                      SignaturePolicy{ signed_by: 0 },
                      SignaturePolicy{
                          n_out_of: NOutOf{
                              N: 2,
                              rules: [
                                  SignaturePolicy{ signed_by: 1 },
                                  SignaturePolicy{ signed_by: 2 },
                              ],
                          },
                      },
                  ],
              },
          },
          identities: [MP1, MP2, MP3] // 身份集合列表
      }
      // /hyperledger/fabric-protos-go/common/policies.pb.go
      type ImplicitMetaPolicy struct {
          SubPolicy string // 子策略类型名称,如 Readers、Writers、Admins
          Rule ImplicitMetaPolicy_Rule // 子策略的匹配条件,可以为 ANY、ALL、MAJORITY
      }
      ImplicitMetaPolicy{
          sub_policy: "Readers",
          rule: ANY,
      }
      

      需要注意,对签名策略的匹配过程是顺序敏感的(参考FAB-4749)。进行策略检查时,给定的多个签名会按照策略顺序依次与身份集合进行匹配,签名一旦匹配则会被消耗掉,再检查下一个签名。例如上述例子中,假如MP1代表组织A的管理员,MP2代表组织B的成员,MP3代表组织B的管理员,那么对于签名组合[S1={组织B的管理员},S2={组织B的成员}],并不会匹配成功。因为,S1在匹配MP2后会被消耗掉,剩下的S2在匹配MP3时会失败。为了避免这种情况,进行签名时要将优先级较低的签名放到前面,比如代表成员身份的签名应当放到管理员身份前。同时,对于策略的身份集合列表,则应该将高优先级的放到前面。


      IMPLICIT_META策略

      IMPLICIT_META策略用于通道配置,它并不直接进行签名检查,而是通过引用其他子策略(最终还是通过SIGNATURE策略)来实现。检查结果通过策略规则进行约束。

      Hyperledger Fabric 权限策略和访问控制


      通道策略

      权限策略的主要应用场景之一便是通道策略。通道策略采用了层级化树形结构,最上层为/Channel组,下面是各级子组。在每一级别都可以指定策略,作为本层级的默认策略。

      通道配置可以包括联盟组(仅当系统通道,包括联盟组织信息)、应用组(一般仅当应用通道,包含使用通道的组织信息)和排序组(包括排序组织信息)等不同的元素。

      一个典型的应用通道的例子如图14-23所示,包括一个排序组和一个应用组。

      Hyperledger Fabric 权限策略和访问控制

      默认情况下,通道内的策略使用的角色定义如下:

      # 通道全局策略
      /Channel/Readers: ImplicitMetaPolicy-ANY Readers
      /Channel/Writers: ImplicitMetaPolicy-ANY Writers
      /Channel/Admins : ImplicitMetaPolicy-MAJORITY Admins
      # 通道内应用组默认策略(仅当应用通道),需要从应用组织中推断
      /Channel/Application/Readers: ImplicitMetaPolicy-ANY Readers
      /Channel/Application/Writers: ImplicitMetaPolicy-ANY Writers
      /Channel/Application/Admins : ImplicitMetaPolicy-MAJORITY Admins
      /Channel/Application/Endorsement: ImplicitMetaPolicy-MAJORITY Endorsement
      /Channel/Application/LifecycleEndorsement: ImplicitMetaPolicy-MAJORITY 
      LifecycleEndorsement
      # 通道内应用组各组织的默认策略(仅当应用通道)
      /Channel/Application/Org/Readers: SignaturePolicy for 1 of Org Member
      /Channel/Application/Org/Writers: SignaturePolicy for 1 of Org Member
      /Channel/Application/Org/Admins : SignaturePolicy for 1 of Org Admin
      /Channel/Application/Org/Endorsement: SignaturePolicy for 1 of Org Member
      # 通道内排序组的默认策略,需要从排序组织中推断
      /Channel/Orderer/Readers: ImplicitMetaPolicy-ANY Readers
      /Channel/Orderer/Writers: ImplicitMetaPolicy-ANY Writers
      /Channel/Orderer/Admins : ImplicitMetaPolicy-MAJORITY Admins
      /Channel/Orderer/BlockValidation: ImplicitMetaPolicy-ANY Writers
      # 通道内排序组中各组织的默认策略
      /Channel/Orderer/Org/Readers: SignaturePolicy for 1 of Org Member
      /Channel/Orderer/Org/Writers: SignaturePolicy for 1 of Org Member
      /Channel/Orderer/Org/Admins : SignaturePolicy for 1 of Org Admin
      # 通道内联盟组的默认策略(仅当系统通道)
      /Channel/Consortiums/Admins: SignaturePolicy for ANY
      # 通道内联盟组中某联盟的默认通道创建策略(仅当系统通道)
      /Channel/Consortiums/Consortium/ChannelCreationPolicy: ImplicitMetaPolicy-ANY 
      for Admin
      # 通道内联盟组中某联盟组织的默认策略(仅当系统通道)
      /Channel/Consortiums/Consortium/Org/Readers: SignaturePolicy for 1 of Org Member: 
       ImplicitMetaPolicy-ANY for Admin
      /Channel/Consortiums/Consortium/Org/Writers: SignaturePolicy for 1 of Org Member
      /Channel/Consortiums/Consortium/Org/Admins : SignaturePolicy for 1 of Org Admin
      

      其中,通道内的元素,默认对其进行修改的策略(mod_policy)为Admins;与排序相关的配置的修改策略则指定为/Channel/Orderer/Admins,主要包括系统通道内相关配置,如Orderer-Addresses、Consortiums和具体的联盟配置。

      另外,应用通道的策略会考虑最新配置中的Orderer组和Application组;系统通道的策略会考虑最新配置中的Orderer组和Consortiums组。新建应用通道时,用户需要指定Application组配置,如果不指定Orderer组配置,会自动从系统通道中继承过来。


      通道访问控制

      目前,Fabric中大多数的访问权限通过通道访问控制列表来指定。访问控制列表位于通道配置中,被通道内所有成员认可。可以在新建通道时利用conf igtx.yaml指定,也可以后期通过配置更新进行变更。访问控制列表配置示例如下,包括访问控制列表和其引用的策略:

      Application: &ApplicationDefaults
          ACLs: &ACLsDefault
              # Lifecycle 方法调用权限:CheckCommitReadiness()、CommitChaincodeDefinition()、 
      QueryChaincodeDefinition()、QueryChaincodeDefinitions()
              _lifecycle/CheckCommitReadiness: /Channel/Application/Writers
              _lifecycle/CommitChaincodeDefinition: /Channel/Application/Writers
              _lifecycle/QueryChaincodeDefinition: /Channel/Application/Readers
              _lifecycle/QueryChaincodeDefinitions: /Channel/Application/Readers
              # LSCC 方法调用权限:getid()、getdepspec()、getccdata()、getchaincodes()
              lscc/ChaincodeExists: /Channel/Application/Readers
      lscc/GetDeploymentSpec: /Channel/Application/Readers
              lscc/GetChaincodeData: /Channel/Application/Readers
              lscc/GetInstantiatedChaincodes: /Channel/Application/Readers
              # QSCC 方法调用权限:GetChainInfo()、GetBlockByNumber()、GetBlockByHash()、
      GetTransactionByID()、GetBlockByTxID()
              qscc/GetChainInfo: /Channel/Application/Readers
              qscc/GetBlockByNumber: /Channel/Application/Readers
              qscc/GetBlockByHash: /Channel/Application/Readers
              qscc/GetTransactionByID: /Channel/Application/Readers
              qscc/GetBlockByTxID: /Channel/Application/Readers
              # CSCC 方法调用权限:GetConfigBlock()
              cscc/GetConfigBlock: /Channel/Application/Readers
              # 通道内链码调用权限(向 Peer 发送背书请求)
              peer/Propose: /Channel/Application/Writers
              # 通道内跨链码调用权限
              peer/ChaincodeToChaincode: /Channel/Application/Readers
              # 接收区块事件权限
              event/Block: /Channel/Application/Readers
              # 接收过滤区块事件权限
              event/FilteredBlock: /Channel/Application/Readers
          # 默认应用通道内组织成员为空
          Organizations:
          # 通道内相关的策略,可被 ACL 中引用,用户也可以自定义全局策略
          Policies: &ApplicationDefaultPolicies
              Readers:
                  Type: ImplicitMeta
                  Rule: "ANY Readers"
              Writers:
                  Type: ImplicitMeta
                  Rule: "ANY Writers"
              Admins:
                  Type: ImplicitMeta
                  Rule: "MAJORITY Admins"
          # 引用应用通道默认的能力集合
          Capabilities:
              <<: *ApplicationCapabilities
      

      目前通道配置支持的资源访问权限总结如表:

      资源访问 权限 功能
      Lifecycle/InstallChaincode 本 MSP Admins 安装链码
      Lifecycle/QueryInstalledChaincode 本 MSP Admins 查询已安装的链码信息
      Lifecycle/GetInstalledChaincodePackage 本 MSP Admins 获取链码安装包
      Lifecycle/QueryInstalledChaincodes 本 MSP Admins 查询所有已安装链码列表
      Lifecycle/ApproveChaincodeDefinitionForMyOrg 本 MSP Admins 本 MSP Admins
      Lifecycle/CommitChaincodeDefinition 通道 Writers 提交链码定义
      Lifecycle/QueryChaincodeDefinition 通道 Writers 查询指定的已提交链码定义
      Lifecycle/CheckCommitReadiness 通道 Writers 检查链码定义提交状态
      Lscc/Install 本 MSP Admins 传统安装链码
      Lscc/GetInstalledChaincodes 本 MSP Admins 传统获取安装链码列表
      Lscc/Deploy 通道 Writers 传统实例化链码
      Lscc/Upgrade 通道 Writers 传统升级链码
      Lscc/ChaincodeExists 通道 Readers 检查链码是否安装
      Lscc/GetDeploymentSpec 通道 Readers 获取安装包
      Lscc/GetChaincodeData 通道 Readers 获取链码完整数据包
      Lscc/GetInstantiatedChaincodes 通道 Readers 获取已实例化链码列表
      Lscc/GetCollectionsConfig 通道 Readers 获取私有数据集合配置
      Qscc/GetChainInfo 通道 Readers 查询通道信息
      Qscc/GetBlockByNumber 通道 Readers 获取指定序号区块
      Qscc/GetBlockByHash 通道 Readers 获取指定 hash 区块
      Qscc/GetTransactionByID 通道 Readers 获取指定 ID 交易
      Qscc/GetBlockByTxID 通道 Readers 获取包括指定交易的区块
      Qscc/JoinChain 通道 Readers 加入通道
      Qscc/GetChannels 通道 Readers 获取已加入的通道列表
      Qscc/GetConfigBlock 通道 Readers 获取配置区块
      Peer/Propose 通道 Writers 调用链码
      Peer/ChaincodeToChaincode 通道 Writers 跨链码调用
      Event/Block 通道 Readers 监听完整区块事件
      Event/FilteredBlock 通道 Readers 监听过滤区块事件

      背书策略

      链码背书策略

      用户在批准执行链码(2.0版本之前为实例化链码)时,可以指定调用该链码需要满足的背书策略(Endorsement Policy)并存放到链码定义中。当对链码的调用交易被提交时,Peer会检查是否交易携带了符合指定背书策略的签名信息。

      背书策略可以采用SignaturePolicy或ChannelConf igPolicy两种方式进行指定,构建十分灵活的策略组合。SignaturePolicy方式指定使用特定身份签名组合来进行背书。例如,指定某几个组织内的任意成员身份进行背书,或者至少有一个管理员身份进行背书等。

      语法上,背书策略通过-P指定需要哪些SignaturePolicy;通过-T指定所需要的Signature-Policy个数。目前,客户端已经实现了对背书策略的初步支持,通过-P来指定通过AND、OR、OutOf组合的身份角色(包括admin、member、peer、client)集合。

      下面的策略指定要么Org1的管理员进行背书,要么Org2和Org3的peer节点同时进行背书:

      OR('Org1.admin', AND('Org2.peer', 'Org3.peer'))
      

      下面的策略指定三个组织中至少两个组织的成员进行背书:

      OutOf(2, 'Org1.member', 'Org2.member', 'Org3.member')
      

      ChannelConf igPolicy方式则引用通道配置内的已有策略名,使用对应的身份进行背书。

      例如,如果不显式指定背书策略,则会使用通道配置中的Channel/Application/Endorsement策略,其默认为通道内的大多数成员。


      键值背书策略

      除了面向链码(该链码的所有状态)的背书策略外,自1.3.0版本开始,Fabric支持基于特定状态(键值)的更细粒度的背书策略。用户可以指定要修改某个指定状态时所需的背书策略。

      包括如下的shim层API,可以在链码内使用。

      ●GetStateValidationParameter(collection,key string)([]byte,error):获取指定集合对指定键值的背书策略。

      ●SetStateValidationParameter(collection,key string,ep[]byte)error:指定某个键值所绑定的背书策略。

      ●GetPrivateDataValidationParameter(collection,key string)([]byte,error):获取指定集合对指定私密键值的背书策略。

      ●SetPrivateDataValidationParameter(collection,key string,ep[]byte)error:指定某个私密键值对应的背书策略。

      Peer在提交区块阶段会对背书策略进行检查.


      私有数据集合背书策略

      自2.0版本起,用户也可以为每个私密数据集合指定对应的背书策略。当用户对私密数据集合内的键值进行写或修改操作时,需要满足指定的背书策略。此时,链码的整体背书策略会被忽略。发起写请求的用户不必为私密数据集合的成员。使用私密数据集合背书策略,可以限制对私密数据的写操作,实现更为安全的链码访问保护。

      类似于链码背书策略,私密数据集合背书策略支持SignaturePolicy或ChannelConf igPolicy两种方式。例如,可以在集合配置文件collection.json中指定signaturePolicy或channelConf ig-Policy背书策略,示例代码如下:

      [
       {
           "name": "collection1",       // 集合名称
           "policy": "OR('Org1MSP.member', 'Org2MSP.member')", // 集合成员
           "requiredPeerCount": 1, // 背书之前至少扩散私密数据到的节点数
           "maxPeerCount": 3,      // 背书之前尝试扩散最多节点个数,不能小于 requiredPeerCount
           "blockToLive":99999,    // 私密数据保存时长。0 意味着永不过期
           "memberOnlyRead": true, // 是否只允许集合成员(如客户端)来读取私密数据,v1.4 开始支持
           "memberOnlyWrite": true,// 是否只允许集合成员(如客户端)来发起对私密数据的写交易,v2.0  
               // 开始支持
           "endorsementPolicy": {  // 指定对私密数据进行写操作时的背书策略,会取代链码的背书策略
            "signaturePolicy": "OR('Org1MSP.member')" // 指定使用签名策略
          }
      },
      {
           "name": "collection2",
           "policy": "OR('Org1MSP.member')",
           "requiredPeerCount": 1,
           "maxPeerCount": 3,
           "blockToLive":3,
           "memberOnlyRead": true,
           "memberOnlyWrite": true,
           "endorsementPolicy": {
            "channelConfigPolicy": "Channel/Application/Writers" // 指定使用通道配置内已 
                    // 有策略
          }
      }
      ]
      

      基于证书属性的链码访问控制

      另外,用户也可以在自己的链码内通过基于证书属性的链码访问控制,实现自定义的控制逻辑。例如,可在方法入口处先检测调用者身份证书,过滤某些特定身份调用者,以实现基于键值或其他条件的细粒度的控制。

      // /hyperledger/fabric-chaincode-go/pkg/cid/cid.go
      // 获取根据证书主题生成的唯一标识
      func GetID() (string, error) 
      // 获取 MSP ID
      func GetMSPID() (string, error) 
      // 获取证书某个属性的值
      func GetAttributeValue(attrName string) (value string, found bool, err error)
      // 检查证书中某个属性是给定值
      func AssertAttributeValue(attrName, attrValue string) error 
      // 获取调用者的 X509 证书
      func GetX509Certificate() (*x509.Certificate, error)
      // 判断调用者是否属于给定 OU
      func HasOUValue(stub ChaincodeStubInterface, OUValue string) (bool, error)
      

      用户可以使用这些方法在链码方法中对调用者身份进行访问控制。

      例如,在证书的extension域中设置自定义的属性"abac."+role,并在链码方法中判断只有证书带有该属性的用户才可以调用该方法,示例代码如下:

      import "/hyperledger/fabric-chaincode-go/pkg/cid"
       func (t *TestChaincode) Access(stub shim.ChaincodeStubInterface, role string)  
          pb.Response {
          // 根据属性值来判断是否允许访问方法
          err := cid.AssertAttributeValue(stub, "abac."+role, "true")
          if err != nil {
              return shim.Error("Not allowed with missed attribution"+err.Error())
          }
          ...
      }
      

      实例化策略

      实例化策略(Instantiation Policy)仅在2.0版本之前生效,负责对链码的实例化情况进行控制。Committer在确认阶段利用VSCC对网络中进行链码部署的操作进行权限检查。

      目前,实例化策略同样采用了SignaturePolicy结构进行指定,可以基于身份集合结构构建复杂的签名校验组合。

      默认情况下,会以当前MSP的管理员身份作为默认策略,即只有当前MSP管理员可以进行链码实例化操作。这可以避免链码被通道中其他组织成员私自在其他通道内进行实例化。

      实例化策略的检查发生在Peer的背书阶段。

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://my.oschina.net/j4love/blog/5464579,作者:DevX,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:python学习笔记(五)之字典2

      下一篇:cube.js 学习 cli 命令

      相关文章

      2024-07-01 01:31:09

      Hyperledger Fabric 管理链码 peer lifecycle chaincode 指令使用

      链上代码(Chaincode)简称链码,包括系统链码和用户链码。系统链码(System Chaincode)指的是Fabric Peer中负责系统配置、查询、背书、验证等平台功能的代码逻辑,运行在Peer进程内,将在第14章介绍。用户链码指的是用户编写的用来实现智能合约的应用代码。如无特殊说明,链码一般指的就是用户链码。

      2024-07-01 01:31:09
      fabric , sequence
      2023-08-04 07:27:46

      Hyperledger Fabric 核心概念与组件

      Hyperledger Fabric 核心概念与组件 要理解超级账本Fabric的设计,首先要掌握其最基本的核心概念与组件,如节点、交易、排序、共识、通道等。 弄清楚这些核心组件的功能,就可以准确把握Fabric的底层运行原理,深入理解其在

      2023-08-04 07:27:46
      2023-08-04 07:26:46

      Hyperledger Fabric 生成组织身份解析

      Hyperledger Fabric 生成组织身份解析 fabric 版本 2.4.1 Fabric网络通过证书和密钥来管理和认证成员身份,经常需要生成证书文件。通常这些操作可以使用PKI服务(如Fabric-CA)或者OpenSSL

      2023-08-04 07:26:46
      2023-08-04 07:26:46

      Hyperledger Fabric Orderer 配置解析

      Hyperledger Fabric Orderer 配置解析 文中使用的 fabric 版本为 2.4.1 排序节点在Fabric网络中为Peer提供排序服务。与Peer节点类似,排序节点支持从命令行参数、环境变量或配置文件中读取配

      2023-08-04 07:26:46
      fabric , grpc
      2023-08-04 07:26:46

      Hyperledger Fabric Peer 配置解析

      Hyperledger Fabric Peer 配置解析 文中使用的 fabric 版本为 2.4.1 在Fabric网络中,用户可以设定Peer节点、排序节点、CA节点的行为,以及管理通道、组织身份等多种资源,这都涉及网络内配置。

      2023-08-04 07:26:46
      docker , fabric , yaml
      2023-05-05 10:11:46

      Hyperledger Fabric 隐私保护

      Hyperledger Fabric 隐私保护 分布式账本可以帮助多个成员进行数据共享和协作,因此,隐私保护(如哪些数据可以被谁读写)就成了十分关键的问题。 目前,Fabric通过多种技术手段在不同层级上分别进行隐私保护,包括如下几种机制:

      2023-05-05 10:11:46
      fabric
      2023-02-23 07:38:36

      前端可视化:Fabric.js HTML5 canvas 工具库

      Fabric.js 是一个功能强大且操作简单的 Javascript HTML5 canvas 工具库。文档:​​

      2023-02-23 07:38:36
      html5 , fabric , github , javascript , 前端
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5235924

      查看更多

      最新文章

      Hyperledger Fabric 管理链码 peer lifecycle chaincode 指令使用

      2024-07-01 01:31:09

      Hyperledger Fabric 核心概念与组件

      2023-08-04 07:27:46

      Hyperledger Fabric 生成组织身份解析

      2023-08-04 07:26:46

      Hyperledger Fabric 隐私保护

      2023-05-05 10:11:46

      查看更多

      热门文章

      Hyperledger Fabric 隐私保护

      2023-05-05 10:11:46

      Hyperledger Fabric 管理链码 peer lifecycle chaincode 指令使用

      2024-07-01 01:31:09

      Hyperledger Fabric 核心概念与组件

      2023-08-04 07:27:46

      Hyperledger Fabric 生成组织身份解析

      2023-08-04 07:26:46

      查看更多

      热门标签

      linux java python javascript 数组 前端 docker Linux vue 函数 shell git 节点 容器 示例
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      Hyperledger Fabric 核心概念与组件

      Hyperledger Fabric 管理链码 peer lifecycle chaincode 指令使用

      Hyperledger Fabric 隐私保护

      Hyperledger Fabric 生成组织身份解析

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号