新しいアカウントをリクエストする

ユニバーサル台帳ネットワークの新しいアカウントは、台帳にすでに存在する親アカウントによって作成する必要があります。この保護者のアカウントは、新しいアカウントを作成するためにトランザクションに署名して送信する必要があります。

このガイドでは、ユニバーサル台帳ネットワークで新しいアカウントをリクエストする方法について説明します。学習内容:

  • Cloud Key Management Service を使用して、新しいアカウントの非対称署名鍵を作成する。

  • アカウントを作成する適切な保護者のアカウントの所有者を特定する。

  • 台帳でアカウントが作成されたら、アカウントの詳細を確認する。

始める前に

このガイドを完了するには、次のものが必要です。

  • Universal Ledger API が有効になっている Google Cloud プロジェクト。

  • roles/universalledger.networkViewer などの IAM ロール。これにより、ユニバーサル台帳ネットワークのアカウントの状態を少なくともクエリできます。

  • Cloud KMS が有効になっている Google Cloud プロジェクト。

    テスト中、このプロジェクトは Universal Ledger API が有効になっているプロジェクトと同じにできます。

    本番環境では、次のことをおすすめします。

    • Cloud KMS リソースには、他の Google Cloud リソースとは別の専用プロジェクトを使用します。
    • 使用するユニバーサル台帳ネットワークごとに、Cloud KMS 鍵を管理する別の Google Cloud プロジェクトを作成します。
  • Cloud KMS が有効になっているプロジェクトまたは親リソースに対する Cloud KMS 管理者(roles/cloudkms.admin)IAM ロール。

非対称署名鍵を作成する

ユニバーサル台帳で動作するすべてのアカウントには、非対称署名公開鍵と秘密鍵のペアが必要です。秘密鍵はトランザクションの署名に使用され、公開鍵は台帳に登録されてアカウントを識別し、署名を検証します。

次の手順では、Cloud KMS を使用して適切な鍵ペアを作成し、公開鍵を取得する方法について説明します。ECDSA P-256 鍵と SHA-256 ダイジェストなど、ユニバーサル台帳の要件と互換性のある鍵と署名が生成される限り、他の鍵管理アプローチを使用できます。

  1. コンソールで Cloud Shell をアクティブにします。 Google Cloud

    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: キーリングのロケーション(例: global)。 Google Cloud
  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 ロケーション 。

    これにより、ユニバーサル台帳でサポートされている SHA-256 ダイジェストを使用した P-256 曲線上に ECDSA 鍵ペアが作成されます。サポートされている形式の一覧については、 the KeyFormat リファレンスをご覧ください。

  5. 鍵バージョンの公開鍵部分を gcloud kms keys versions get-public-key コマンドを使用して取得します。

    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 ロケーション。

    このコマンドは、ユニバーサル台帳 API で使用するのに適した PEM エンコード形式(KEY_FORMAT_PEM_EC_P256_SHA256)で公開鍵を出力します。例:

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

アカウントを作成できるユーザーを特定する

作成するアカウントの種類によって、作成権限を持つ台帳の親アカウントが決まります。その保護者のアカウントの所有者を特定する必要があります。ユニバーサル台帳のアカウントの種類については、主なコンセプトをご覧ください。

アカウントの種類 作成者 トランザクションの送信
通貨オペレーター プラットフォーム オペレーター CreateCurrencyOperator
クリアリングハウス 通貨オペレーター CreateClearinghouse
アカウント マネージャー 通貨オペレーター CreateAccountManager
トークン マネージャー 通貨オペレーター CreateTokenManager
ユーザー アカウント アカウント マネージャー CreateAccount

特定したら、アカウントを作成できる保護者のアカウントの所有者と調整して、次の詳細情報を共有する必要があります。

  • アカウントを作成するネットワークの名前。限定公開 プレビュー版については、 利用可能なネットワークの一覧をご覧ください。
  • 非対称署名鍵の公開部分と、対応する KeyFormat。 このガイドの gcloud コマンドに沿って操作した場合、形式は KEY_FORMAT_PEM_EC_P256_SHA256 です。
  • 新しいアカウントに関連付けられた台帳に記録する関連情報を含むアカウント コメント文字列。これは不透明な値で、台帳に保存されますが、ユニバーサル台帳では解釈されません。作成すると、このフィールドは変更できなくなり、ネットワークにアクセスできるすべてのユーザーが読み取ることができます。
  • アカウントの作成時に送信するトランザクションの入力に必要な追加の詳細情報。たとえば、通貨オペレーターを作成するには、作成する新しいオペレーターが管理する 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",
    }
  }
}

次のステップ