訪問控制列表(Fabric1.2新增)

Fabric 1.2.1新特性,測試源碼1.3 網絡

1. 什麼是訪問控制列表

fabric 使用訪問控制列表,經過將策略(在給定一組身份的狀況下指定評估爲「真」或「假」的規則)與資源關聯在一塊兒的方式來管理對資源的訪問。函數

訪問控制的權限是通道管理級別的,沒法對鏈碼進行權限控制 工具

2. 資源

  • 用戶經過定位用戶鏈代碼user chaincode, 系統鏈代碼system chaincode或事件流源events stream source與Fabric進行交互。所以,這些端點被視爲應在其上執行訪問控制的「資源」。測試

  • 這些資源在在configtx.yaml定義,lua

    • 完整的默認資源列表在fabric/sampleconfig/configtx.yaml這個文件下
    • 同時在這個文件中還定義了與默認資源關聯的策略(即默認的訪問控制列表)
    • 資源的命名規則
    <component>/<resource>
    // 系統鏈碼cscc的資源(方法)GetConfigBlock
    cscc/GetConfigBlock
    複製代碼

3.策略

  • 什麼是策略spa

    • 策略函數的一種,接收一組簽名數據並驗證簽名是否合法
    • 策略是fabric工做方式的基礎,它們容許根據與完成請求所需的資源相關聯的策略來檢查與請求關聯的身份或身份集合。
    • fabric經過策略來指定和實現網絡中的各類場景下的權限控制。
  • 策略的類型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
    }
    複製代碼

4.訪問控制的構建

  • 默認定義

    • fabric系統定義了全部默認資源的訪問控制列表(具體內容在fabric/sampleconfig/configtx.yaml這個文件中有顯示)
  • 更新訪問控制列表

    • 訪問控制定義在configtx.yaml,configtxgen使用該文件構建通道配置,若是須要更新,則要編輯該文件
    • 經過編輯在configtx.yaml添加新的ACL列表,在構建通道時,將ACL修改傳播到任何新通道,以更新默認ACL
    • 在通道創建後,經過更新特定通道的通道配置中的訪問控制來更新訪問控制
  • 在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文件
      # 首先在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資源對應的訪問限制策略
      
      複製代碼
      • 通道建好後,若是須要修改資源訪問限制,能夠經過更新通道配置操做,更新默認ACL的值來修改訪問控制列表
  • 通道策略默認值

# 全局默認策略
/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 

複製代碼
相關文章
相關標籤/搜索