天天看點

Hyperledger Fabric的ABAC功能實戰ABAC是什麼?Fabric中的abac又是怎麼回事呢?在VS Code中實作ABAC功能在鍊碼中設定通路控制邏輯使用不同的身份通路送出delete請求在阿裡雲BaaS平台上使用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功能實戰ABAC是什麼?Fabric中的abac又是怎麼回事呢?在VS Code中實作ABAC功能在鍊碼中設定通路控制邏輯使用不同的身份通路送出delete請求在阿裡雲BaaS平台上使用ABAC功能聯系我們
  1. 通過create identity建立帶屬性的身份證書。
    • 為身份取名:abac_test
    • 是否建立屬性:Yes
    • 設定屬性(ecert一定要為true):[{"name": "viplevel", "value": "5", "ecert": true}]
Hyperledger Fabric的ABAC功能實戰ABAC是什麼?Fabric中的abac又是怎麼回事呢?在VS Code中實作ABAC功能在鍊碼中設定通路控制邏輯使用不同的身份通路送出delete請求在阿裡雲BaaS平台上使用ABAC功能聯系我們

建立完的身份可以看到對應的屬性

在鍊碼中設定通路控制邏輯

Hyperledger Fabric的ABAC功能實戰ABAC是什麼?Fabric中的abac又是怎麼回事呢?在VS Code中實作ABAC功能在鍊碼中設定通路控制邏輯使用不同的身份通路送出delete請求在阿裡雲BaaS平台上使用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功能實戰ABAC是什麼?Fabric中的abac又是怎麼回事呢?在VS Code中實作ABAC功能在鍊碼中設定通路控制邏輯使用不同的身份通路送出delete請求在阿裡雲BaaS平台上使用ABAC功能聯系我們

我們可以在FABRIC GATEWAYS這裡通過斷開連接配接再重新連接配接的方式,切換連接配接身份。我們可以看到,使用abac_test可以成功執行删除功能。而使用之前的admin角色賬号,删除出錯。自此我們就實作了基于ABAC的通路控制。

在阿裡雲BaaS平台上使用ABAC功能

Hyperledger Fabric的ABAC功能實戰ABAC是什麼?Fabric中的abac又是怎麼回事呢?在VS Code中實作ABAC功能在鍊碼中設定通路控制邏輯使用不同的身份通路送出delete請求在阿裡雲BaaS平台上使用ABAC功能聯系我們

ABAC中關鍵的給使用者打标功能我們可以通過阿裡雲BaaS控制台來做到。在BaaS控制台中建立使用者一欄,選擇進階,在屬性集中設定所需的kv對,即可建立帶屬性的賬号。

此外,阿裡雲BaaS還提供了

配套插件

,使用此插件可以友善的将鍊碼部署到雲上。同時也提供了connection-profile下載下傳等其他功能,IBM Blockchain Platform插件的gateway、wallet也可以連接配接到阿裡雲BaaS的Fabric,讓你對直接對雲上的區塊鍊執行個體發起交易。

Hyperledger Fabric的ABAC功能實戰ABAC是什麼?Fabric中的abac又是怎麼回事呢?在VS Code中實作ABAC功能在鍊碼中設定通路控制邏輯使用不同的身份通路送出delete請求在阿裡雲BaaS平台上使用ABAC功能聯系我們

聯系我們

歡迎感興趣的同學加入釘釘群(釘釘群号: 23181816)。

Hyperledger Fabric的ABAC功能實戰ABAC是什麼?Fabric中的abac又是怎麼回事呢?在VS Code中實作ABAC功能在鍊碼中設定通路控制邏輯使用不同的身份通路送出delete請求在阿裡雲BaaS平台上使用ABAC功能聯系我們

繼續閱讀