Hyperledger Fabric的ABAC功能实战

简介: 阅读本文章前建议先了解《使用VS Code开发智能合约》 ABAC是什么?ABAC的全称是Attribute-based access control 具体可以参考wiki中的定义。https://en.wikipedia.org/wiki/Attribute-based_access_control简单点说,这是一种访问控制模型,通过对访问主体的属性标注,结合规则来实现访问控制的目的。

阅读本文章前建议先了解《使用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功能

1

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

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

2

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

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

3

我们可以插入如下代码到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请求

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

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

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

6

联系我们

欢迎感兴趣的同学加入钉钉群(钉钉群号: 23181816)。
钉钉群

相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
目录
相关文章
|
6月前
|
开发框架 .NET 区块链
Hyperledger fabric部署链码(五)初始化与链码升级
fabric部署chaincode-go(智能合约)系列之五
|
6月前
|
JavaScript 测试技术 Go
Hyperledger fabric部署链码(一)打包链码
fabric部署chaincode-go(智能合约)系列之一
|
2月前
|
前端开发 JavaScript 开发者
Canvas库 fabric.js可以实现哪些功能? 动图介绍
fabric.js是一个canvas库,今天整理了一下fabric.js可以实现的功能,用动图的形式分享给大家,方便快速了解fabric.js。
Canvas库 fabric.js可以实现哪些功能? 动图介绍
|
6月前
|
存储 JSON 安全
Hyperledger fabric智能合约编写(一)
本篇文章主要对链码编写的主要思路和部分API进行梳理。
|
6月前
|
Go API 区块链
Hyperledger Fabric相关概念介绍
在学习Hyperledger Fabric的过程中,初步对相关概念的了解。
Hyperledger Fabric相关概念介绍
|
6月前
|
JSON 区块链 数据格式
Hyperledger fabric部署链码(四)提交链码定义到channel
fabric部署chaincode-go(智能合约)系列之四
|
6月前
|
测试技术 API 区块链
Hyperledger fabric部署链码(三)批准链码定义
fabric部署chaincode-go(智能合约)系列之三
|
6月前
|
区块链
Hyperledger fabric部署链码(二)安装链码到fabric
fabric部署chaincode-go(智能合约)系列之二
|
6月前
|
测试技术 Go 区块链
Hyperledger fabric 测试环境部署
Hyperledger fabric 测试环境部署及相关问题解答
109 3
|
8月前
|
消息中间件 Java Kafka
Hyperledger Fabric 通道配置文件和容器环境变量详解
Fabric 节点的主配置路径为 FABRIC_CFG_PATH 环境变量所指向路径(默认为 /etc/hyperledger/fabric)。在不显式指定配置路径时,会尝试从主配置路径下查找相关的配置文件。
219 0