Список контроля доступа (добавлен в Fabric 1.2)

блокчейн

Новые функции Fabric 1.2.1, тестовый исходный код 1.3

1. Что такое список контроля доступа

Fabric использует списки управления доступом для управления доступом к ресурсам путем связывания политик (правил, определяющих правила, оцениваемые как «истина» или «ложь» для заданного набора удостоверений) с ресурсами.

Разрешение управления доступом находится на уровне управления каналом, и невозможно контролировать разрешение кода цепи.

2. Ресурсы

  • Пользователь находит код пользовательской цепочки поuser chaincode, системный чейнкодsystem chaincodeили источник потока событийevents stream sourceВзаимодействуйте с тканью. Следовательно, эти конечные точки считаются «ресурсами», к которым должен осуществляться контроль доступа.

  • Эти ресурсы определены в configtx.yaml,

    • Полный список ресурсов по умолчанию находится в файле fabric/sampleconfig/configtx.yaml.
    • В то же время в этом файле также определяется политика, связанная с ресурсом по умолчанию (т. е. списком управления доступом по умолчанию).
    • соглашения об именах ресурсов
    <component>/<resource>
    // 系统链码cscc的资源(方法)GetConfigBlock
    cscc/GetConfigBlock
    

3. Стратегия

  • что такое стратегия

    • Тип функции политики, которая получает набор данных подписи и проверяет, является ли подпись законной.
    • Политики имеют основополагающее значение для работы структур, они позволяют проверять удостоверение или набор удостоверений, связанных с запросом, на соответствие политикам, связанным с ресурсами, необходимыми для выполнения запроса.
    • Fabric определяет и реализует контроль разрешений в различных сценариях в сети с помощью политик.
  • тип стратегии

    • SignatureСтратегия Политика SIGNATURE указывает, что данные аутентифицируются путем подписи, например, данные должны соответствовать определенной комбинации идентификаторов подписи. Эта стратегия является более гибкой и в основном определяет спецификацию комбинации предметов MSP. Основываясь на стратегии проверочной подписи, он поддерживает AND, OR, NOutOf и может создавать такие спецификации, как: «Администратор организации A и 2 других администратора или 11 из 20 администраторов организации».

      NOutOf означает, что выполнение n из m условий означает выполнение политики (m≥n)

      Policies:
           Readers:
                 Type: Signature
                 Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')"
             Writers:
                 Type: Signature
                 Rule: "OR('Org1MSP.admin', 'Org1MSP.client')"
      
    • Неявная МетаСтратегия Эта политика не такая гибкая, как SignaturePolicy, и работает только в контексте конфигурации. Он не выполняет проверку подписи напрямую, а через политику, которая ссылается на свои дочерние элементы (и, в конечном итоге, через политику подписи). Результат проверки также ограничивается правилом, которое поддерживает правила по умолчанию, например: «Большинство политик администратора организации».

    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 для построения конфигурации канала, и этот файл необходимо отредактировать, если он нуждается в обновлении.
    • Отредактировав, чтобы добавить новый список ACL в configtx.yaml, при создании канала распространите изменение ACL на любой новый канал, чтобы обновить ACL по умолчанию.
    • После того, как канал установлен, обновите контроль доступа, обновив контроль доступа в конфигурации канала для конкретного канала.
  • Обновить значения ACL по умолчанию в configtx.yaml

    • Значение по умолчанию определения ACL

      • ACL определяются в формате пары ключ-значение, состоящей из имени ресурса, за которым следует строка, описывающая соответствующую политику.

      • Ресурс по умолчанию и соответствующая ему политика ограничения доступа определяются системой, и в файле Fabric/sampleconfig/configtx.yaml есть пример введения.

      • Обновление ACL требует, чтобы ACL были определены в файле конфигурации configtx.yaml, чтобы переопределить список управления доступом по умолчанию.

      • Местоположение определения пары "ключ-значение" 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