すべてのプロダクト
Search
ドキュメントセンター

Blockchain as a Service:属性ベースのアクセス制御

最終更新日:Jan 19, 2025

ユーザーアクセス制御

アクセス制御の決定は、ID の属性に基づいてチェーンコード (および Hyperledger Fabric ランタイム) によって行うことができます。これは、属性ベースのアクセス制御 (ABAC) と呼ばれます。ユーザー ID を登録する際に、証明書 (ECert) に 1 つ以上の属性名と値を含めることができます。その後、チェーンコードは属性の値を抽出してアクセス制御の決定を行います。

たとえば、アプリケーション app1 を開発していて、特定のチェーンコード操作を app1 管理者のみがアクセスできるようにしたいとします。チェーンコードは、呼び出し元の証明書 (チャネルに対して信頼されている CA によって発行されたもの) に、値が true の app1Admin という名前の属性が含まれていることを確認できます。

Hyperledger Fabric ABAC の詳細については、「属性ベースのアクセス制御」をご参照ください。

属性設定

コンソールで組織ユーザーを作成するときに、「上級」をクリックしてユーザー属性を設定できます。

  1. Alibaba Cloud BaaS コンソール にログオンします。

  2. [概要] ページで、[組織] を見つけ、対象の組織を見つけて、組織の名前をクリックします。

  3. [ユーザー] をクリックします。

  4. [ユーザーを追加] をクリックし、「上級」をクリックしてユーザー属性を設定します。

    ユーザーを作成した後、ユーザー属性を確認できます。

    user

属性設定の仕様

  • デリミタ「,」を使用して異なる属性に分割します

  • デリミタ「=」を使用して属性名と値に分割します

  • 属性名と値は英字または数字で構成する必要があります

  • 属性名と値はすべて文字列型です

例:

ユーザー登録証明書の「app1Admin=true,permissions=7」の属性は次のようになります。

 {"attrs":{"app1Admin":"true","permissions":"7","hf.Affiliation":"","hf.EnrollmentID":"abacUser1","hf.Type":"client"}}

ヒント: 属性 hf.EnrollmentIDhf.Type、および hf.Affiliation はすべての ID に対して自動的に登録されます。

チェーンコードでユーザー属性を抽出する

詳細については、「chaincode/shim/ext/cid」をご参照ください。

id, err := cid.New(stub)
fmt.Println("client ID object:")
fmt.Println(id)
if err != nil {
    return shim.Error(err.Error())
}
val, ok, err = cid.GetAttributeValue(stub, "permissions")
if err != nil {
    return shim.Error(err.Error())
}
if !ok {
    return shim.Error("The client identity does not possess the attribute:permissions")
}
err := cid.AssertAttributeValue(stub, "permissions", "7")
if err != nil {
   return shim.Error("The client identity does not have the permissions")
}
fmt.Println("permissions:")
fmt.Println(val)