ユニバーサル台帳ネットワークの新しいアカウントは、台帳にすでに存在する親アカウントによって作成する必要があります。この保護者のアカウントは、新しいアカウントを作成するためにトランザクションに署名して送信する必要があります。
このガイドでは、ユニバーサル台帳ネットワークで新しいアカウントをリクエストする方法について説明します。学習内容:
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 ダイジェストなど、ユニバーサル台帳の要件と互換性のある鍵と署名が生成される限り、他の鍵管理アプローチを使用できます。
-
コンソールで Cloud Shell をアクティブにします。 Google Cloud
デフォルト プロジェクトを設定します。
gcloud config set project KEYS_PROJECTKEYS_PROJECTは、Cloud KMS リソースに使用するプロジェクトの ID に置き換えます。まだ作成していない場合は、鍵を保持するキーリングを
gcloud kms keyrings createコマンドを使用して作成します。gcloud kms keyrings create KEY_RING \ --location=KEY_LOCATION次のように置き換えます。
KEY_RING: 作成する鍵リングの名前(例:test-gcul-keys)。この名前は組織のニーズに合わせて使用するものであり、台帳に記録する必要はありません。KEY_LOCATION: キーリングのロケーション(例:global)。 Google Cloud
台帳で使用するアカウントごとに、非対称署名 鍵を
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リファレンスをご覧ください。鍵バージョンの公開鍵部分を
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",
}
}
}
次のステップ
- Universal Ledger API に RPC リクエストを送信する方法を学ぶ。
- 新しいアカウントを使用して送信できる トランザクションについて学ぶ。