* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다.
상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : )
https://hyperledger.github.io/composer/latest/tutorials/acl-trading
Access control과 authorization은 하이퍼레저 컴포저의 매우 중요한 부분이며, 이는 블록체인에 있는 멤버 조직간 공유되는 비즈니스 네트워크의 securiry architecture입니다. 하이퍼레저 컴포저는 관리자가 어떤 참가자가 비즈니스 네트워크의 어떤 리소스 혹은 데이터에 접근할 수 있는지를 제어할 수 있게 해줍니다. 이 참가자들은 일반적으로 각 멤버 조직 내에서 동작하며 원장에 대한 그 조직만의 접근 제어 요구사항을 가지고 있습니다. 동시에 모든 멤버 조직 혹은 비즈니스 네트워크에서 상호작용하는 특정 멤버에 공통으로 공유되는 데이터에 대한 접근 제한도 가지고 있습니다.
이 튜토리얼에서는 Commodity Trading network라는 비즈니스 네트워크를 살펴봅니다. 이 네트워크는 이전 튜토리얼 혹은 sample networks에서 볼 수 있습니다. 우리는 이 샘플 네트워크에서 ACL이 어떻게 동작하는지 예를 살펴봅니다.
Access control rules (ACLs를 정의하는 언어)는 크게 두 가지로 나뉩니다.
- 시스템 네임스페이스 (네트워크 및 시스템 동작 관리) 내 시스템, 네트워크, 관리자 리소스 및 동작에 대한 접근 권한
- 특정 도메인 비즈니스 네트워크의 ACLs를 통해 주어진 비즈니스 네트워크 자체에 대한 (예: Create, Read, Update assets) 리소스 및 연산 수행에 대한 접근 권한
이 튜토리얼은 몇 가지 간단한 조건의 접근 규칙을 실행해보기 위해 온라인 플레이그라운드를 사용합니다. 그렇게 하면 다양한 id로 샘플 네트워크와 상호작용할 수 있습니다. 이 다양한 id들은 결국에는 우리가 접근 제어를 적용하길 원하는 블록체인의 사용자입니다. 또, 참가자 역할이 어떻게 접근을 제어할 수 있는지도 살펴보고, 여러 id들을 지정된 참가자 역할 (예: Regulator)에 매핑할 수도 있습니다. 실제 블록체인 네트워크에서 Node JS 애플리케이션, CLI 혹은 실제 REST 연산 같은 모든 작업은 비즈니스 네트워크를 제어하는 ACLs의 대상으로 제어됩니다. 책임성은 id레벨로 볼 수 있습니다.
원하는 경우, 이 튜토리얼의 규칙을 이전에 개발한 하이퍼레저 컴포저에 적용할 수도 있습니다. developer tutorial에 사용된 샘플 Commodity Trading 비즈니스 네트워크를 배포하기만 하면 됩니다. 단, 앞에서 언급했듯이 global trading network ACL 규칙을 제거하는 것을 기억하세요. 그러면 해당 환경에서 작업할 준비가 된 것입니다.
Prerequisites
없음. 인터넷 연결만 되면 됨
Step One: Access the Online Playground and select your business nework
우리는 컴포저 샘플 네트워크 저장소에 있는 샘플 비즈니스 네트워크인 trade-network를 사용할 것입니다.
- 온라인 플레이 그라운드(https://composer-playground.mybluemix.net/login)로 가서 필요한 경우 로컬 저장 공간을 지우세요. Welcome로고를 클릭하면 시작할 준비가 됩니다.
- Deploy a new business network 모달/아이콘을 클릭하세요.
- 스크롤을 내려 trade-network 샘플을 클릭하세요. 위로 다시 스크롤하면 이름, 설명 및 네트워크 관리 카드 필드가 채워집니다.
- Deploy 버튼이 활성화된 상태에서 비즈니스 네트워크를 배포하기 위해 Deploy 버튼을 클릭하세요. (이름이 trade-network가 맞는지 확인하세요)
- 마지막으로 'Connect Now'를 눌러 배포된 비즈니스 네트워크에 접속하세요. (default id는 우측 상단에 표시되어 있습니다)
- 'Trade Network' README 파일이 활성화되어 있어야 하며 왼쪽 열에는 비즈니스 네트워크의 구성 요소를 볼 수 있습니다. 이 중 하나는 리소스에 대한 액세스를 제어하는 ACL파일인 permissions.acl입니다. 기본적으로 샘플 비즈니스 네트워크는 모든 액세스 기능을 켜놓습니다. 물론, 궁극적으로 제품 스타일의 환경과는 다릅니다.
Create Trader Participants
- 화면 상단의 'Test' 탭을 클릭하세요. 이 탭은 샘플 Trader 참가자를 생성하기 위한 곳입니다.
- 왼쪽의 Trader를 클릭하세요. 그리고 아래와 같이 우측 상단 Create New Participant를 클릭해 아래와 같이 새로운 참가자를 생성하세요. - 아래 예제는 'TRADER1'을 나타냅니다.
> 1st record:
{
"$class": "org.example.trading.Trader",
"tradeId": "TRADER1",
"firstName": "Jenny",
"lastName": "Jones"
}
위 step 2를 반복해서 5명의 참가자를 추가로 생성하세요. (TRADER2-6) 위 샘플데이터를 참고해 이름을 적절히 변경합니다.
> 2nd record:
{
"$class": "org.example.trading.Trader",
"tradeId": "TRADER2",
"firstName": "Jack",
"lastName": "Sock"
}
> 3rd record:
{
"$class": "org.example.trading.Trader",
"tradeId": "TRADER3",
"firstName": "Rainer",
"lastName": "Valens"
}
> 4st record:
{
"$class": "org.example.trading.Trader",
"tradeId": "TRADER4",
"firstName": "Davor",
"lastName": "Dolittle"
}
> 5st record:
{
"$class": "org.example.trading.Trader",
"tradeId": "TRADER6",
"firstName": "Lars",
"lastName": "Graf"
}
Create Commodity Assets
'Test' 탭에서 왼쪽 'Commodity'를 클릭해 Commodity records를 생성합니다. 생성하는 Commodity의 소유자 (owner field) 는 위에서 생성한 'Trader' 참가자와 관련이 있습니다. owner이 relationship field임을 주목하세요.
> 1st record:
{
"$class": "org.example.trading.Commodity",
"tradingSymbol": "EMA",
"description": "Corn",
"mainExchange": "EURONEXT",
"quantity": 10,
"owner": "resource:org.example.trading.Trader#TRADER1"
}
> 2nd record:
{
"$class": "org.example.trading.Commodity",
"tradingSymbol": "CC",
"description": "Cocoa",
"mainExchange": "ICE",
"quantity": 80,
"owner": "resource:org.example.trading.Trader#TRADER2"
}
> 3rd record:
{
"$class": "org.example.trading.Commodity",
"tradingSymbol": "HO",
"description": "Heating Oil",
"mainExchange": "NYMEX",
"quantity": 40,
"owner": "resource:org.example.trading.Trader#TRADER3"
}
> 4th record:
{
"$class": "org.example.trading.Commodity",
"tradingSymbol": "HG",
"description": "Copper",
"mainExchange": "COMEX",
"quantity": 100,
"owner": "resource:org.example.trading.Trader#TRADER4"
}
> 5th record:
{
"$class": "org.example.trading.Commodity",
"tradingSymbol": "SM",
"description": "Soybean Meal",
"mainExchange": "CBOT",
"quantity": 70,
"owner": "resource:org.example.trading.Trader#TRADER5"
}
> 6th record:
{
"$class": "org.example.trading.Commodity",
"tradingSymbol": "AG",
"description": "Silver",
"mainExchange": "CBOT",
"quantity": 60,
"owner": "resource:org.example.trading.Trader#TRADER6"
}
Create Identities to test ACLs
다음으로 trader id를 생성합니다. 우리는 Traders (TRADER1-6)의 id를 발행해야 합니다. 그래야 이 id의 접근을 테스트할 수 있기 때문입니다. (각 Trader 참가자 기록에 매핑됨)
- 우측 상단의 admin을 클릭하고 드롭다운 메뉴에서 'ID Registry'를 선택하세요.
- 우측 상단의 'Issue new ID'를 클릭하세요. 그러면 'Issue New Identity' 창이 뜰 것입니다.
- ID Name 필드에 id로 tid1을 입력하세요. 이는 TRADER1의 id로 사용됩니다.
- Participant 필드에 TRADER1을 입력해서 참가자를 검색하세요. 그리고 참가자의 풀네임을 클릭하세요.
- 'Create New'를 클릭해 계속진행합니다.
'Issue new ID' 단계 (위의 step 2-5)를 tid2-6까지 각 TRADER 참가자에 매핑하기 위해 반복하세요.
중요: 하이퍼레저 컴포저 기반 환경 (온라인 환경이 아닌) 에서 새로운 ID를 발급하는 경우 'Add to Wallet' 옵션을 사용해 발급된 id를 wallet에 모두 추가해야 합니다.
Add Commodity Trading network access control rules
배포한 'Commodity Trade network' 샘플 네트워크는 비즈니스 네트워크 참가자가 asset registry같은 레지스트리에 접근할 수 있게 하거나, 혹은 원장의 이력 레코드를 볼 수 있게 하는 것을 관리할 수 있도록 표준 시스템 및 네트워크 ACLs 규칙을 가지고 있습니다.
하지만 우리는 거래와 관련된 특정 접근 제어 규칙을 추가하려고 합니다. 먼저 달성하고자 하는 것을 정의하는 것으로 시작합니다. ACLs의 주요 특징은 명시적으로 허용하지 않는 한, 비즈니스 네트워크 내 리소스에 대한 기본적인 액세스는 참가자들에게 암묵적으로 거부되어 있는 것입니다.
permissions.acl파일의 현재 ACLs를 보면 파일에 특정 시스템 또는 관리가 규칙이 정의되어 있음을 알 수 있습니다. 이는 참가자가 컴포저 시스템 이력 레지스트리에 기록하기 같은 컴포저 시스템 연산을 사용할 수 있도록 하는 것입니다.
시작하기전, 우리는 permissions.acl 파일에 있는 하나의 'global' 규칙을 제거해야합니다. 왜냐하면 우리의 거래 네트워크는 일반적으로 샘플 네트워크처럼 사용되기 때문입니다. 아래는 제거할 규칙입니다.
rule Default {
description: "Allow all participants access to all resources"
participant: "ANY"
operation: ALL
resource: "org.example.trading.*"
action: ALLOW
}
permissions.acl 파일에서 위 내용을 지우고 시스템 또는 관리자 규칙은 내버려둡니다. 그리고나서 좌측 하단의 UPDATE 버튼을 클릭해 변경된 내용을 적용하세요.
우리 규칙 측면에서, 아래는 우리가 적용하고자 하는 정책입니다.
Everyday activities - rule objectives:
1a. Trader는 자신의 profile만을 조회하고 업데이트할 수 있습니다. (Participant record)
1b. Trader는 자신이 소유한 assets과 관련된 모든 연산에 접근할 수 있습니다. (Commodities)
'Trader' 유형의 참가자만이 Trade 트랜잭션을 제출할 수 있도록 제한합니다. (시간이 지나면 실제 운영중인 비즈니스 네트워크 모델에 정의된 여러 트랜잭션이 있을 수도 있으므로)
Historical records - rule objectives:
- Trader은 트랜잭션 이력 중 그들이 생성한 것만을 볼 수 있습니다.
- REG (Regulator) 유형의 참가자는 Traders (참가자들이 자신의 profile에서 작업하는 것과 마찬가지로) 에 의해 생성된 모든 트랜잭션이력을 볼 수 있습니다. 이와 관련해 2가지 규칙 (4a, 4b)가 있습니다
이 시점에서 org.example.trading (우리의 Commodity Trading 비즈니스 네트워크) 네임스페이스에는 비즈니스 네트워크 ACLs이 정의되어 있지 않습니다. (단지 시스템용만 존재) 그러므로 비즈니스 네트워크 내 리소스에 대한 접근은 초기값에 의해 명시적으로 거부되어 있습니다.
Rule 1a - Trader profile restriction rule
먼저, Trader가 자신의 기록만을 조회하고 업데이트할 수 있도록 하는 규칙입니다.
- tid1 id로 전환하기 위해 우측 상단의 current identity를 클릭하고 ID Registry를 선택 후 tid1의 'use now'를 클릭하세요. 그런 다음 'Test' 탭으로 이동합니다.
- 현재 아무런 Trader 기록이 없는 것을 확인하세요.
- 우측 상단 'ID Registry'를 사용해 'admin' 사용자 id로 전환합니다. 그리고 'Define' 탭으로 가서 왼쪽 'Access Control' (permissions.acl)을 클릭하세요.
- 아래 규칙을 주석이 끝나고 코드의 제일 위에 붙여넣으세요. 붙여넣고 나면 3개의 'System' 및 'Network' 시스템 규칙이 있을 것입니다.
Rule:
rule R1a_TraderSeeUpdateThemselvesOnly {
description: "Trader can see and update their own record only"
participant(t): "org.example.trading.Trader"
operation: READ, UPDATE
resource(v): "org.example.trading.Trader"
condition: (v.getIdentifier() == t.getIdentifier())
action: ALLOW
}
좌측 하단의 UPDATE버튼을 눌러 비즈니스 네트워크를 업데이트 하세요.
이 규칙은 여기서는 플레이그라운드, 혹은 실제 애플리케이션의 current id에 매핑된 현재 Trader 참가자가 자신의 Trader 기록을 READ / UPDATE할 수 있도록 합니다.
- TEST THE ACL: 우측 상단 'ID Registry'를 이용해 tid1의 id로 사용자를 전환하고 'Test' 탭을 클릭하세요. TRADER1의 기록만 있는지 확인하세요. 이 id로는 그것만 보여야 합니다.
Rule 1b - Trader Asset Ownership - allow update by owners only
기본적으로, Trader는 이전에 생성된 Commodity를 보거나 업데이트할 수 없습니다.
우리는 Trader가 소유자로 지정된 Commodity에 접근할 수 있는 규칙이 필요합니다.
- tid1 id로 전환하기 위해 우측 상단의 current identity를 클릭하고 ID Registry를 선택 후 tid1의 'use now'를 클릭하세요. 그런 다음 'Test' 탭으로 이동합니다.
- 현재 아무런 Trader 기록이 없는 것을 확인하세요.
- 우측 상단 'ID Registry'를 사용해 'admin' 사용자 id로 전환합니다. 그리고 'Define' 탭으로 가서 왼쪽 'Access Control' (permissions.acl)을 클릭하세요.
- 아래 규칙을 위에서 붙여넣은 규칙들 위에 첫번째 줄에 붙여넣으세요.
Rule:
rule R1b_TraderSeeTheirCommodities {
description: "Trader can see/work with their own Commodities"
participant(t): "org.example.trading.Trader"
operation: ALL
resource(c): "org.example.trading.Commodity"
condition: (c.owner.getIdentifier() == t.getIdentifier())
action: ALLOW
}
좌측 하단의 UPDATE버튼을 눌러 비즈니스 네트워크를 업데이트 하세요.
이 규칙은 현재 Trader 참가자가 자신이 소유한 Commodity 리소스에 대한 모든 연산에 접근할 수 있도록 합니다.
- TEST THE ACL: 우측 상단 'ID Registry'를 이용해 tid1의 id로 사용자를 전환하고 'Test' 탭을 클릭하세요. TRADER1이 소유한 Commodity만 있는지 확인하세요. 이 id로는 그것만 보여야 합니다.
명시적으로 Trader인 TRADER1은 이 시점에 다른 Trader의 자산 (Commodity) 을 조회하거나 업데이트할 수 없습니다. 우리는 이런 기능을 위한 규칙은 필요하지 않습니다. 하지만 실제로는 특정 Trader가 소유자가 아니더라도 다른 Commodity를 볼 수 있는 것을 허용하는 비즈니스 정책이 있을 수도 있습니다.
Rule 2 - Restrictive rule: Only 'Trader' participants can submit 'Trade' smare contract transactions
기본적으로, Trader는 자신이 소유한 Commodity를 업데이트 하기 위한 Trade 트랜잭션 (모델에 정의되어 있고, Script 파일에 스마트 컨트랙트 로직이 쓰여 있는) 을 제출할 수 없습니다.
우리는 Trader가 자신이 'owner'로 지정된 Trade 트랜잭션을 제출할 수 있도록 하는 규칙이 필요합니다. Trade 트랜잭션은 현재 소유자가 Commodity의 소유자를 다른 Trader로 지정할 수 있게 합니다.
- tid1 id로 전환하기 위해 우측 상단의 current identity를 클릭하고 ID Registry를 선택 후 tid1의 'use now'를 클릭하세요. 그런 다음 'Test' 탭으로 이동합니다.
- 아래 트랜잭션을 복사하고 붙여넣어 트랜잭션을 제출한 다음 현재는 Commodity의 소유자를 변경하기 위해 Trade 트랜잭션을 제출할 수 없는 것을 확인하세요. 아마 트랜잭션을 제출하기 위한 CREATE를 할 수 없다는 메세지를 받을 것입니다.
JSON to copy:
{
"$class": "org.example.trading.Trade",
"commodity": "resource:org.example.trading.Commodity#EMA",
"newOwner": "resource:org.example.trading.Trader#TRADER2"
}
- 우측 상단 'ID Registry'를 사용해 'admin' 사용자 id로 전환합니다. 그리고 'Define' 탭으로 가서 왼쪽 'Access Control' (permissions.acl)을 클릭하세요.
- 아래 규칙을 위에서 붙여넣은 규칙들 위에 첫번째 줄에 붙여넣으세요.
Rule:
rule R2_EnableTradeTxn {
description: "Enable Traders to submit transactions"
participant: "org.example.trading.Trader"
operation: ALL
resource: "org.example.trading.Trade"
action: ALLOW
}
좌측 하단의 UPDATE버튼을 눌러 비즈니스 네트워크를 업데이트 하세요.
우리는 참가자가 이미 자신의 Commodity로만 작업할 수 있다는 사실을 알고 있습니다. 이렇게 하면 Trader 참가자들만 Trade 형식의 거래를 제출할 수 있습니다. (우리는 비즈니스 네트워크에서 다양한 유형의 참가자를 가질 수 있습니다.)
- TEST THE ACL: 우측 상단 'ID Registry'를 이용해 tid1의 id로 사용자를 전환하세요. - tid1은 EMA라는 id를 가진 Commodity의 소유자입니다.
a. 'Test' 탭을 클릭하세요. 그리고 아래 트랜잭션을 현재 내용 대신 붙여넣어 Trade 트랜잭션을 제출하세요.
JSON to copy:
{
"$class": "org.example.trading.Trade",
"commodity": "resource:org.example.trading.Commodity#EMA",
"newOwner": "resource:org.example.trading.Trader#TRADER2"
}
b. 왼쪽에 있는 'All Transactions'로 이동하여 트랜잭션이 제출되었는지 확인하세요. Historian의 첫 번째 레코드는 TRADE 트랜잭션이 전송되었음을 확인합니다. 참가자 TRADER1은 더이상 commodity의 소유자가 아닙니다. 반면 tid2의 id로 사용자를 변경하면 TRADER2가 소유하고 있는 두 개의 Commodity가 보일 것입니다.
Rule 3 - Enabling rule: Allow Traders to see their own historical records only
기본적으로, 시스템 ACLs (Historial records 레지스트리 일부인) 때문에 각 Trader (예: tid1, tid2 혹은 이와 관련된 id들) 은 모든 트랜잭션의 이력을 볼 수 있습니다. 예시로는 admin에 의해 수행되는 UpgradeBusinessNetwork가 있습니다.
우리는 Trader가 그들이 Historian에 제출한 트랜잭션만 볼 수 있게 권한을 낮춰야 합니다.
- tid3 id로 전환하기 위해 우측 상단의 current identity를 클릭하고 ID Registry를 선택 후 tid3의 'use now'를 클릭하세요. 그런 다음 'Test' 탭으로 이동합니다.
- 현재 'system'과 관련된 트랜잭션 활동 및 다른 trdaer (TRADER1 and TRADER2) 도 볼 수 있는지 확인하세요.
- 우측 상단 'ID Registry'를 사용해 'admin' 사용자 id로 전환합니다. 그리고 'Define' 탭으로 가서 왼쪽 'Access Control' (permissions.acl)을 클릭하세요.
- 아래 규칙을 위에서 붙여넣은 규칙들 위에 첫번째 줄에 붙여넣으세요.
Rule:
rule R3_TradersSeeOwnHistoryOnly {
description: "Traders should be able to see the history of their own transactions only"
participant(t): "org.example.trading.Trader"
operation: READ
resource(v): "org.hyperledger.composer.system.HistorianRecord"
condition: (v.participantInvoking.getIdentifier() != t.getIdentifier())
action: DENY
}
이 규칙은 현재 Trader 참가자들이 자신이 블록체인 호출한 트랜잭션만 볼 수 있게 제한합니다.
좌측 하단의 UPDATE버튼을 눌러 비즈니스 네트워크를 업데이트 하세요.
- TEST THE ACL:
a. 우측 상단 'ID Registry'를 이용해 tid3의 id로 사용자를 전환하세요. 'Identity Activation' 유형의 엔트리만 볼 수 있고 TRADER1과 TRADER2와 관련해서 제출된 트랜잭션 이력은 아무 것도 없을 것입니다. 이 것이 우리가 기대한 결과입니다.
b. 다음으로 tid1의 id로 사용자를 전환하세요. tid1과 관련된 트랜잭션 이력 (이전에 제출한 'TRADE' 트랜잭션 포함) 만 볼 수 있을 것입니다. 특히 Commodity 'CC' 소유주를 TRADER2로 이동한 것. (반대로 tid2, 전송받은 사람은 tid1에 의해 제출된 'TRADE' 트랜잭션의 이력을 볼 수 없고, 전송받은 Commodity 자산만 볼 수 있습니다.)
Rule 4a & 4b - Enabling rule: Allow Regulators to see their own profile and all historical activity, including Trades
이 규칙은 regulator가 비즈니스 네트워크에서 수행된 과거 거래를 검토/감시하는 것을 나타냅니다. 참가자 혹은 자산 자체에 대한 접근이 반드시 필요한 것은 아니며, 오히려 이와 관련된 활동을 필요로 합니다. (유즈케이스나 정책에 따라서)
우리는 아직 'Commodity Trading' 비즈니스 네트워크 모델에 'Regulator'를 갖고 있지 않습니다. 그래서 우리는 별도의 참가자 유형으로 이것을 추가한 다음, 누군가 regulator 역할을 할 수 있도록 만들어 hisotical records에 접근할 수 있게 할 것입니다. 하나 이상의 ID를 참가자 instance에 매핑할 수 있으며, Regulator가 그것으 ㄹ보여주는 좋은 예입니다.
- admin id로 사용자를 전환하고 'Define' 탭을 클릭하세요.
- 모델 파일을 클릭하고 새로운 참가자 유형을 추가하세요. (Trader 참가자 아래에 추가하세요.)
Model:
participant Regulator identified by regId {
o String regId
o String firstName
o String lastName
}
- 네트워크 업데이트를 위해 UPDATE 버튼을 클릭하세요.
- 'admin' 계정에서 'Test' 탭으로 이동해 아래처럼 Regulator 참가자를 생성하세요.
Create the record:
{
"$class": "org.example.trading.Regulator",
"regId": "Reg101",
"firstName": "Jon",
"lastName": "Doe"
}
- ID registry에서 ID 101의 id를 생성하고 위에서 생성한 regulator 참가자인 'Reg101'에 매핑시키세요.
이 시점에서 Regulator는 시스템 ACL 규칙이 먼저 정의되었기 때문에 컴포저의 Historian에 있는 시스템 트랜잭션의 이력을 확인할 수 있습니다. 하지만 자신의 참가자 profile은 확인할 수 없습니다.
- 아래 규칙을 추가하세요.
Rule:
rule R4a_RegulatorSeeThemselves {
description: "Regulators can see and update their own record"
participant: "org.example.trading.Regulator"
operation: READ, UPDATE
resource: "org.example.trading.Regulator"
action: ALLOW
}
이 규칙은 단지 Regulator 참가자가 자신의 profile 기록을 업데이트 할 수 있게 하는 것입니다. (업데이트하길 원한다면 위에서 비슷한 것을 했으므로 테스트해볼수도 있습니다.)
비즈니스 네트워크에 새 규칙을 업데이트하기 위해 좌측 하단의 UPDATE 버튼을 클릭하세요.
- Id Registry에서 Regulator id인 101로 사용자를 변경하고 'Use Now'를 클릭하세요.
- 이전 트랜잭션을 보여주는 Historical records를 볼 수 있는지 확인하세요. 그리고 AddAsset이나 AddParticipant같은 시스템 유형의 트랜잭션 활동에 대한 'view record'를 클릭하세요. Regulator역할을 가진 참가자라면 이 활동을 수행할 수 있습니다.
- TRADE 트랜잭션에 대한 'view record'를 클릭하세요. 아무 일도 일어나지 않을 것입니다. regulator는 현재 ACLs를 통해 트랜잭션 키록을 볼 수 있는 권한이 없습니다.
- 규칙 변경을 위해 admin 사용자 id로 전환합니다.
- 아래 Regulator 권한 규칙을 permission.acl 파일 제일 위에 추가하세요.
Rule:
rule R4b_RegTransView {
description: "Grant Regulator full access to Trade Transactions"
participant: "org.example.trading.Regulator"
operation: ALL
resource: "org.example.trading.Trade"
action: ALLOW
}
좌측 하단의 UPDATE버튼을 눌러 비즈니스 네트워크를 업데이트 하세요.
이 규칙은 Regulator가 Trader 트랜잭션 리소스에 접근할 수 있게 해줍니다. 즉 Historian의 'view record'에서 Trade 트랜잭션을 볼 수 있습니다.
이 규칙은 또한 regulator에 매핑되거나 Regulator 참가자 registry에 있는 모든 id에 적용됩니다.
- TEST THE ACL: trade 트랜잭션으로 다시 돌아가서 view the record를 수행할 수 있는지 확인하세요.
이 튜토리얼에서, 우리는 ACL 규칙을 순차적으로 생성하는 방법을 해보았으며, 예제인 Commodity Trading 비즈니스 네트워크의 참가자에게 부여되어야 하는 필수적인 접근 제어만 허용햇씁니다. 우리는 ACL 규칙이 참가자 (혹은 참가자 역할)에 적용되는 리소스에 대한 권한 부여 및 제어를 제공하는 방법을 살펴보았습니다. ACL은 리소스를 생성, 삭제 또는 업데이트하거나 트랜잭션을 실행할 수 있는지 여부에 관계없이 리소스 및 트랜잭션에 대한 접근 제어를 관리합니다. 우리는 또한 Access Control Language와 규칙에 대한 권한도 갖고 있습니다. '누가' '무엇을' 원장에서 할 수 있는지 능력을 가지고 있는지에 대한 조건이나 기준을 정의합니다.