メインコンテンツまでスキップ

クラウドウォレット

cloud-wallet-signing

ブロックチェーンアプリケーションを構築する際、直接的な人間の介入なしにブロックチェーン上でアクションを実行できる運用ウォレットまたはユーザーウォレットを持つことが有用な場合があります。MultiBaaSのクラウドウォレット機能は、Microsoft Azure Key Vaultによって管理される外部所有アカウント(EOA)とスマートコントラクトの関数呼び出しを統合します。

cloud-wallet-abstraction

Azure Key Vaultをセットアップする際、Azureアカウントの請求詳細は、有効なクレジットカードで構成されているか、まだ期限切れになっていないクレジットを持っている必要があります。

cloud-wallet-overview

要件:

新しいクラウドウォレットプロバイダーの追加

クラウドウォレットにアクセスするには、ナビゲーションバーでCloud Walletsに移動し、次にConfigurationをクリックします。 新しいクラウドウォレットプロバイダーを追加するには、左サイドバーの上部にあるプラスアイコンをクリックします。

add-wallet

必要な入力項目を入力します:

  • Label:クラウドウォレットを識別するためのラベル
  • Client ID:Key Vaultにアクセスするアプリケーション ID。場所:Azure Portal > サイドバー > Azure Active Directory > アプリの登録 > アプリケーション ID列
  • Client Secret:Azureでアプリケーションを最初に登録するときに生成するアプリケーションのシークレットキー
  • Tenant ID:ディレクトリ IDとも呼ばれます。場所:Azure Portal > サイドバー > Azure Active Directory > プロパティ > ディレクトリ ID
  • Subscription ID:Azureサービスへのサブスクリプションにリンクされた ID。場所:Azure Portal > サイドバー > すべてのサービス > サブスクリプション > サブスクリプション ID列
  • Resource Group:アクセスされるリソースのリソースグループ名。場所:Azure Portal > サイドバー > すべてのリソース > リソースグループ列

最後に、Add Cloud Walletをクリックします。これでウォレットを作成またはインポートできます。

キーの作成

Add Keyボタンをクリックし、Create Keyタブを選択します。

create-key

必要な詳細を入力します:

  • Vault Name:キーが作成されるAzure Key Vault名。Key Vaultは存在している必要があり、自動的には作成されません。場所:Azure Portal > Key Vaults
  • Key Name:作成するキーの名前
  • HSM-protected key:「ソフトウェア保護キー」の代わりに「HSM保護キー」を作成します。⚠️ このオプションはPremium SKU(価格レベル)のKey Vaultでのみ機能し、追加コストがかかることに注意してください。

Create Keyをクリックします。

キーのインポート

Key Vaultで以前にセットアップされた既存のウォレットをインポートする場合は、Add Keyボタンをクリックし、次にImport Keyタブを選択します。

import-key

必要な入力項目を入力します:

  • Vault Name:キーが存在するAzure Key Vault名。場所:Azure Portal > Key Vaults
  • Key Name:インポートするキーの名前
  • Key Version:インポートするキーのバージョン

Import Keyをクリックします。


PowerShellクイックスタート

このクイックスタートは、MultiBaaSでクラウドウォレットプロバイダーとして使用できるサービスプリンシパル、リソースグループ、およびKey Vaultを作成する手順をガイドします。

以下の手順では、事前構成された環境用のAzure Cloud Shellを使用するか、完全な制御を希望する場合はローカルにインストールされたPowerShellを使用してください。

⚠️ 注意: Azure Cloud Shellを使用する場合、セッションが長時間アイドル状態になると終了され、保存されていない進行状況は失われる可能性があります。セットアップ全体を一度に完了することをお勧めします。

1. Azureコンテキストのセットアップ

サブスクリプションをリストし、使用するものを選択することから始めます。

Get-AzSubscription

関連するサブスクリプションを選択し、コンテキストを設定し、後で使用するためにsubscriptionIdtenantIdを保存します。

