Hyperledger Fabric的ABAC功能实战

阅读本文章前建议先了解《使用VS Code开发智能合约》

ABAC是什么?

ABAC的全称是Attribute-based access control 具体可以参考wiki中的定义。https://en.wikipedia.org/wiki/Attribute-based_access_control
简单点说,这是一种访问控制模型,通过对访问主体的属性标注,结合规则来实现访问控制的目的。通常分为两个步骤:

  1. 先对访问控制主体打标。例如:性别:男,职位:主管
  2. 然后基于规则控制。例如:某管理接口,需要 职位 > 主管 的人才可访问

Fabric中的abac又是怎么回事呢?

Fabric中是使用PKI机制作为身份管理手段的。在很早的版本中就加入了对ABAC的支持(https://jira.hyperledger.org/browse/FABC-539)。在Fabric中,我们要使用ABAC,也分为两个步骤。

  1. 对访问控制的主体打标。在Fabric中,我们通过Fabric CA的身份管理接口实现对身份的打标,后续该身份enroll的证书会带上相应的属性标记。可以参考以下官方文档:

  2. 在智能合约中,我们通过解析身份证书中的属性,再按照我们设定的规则,实现ABAC。Fabric也有相关的文档来指导我们如何在chaincode中使用这部分功能:

在VS Code中实现ABAC功能

Hyperledger Fabric的ABAC功能实战

  1. 通过create identity创建带属性的身份证书。

    • 为身份取名:abac_test
    • 是否创建属性:Yes
    • 设定属性(ecert一定要为true):[{"name": "viplevel", "value": "5", "ecert": true}]

Hyperledger Fabric的ABAC功能实战

创建完的身份可以看到对应的属性

在链码中设定访问控制逻辑

Hyperledger Fabric的ABAC功能实战

我们可以插入如下代码到delete函数逻辑中。

    val, ok, err := cid.GetAttributeValue(stub, "viplevel")
    if err != nil {
        return shim.Error("Failed to GetAttributeValue")
    }
    if !ok {
        return shim.Error("Failed to GetAttributeValue")
    }
    if val != "5" {
        return shim.Error("Only viplevel 5 are allowed to delete!")
    }

注意:在单机模式下,我们只需要启动debug就能让开发中的代码生效,无需升级链码。

使用不同的身份访问提交delete请求

Hyperledger Fabric的ABAC功能实战
我们可以在FABRIC GATEWAYS这里通过断开连接再重新连接的方式,切换连接身份。我们可以看到,使用abac_test可以成功执行删除功能。而使用之前的admin角色账号,删除出错。自此我们就实现了基于ABAC的访问控制。

在阿里云BaaS平台上使用ABAC功能

Hyperledger Fabric的ABAC功能实战
ABAC中关键的给用户打标功能我们可以通过阿里云BaaS控制台来做到。在BaaS控制台中创建用户一栏,选择高级,在属性集中设置所需的kv对,即可创建带属性的账号。
此外,阿里云BaaS还提供了配套插件,使用此插件可以方便的将链码部署到云上。同时也提供了connection-profile下载等其他功能,IBM Blockchain Platform插件的gateway、wallet也可以连接到阿里云BaaS的Fabric,让你对直接对云上的区块链实例发起交易。

Hyperledger Fabric的ABAC功能实战

联系我们

欢迎感兴趣的同学加入钉钉群(钉钉群号: 23181816)。
Hyperledger Fabric的ABAC功能实战

上一篇:银行业AI:炒作背后的现实——“尽管对新技术感到兴奋,但银行业态度非常谨慎”


下一篇:02http协议及httpd基础