새 계정 요청

Universal Ledger 네트워크의 새 계정은 원장에 이미 있는 권한이 있는 관리자 계정으로 만들어야 합니다. 이 권한이 있는 계정은 새 계정을 만들기 위해 트랜잭션에 서명하고 제출해야 합니다.

이 가이드에서는 Universal Ledger 네트워크에서 새 계정을 요청하는 방법을 설명합니다. 학습 내용:

  • Cloud Key Management Service를 사용하여 새 계정의 비대칭 서명 키를 만듭니다.

  • 계정을 만들 수 있는 적절한 권한이 있는 계정의 소유자를 식별합니다.

  • 원장에 계정이 생성되면 계정 세부정보를 확인합니다.

시작하기 전에

이 가이드를 완료하려면 다음이 필요합니다.

  • Universal Ledger API가 사용 설정된 Google Cloud 프로젝트

  • Universal Ledger 네트워크에서 계정 상태를 쿼리할 수 있도록 roles/universalledger.networkViewer와 같은 IAM 역할

  • Cloud KMS가 사용 설정된 Google Cloud 프로젝트

    테스트 중에 이 프로젝트는 Universal Ledger API가 사용 설정된 프로젝트와 동일할 수 있습니다.

    프로덕션에서는 다음을 수행하는 것이 좋습니다.

    • 다른 리소스와 별개로 Cloud KMS 리소스에 전용 프로젝트를 사용합니다. 다른 Google Cloud 리소스
    • 사용하는 각 Universal Ledger 네트워크의 Cloud KMS 키를 관리하기 위해 별도의 Google Cloud 프로젝트를 만듭니다.
  • Cloud KMS가 사용 설정된 프로젝트 또는 상위 리소스의 Cloud KMS 관리자 (roles/cloudkms.admin) IAM 역할

비대칭 서명 키 만들기

Universal Ledger에서 작동하는 모든 계정에는 비대칭 서명 공개-비공개 키 쌍이 필요합니다. 비공개 키는 트랜잭션 서명에 사용되고 공개 키는 계정을 식별하고 서명을 확인하기 위해 원장에 등록됩니다.

다음 단계에서는 Cloud KMS를 사용하여 적절한 키 쌍을 만들고 공개 키를 검색하는 방법을 안내합니다. SHA-256 다이제스트가 있는 ECDSA P-256 키와 같이 Universal Ledger 요구사항과 호환되는 키와 서명을 생성하는 한 다른 키 관리 접근 방식을 사용할 수 있습니다. 지원되는 키 형식에 대한 자세한 내용은 KeyFormat 참조를 확인하세요.

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

  2. 기본 프로젝트를 설정합니다.

    gcloud config set project KEYS_PROJECT
    

    KEYS_PROJECT를 Cloud KMS 리소스에 사용할 프로젝트의 ID로 바꿉니다.

  3. 아직 키링을 만들지 않은 경우 키를 보관할 키링을 gcloud kms keyrings create 명령어를 사용하여 만듭니다.

    gcloud kms keyrings create KEY_RING \
        --location=KEY_LOCATION
    

    다음을 바꿉니다.

    • KEY_RING: 만들 키링의 이름(예: test-gcul-keys) 이 이름은 조직의 요구사항에 따라 지정되며 원장에 기록할 필요는 없습니다.
    • KEY_LOCATION: 키링의 위치 Google Cloud (예: global)
  4. 원장에서 사용할 각 계정에 대해 비대칭 서명 키를 gcloud kms keys create 명령어를 사용하여 만듭니다.

    gcloud kms keys create KEY_NAME \
        --keyring=KEY_RING \
        --location=KEY_LOCATION \
        --purpose="asymmetric-signing" \
        --default-algorithm="ec-sign-p256-sha256"
    

    다음을 바꿉니다.

    • KEY_NAME: 만들 키의 이름(예: usd-operator 또는 eur-clearinghouse) 이 이름은 조직의 요구사항에 따라 지정되며 원장에 기록할 필요는 없습니다.
    • KEY_RING: 키를 보관할 키링의 이름
    • KEY_LOCATION: 키의 Google Cloud 위치

    이렇게 하면 Universal Ledger에서 지원하는 SHA-256 다이제스트가 있는 P-256 곡선에 ECDSA 키 쌍이 생성됩니다. 지원되는 형식의 목록은 the KeyFormat 참조를 확인하세요.

  5. ` gcloud kms keys versions get-public-key command` 명령어를 사용하여 키 버전의 공개 키 부분을 검색합니다.

    gcloud kms keys versions get-public-key KEY_VERSION \
        --key=KEY_NAME \
        --keyring=KEY_RING \
        --location=KEY_LOCATION
    

    다음을 바꿉니다.

    • KEY_VERSION: 가져올 키의 버전입니다. 새로 만든 키의 경우 1입니다.
    • KEY_NAME: 키의 이름
    • KEY_RING: 키가 포함된 키링의 이름
    • KEY_LOCATION: Google Cloud 키의 위치

    이 명령어는 다음과 같이 Universal Ledger API와 함께 사용하기에 적합한 PEM 인코딩 형식(KEY_FORMAT_PEM_EC_P256_SHA256)으로 공개 키를 출력합니다.

    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJ/vWkd5wgakFbVD25k8WM9Ll6We+
    c8RVDS0R4G8xetsmFjfNW/ZxwWeB86IvMjxY8ZsdU9+W7BL5YM6rUB5yCQ==
    -----END PUBLIC KEY-----
    