# <ID>をリストコマンドの出力のいずれかに置き換えます
Set-AzContext -Subscription <ID>
$subscriptionId = (Get-AzContext).Subscription.Id
$tenantId = (Get-AzContext).Tenant.Id

2. リソース名と場所の定義

Azureリージョンを選択し、リソースの名前を定義します。これらの名前はAzure環境内で一意である必要があります。

# (Get-AzLocation | select location)の出力からAzureリージョンを選択します
$location = "japaneast"

$keyVaultName = "multibaas-keyvault"
$servicePrincipalName = "multibaas-sp"
$resourceGroupName = "multibaas-app"

# サービスプリンシパルにVaultへのアクセスを許可するために使用されるカスタムロールの名前
$customRoleName = "Key Vault MultiBaas"

ステップ3:MultiBaas用のカスタムロールの定義と作成

Azureの組み込みロールは必要以上の権限を提供します。セキュリティを向上させるため、キーの作成、読み取り、および署名に必要な権限のみを持つカスタムロールを作成します。これはAzureサブスクリプションごとに一度だけ実行する必要があります。

$roleExists = Get-AzRoleDefinition -Name $customRoleName -ErrorAction SilentlyContinue
if (-not $roleExists) {
$role = New-Object -TypeName Microsoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinition
$role.Name = $customRoleName
$role.Description = "Custom role for MultiBaas cloud wallet integration. Grants data-plane permissions to create, read, and sign with keys in Azure Key Vault, and management-plane permission to read vault metadata."
$role.IsCustom = $true
$role.AssignableScopes = @("/subscriptions/$subscriptionId")
$role.Actions = @(
"Microsoft.KeyVault/vaults/read"
)
$role.DataActions = @(
"Microsoft.KeyVault/vaults/keys/create/action",
"Microsoft.KeyVault/vaults/keys/read",
"Microsoft.KeyVault/vaults/keys/sign/action"
)

New-AzRoleDefinition -Role $role
Write-Output "Custom role '$customRoleName' has been created successfully."
} else {
Write-Output "Custom role '$customRoleName' already exists. Skipping creation."
}

4. サービスプリンシパルとリソースグループの作成

ここで、Key Vaultへのアクセスが許可されるサービスプリンシパルを作成します。このプリンシパルは、MultiBaaSがキーを作成してトランザクションに署名するために使用されます。

$servicePrincipal = New-AzADServicePrincipal -DisplayName $servicePrincipalName -EndDate '2299-12-31'
$clientId = $servicePrincipal.AppId
$clientSecret = $servicePrincipal.PasswordCredentials.SecretText

New-AzResourceGroup -Name $resourceGroupName -Location $location

5. Key Vaultの作成と権限の割り当て

次に、Key Vaultを作成し、サービスプリンシパルにカスタムロールを割り当てます。

ハードウェアセキュリティモジュールによってバックアップされたキーを使用する場合は、SkuPremiumに設定する必要があります。これには追加費用がかかることに注意してください。

$keyVault = New-AzKeyVault -VaultName $keyVaultName -ResourceGroupName $resourceGroupName -Location $location -Sku Standard

# リソースグループレベルでロールを割り当て、サービスプリンシパルが以下を持つことを保証します:
# - Vaultメタデータを読み取るための管理プレーンアクセス(Microsoft.KeyVault/vaults/read)
# - グループ内のすべてのVaultでキー操作(作成、読み取り、署名)を実行するためのデータプレーンアクセス
New-AzRoleAssignment -ObjectId $servicePrincipal.Id -RoleDefinitionName $customRoleName -Scope "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName"

Key Vaultアクセスを制御するプレーンの詳細については、Azureドキュメントを参照してください。

6. MultiBaas構成用の値の出力

最後に、MultiBaas UIでこのプロバイダーを追加するために必要な値を出力します。

$clientId
$clientSecret
$tenantId
$subscriptionId
$resourceGroupName
$keyVaultName

これで、MultiBaaSクラウドウォレット構成画面に移動し、上記の値を入力してセットアップを完了できます。