ユーザーアクセス制御
アクセス制御の決定は、ID の属性に基づいてチェーンコード (および Hyperledger Fabric ランタイム) によって行うことができます。これは、属性ベースのアクセス制御 (ABAC) と呼ばれます。ユーザー ID を登録する際に、証明書 (ECert) に 1 つ以上の属性名と値を含めることができます。その後、チェーンコードは属性の値を抽出してアクセス制御の決定を行います。
たとえば、アプリケーション app1 を開発していて、特定のチェーンコード操作を app1 管理者のみがアクセスできるようにしたいとします。チェーンコードは、呼び出し元の証明書 (チャネルに対して信頼されている CA によって発行されたもの) に、値が true の app1Admin という名前の属性が含まれていることを確認できます。
Hyperledger Fabric ABAC の詳細については、「属性ベースのアクセス制御」をご参照ください。
属性設定
コンソールで組織ユーザーを作成するときに、「上級」をクリックしてユーザー属性を設定できます。
Alibaba Cloud BaaS コンソール にログオンします。
[概要] ページで、[組織] を見つけ、対象の組織を見つけて、組織の名前をクリックします。
[ユーザー] をクリックします。
[ユーザーを追加] をクリックし、「上級」をクリックしてユーザー属性を設定します。
ユーザーを作成した後、ユーザー属性を確認できます。
属性設定の仕様
デリミタ「,」を使用して異なる属性に分割します
デリミタ「=」を使用して属性名と値に分割します
属性名と値は英字または数字で構成する必要があります
属性名と値はすべて文字列型です
例:
ユーザー登録証明書の「app1Admin=true,permissions=7」の属性は次のようになります。
{"attrs":{"app1Admin":"true","permissions":"7","hf.Affiliation":"","hf.EnrollmentID":"abacUser1","hf.Type":"client"}}
ヒント: 属性 hf.EnrollmentID
、hf.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)