계정을 만들 수 있는 사용자 식별

만들려는 계정 유형에 따라 계정을 만들 권한이 있는 원장의 권한이 있는 계정이 결정됩니다. 권한이 있는 계정의 소유자를 식별해야 합니다. Universal Ledger의 계정 유형에 대한 자세한 내용은 주요 개념을 참조하세요.

계정 유형 작성자 트랜잭션 제출
통화 운영자 플랫폼 운영자 CreateCurrencyOperator
청산소 통화 운영자 CreateClearinghouse
계정 관리자 통화 운영자 CreateAccountManager
토큰 관리자 통화 운영자 CreateTokenManager
사용자 계정 계정 관리자 CreateAccount

식별되면 계정을 만들 수 있는 권한이 있는 계정의 소유자와 다음 세부정보를 공유하고 조정해야 합니다.

  • 계정을 만들려는 네트워크의 이름입니다. 지원되는 리전 목록은 사용 가능한 네트워크 및 리전을 참조하세요.
  • 비대칭 서명 키의 공개 부분과 해당 KeyFormat입니다. 이 가이드의 gcloud 명령어를 따른 경우 형식은 KEY_FORMAT_PEM_EC_P256_SHA256입니다.
  • 새 계정과 연결된 원장에 기록할 관련 정보가 포함된 계정 댓글 문자열입니다. 이는 원장에 저장되지만 Universal Ledger에서 해석하지 않는 불투명한 값입니다. 생성되면 이 필드는 변경할 수 없으며 네트워크에 액세스할 수 있는 모든 사용자가 읽을 수 있습니다.
  • 계정을 만들 때 제출할 트랜잭션을 채우는 데 필요한 추가 세부정보입니다. 예를 들어 통화 운영자를 만들려면 새로 만들 운영자가 관리할 currency도 지정해야 합니다.

미리보기 중에 사용 사례와 관련된 권한이 있는 계정의 소유자가 누구인지 확실하지 않은 경우 Google 담당자에게 문의하세요.

계정이 생성되었는지 확인

권한이 있는 계정에서 제출한 트랜잭션이 원장에서 성공적으로 실행되고 완료되면 QueryTransactionState 메서드의 응답에 새로 생성된 계정의 계정 ID가 포함된 transaction_output 이벤트가 있는 TransactionCertificate 가 포함됩니다.

ID는 다음 예와 비슷하게 표시됩니다.

1:USR:XTS:025sAZ55EqGKF6vpXEpSS8X891nNDEQU9yFQKYkcFzAb6

다음 REST 요청을 제출하여 원장에 새 계정이 있는지 확인할 수 있습니다.

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://universalledger.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/NETWORK_NAME:queryAccount?account_id=ACCOUNT_ID

다음을 바꿉니다.

  • PROJECT_ID: Universal Ledger API가 사용 설정된 프로젝트의 ID입니다.
  • LOCATION: 연결할 엔드포인트의 위치입니다.
  • NETWORK_NAME: 계정이 생성된 네트워크의 이름입니다.
  • ACCOUNT_ID: 새로 생성된 계정의 ID입니다.

다음과 비슷한 출력이 표시됩니다.

{
  "account": {
    "publicKey": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFSi92V2tkNXdnYWtGYlZEMjVrOFdNOUxsNldlKwpjOFJWRFMwUjRHOHhldHNtRmpmTlcvWnh3V2VCODZJdk1qeFk4WnNkVTkrVzdCTDVZTTZyVUI1eUNRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t",
    "roundId": "10962032",
    "comment": "My Test Account",
    "userDetails": {
      "accountManager": {
        "id": "1:ACT:XTS:02f4VSHyPsXeMZmcogbNx7bP4kfn5DYvc7d2K52RYAFd3"
      },
      "tokenManager": {
        "id": "1:TKN:XTS:024fqJS87dJ94ETN9PGhTCGd86btXj9iyWLxGQWgC3dde"
      },
      "roles": [
        "ROLE_PAYER",
        "ROLE_RECEIVER"
      ],
      "accountStatus": "ACCOUNT_STATUS_ACTIVE",
    }
  }
}

다음 단계

  • Universal Ledger API에 RPC 요청을 보내는 방법을 알아봅니다.
  • 새 계정을 사용하여 제출할 수 있는 트랜잭션에 대해 알아봅니다.