次の方法で共有


Azure Confidential Ledger (ACL) のプログラミング

プログラミングは、顧客が通常の Azure Confidential Ledger (ACL) トランザクションと同じトラステッド コンピューティング ベース (TCB) でカスタム コードを実行できるようにする Confidential Ledger の新機能です。 TCB でカスタム コードとトランザクションを実行するベネフィットは、カスタム コードとそのコードによって生成されるトランザクションに対して同じ機密性と整合性が保証される点です。 プログラミングが可能なことで、ACL で定義され、コードで使用されるカスタム ロールを通じてロールベースのアクセス制御 (RBAC) もサポートされます。

プログラミングを通じて実現できるシナリオをいくつか次に示します。

  • データの集計と分析: 機密情報を TCB で分析でき、集約された情報のみを関係者と共有できます。
  • 構成証明: PII、信用スコア、健康情報などの機密情報は、構成証明後に Azure Confidential ACI や Confidential VM などの他の機密コンピューティング オファリングで実行されているワークロードと共有できます

前提条件

このチュートリアルでは、Confidential Ledger インスタンスが作成されていることを前提としています。 Confidential Ledger は、Azure portalAzure CLI、または Azure PowerShell で作成できます。

アプリケーションの開発とデプロイ

アプリケーションは TypeScript を使用して開発され、JavaScript バンドルにロールアップされます。 開発プロセスの詳細については、Confidential Consortium Framework (CCF) のドキュメントを参照してください。

重要

Confidential Ledger でアプリケーションをデプロイし、カスタム RBAC を管理できるのは管理者ユーザーだけです。 セクションの残りの部分の、以降の手順は、管理者が実行することを前提としています。

次のセクションでは、アプリケーションをデプロイする準備ができていることを前提としています。 デプロイ プロセスを示すために、azureconfidentialledger-app-samples リポジトリ (https://github.com/microsoft/azureconfidentialledger-app-samples) から入手できるサンプル バンキング アプリケーションを使用します。

Note

このアプリケーションは、Confidential Ledger インスタンスにデプロイされた JavaScript アプリケーションを使用して、口座の開設、入金、送金などの一般的な銀行のユース ケースを実現する方法を示しています。 また、カスタム ロールと RBAC を使用してユーザー アクションを承認する方法についても説明します。

Azure へのサインイン

Note

Confidential Ledger では、Microsoft Entra がすぐに使用できます。 追加の構成は必要ありません。 お使いのアプリケーションが他の ID プロバイダーによって発行された JWT を使用している場合は、カスタマー サポートに Confidential Ledger インスタンスの構成を依頼してください。

Confidential Ledger インスタンスに対して認証するための Microsoft Entra トークンを取得します。

az login --use-device-code
az account get-access-token --resource https://confidential-ledger.azure.com

コマンド出力から行トークンの値をコピーします。

Ledger の ID をダウンロードする

すべての Confidential Ledger インスタンスは、サービス証明書と呼ばれる証明書によって表される一意の ID に関連付けられています。 これは、インスタンスに対して安全な接続を確立するために必要です。 それをダウンロードして、servicer_cert.pem に保存します。

Note

contoso は Confidential Ledger インスタンスの名前です。 これをお使いのインスタンス名に置き換えます。

curl https://identity.confidential-ledger.core.azure.com/ledgerIdentity/contoso --silent | jq ' .ledgerTlsCertificate' | xargs echo -e > service_cert.pem

アプリケーションの配置

/app/userDefinedEndpoints を呼び出して JavaScript アプリケーション バンドルをデプロイします。

apiVersion="2024-08-22-preview"
content_type_application_json="Content-Type: application/json"
bundle="/path/to/bundle.json"
authorization="Authorization: Bearer raw_token_value"
server_identity="--cacert service_cert.pem"

# Deploy the application
#
curl $server_identity -X PUT "https://contoso.confidential-ledger.azure.com/app/userDefinedEndpoints?api-version=$apiVersion" -H "$content_type_application_json" -H "$authorization" -d @$bundle

# View the application
#
curl $server_identity "https://contoso.confidential-ledger.azure.com/app/userDefinedEndpoints?api-version=$apiVersion" -H "$authorization"

カスタム ロールとユーザーを作成する

バンキング アプリケーションには、"マネージャー" と "テラー" という 2 つのペルソナが含まれます。 これらのペルソナを表す 2 つのロールとユーザーを作成します。

Note

ユーザーは一意の証明書で表されます。

Note

アプリケーション ユーザーには、組み込みのロール (つまり、管理者、共同作成者、閲覧者) を割り当てることができます。 カスタム ロールは大文字と小文字が区別され、組み込みのロールは大文字と小文字が区別されません。 ユーザーには複数のロールを割り当てることができます。

apiVersion="2024-08-22-preview"
content_type_application_json="Content-Type: application/json"
content_type_merge_patch_json="Content-Type: application/merge-patch+json"
authorization="Authorization: Bearer raw_token_value"
curve="secp384r1"
server_identity="--cacert service_cert.pem"

# These actions must match (case-sensitive) the values defined in the application.
#
role_actions='{"roles":[{"role_name":"manager","role_actions":["/banking/accounts/post","/banking/accounts/put","/banking/accounts/get","/banking/accounts/patch"]},{"role_name":"teller","role_actions":["/banking/accounts/put","/banking/accounts/get","/banking/accounts/patch"]}]}'

# Create the roles.
#
curl $server_identity -X PUT "https://contoso.confidential-ledger.azure.com/app/roles?api-version=$apiVersion" -H "$content_type_application_json" -H "$authorization" -d $role_actions

# View the roles
#
curl $server_identity "https://contoso.confidential-ledger.azure.com/app/roles?api-version=$apiVersion" -H "$authorization"

# Create a certificate for the manager user.
#
openssl ecparam -out "manager_privk.pem" -name "$curve" -genkey
openssl req -new -key "manager_privk.pem" -x509 -nodes -days 365 -out "manager_cert.pem" -sha384 -subj=/CN="manager"
manager_cert_fingerprint=$(openssl x509 -in "manager_cert.pem" -noout -fingerprint -sha256 | cut -d "=" -f 2)
manager_user="{\"user_id\":\"$manager_cert_fingerprint\",\"assignedRoles\":[\"manager\"]}"

# Create a certificate for the teller user.
#
openssl ecparam -out "teller_privk.pem" -name "$curve" -genkey
openssl req -new -key "teller_privk.pem" -x509 -nodes -days 365 -out "teller_cert.pem" -sha384 -subj=/CN="teller"
teller_cert_fingerprint=$(openssl x509 -in "teller_cert.pem" -noout -fingerprint -sha256 | cut -d "=" -f 2)
teller_user="{\"user_id\":\"$teller_cert_fingerprint\",\"assignedRoles\":[\"teller\"]}"

# Create the manager user.
#
curl $server_identity -X PATCH "https://contoso.confidential-ledger.azure.com/app/ledgerUsers/$manager_cert_fingerprint?api-version=$apiVersion" -H "$content_type_merge_patch_json" -H "$authorization" -d $manager_user

# Create the teller user.
#
curl $server_identity -X PATCH "https://contoso.confidential-ledger.azure.com/app/ledgerUsers/$teller_cert_fingerprint?api-version=$apiVersion" -H "$content_type_merge_patch_json" -H "$authorization" -d $teller_user

# View the users
#
curl $server_identity "https://contoso.confidential-ledger.azure.com/app/ledgerUsers?api-version=$apiVersion" -H "$authorization"

ランタイム構成を更新する (省略可能)

JavaScript ランタイム構成は、/app/userDefinedEndpoints/runTimeOptions エンドポイントを呼び出すことによって更新できます。 これを示すために、最大実行時間を 2000 ミリ秒に設定しましょう。

apiVersion="2024-08-22-preview"
content_type_merge_patch_json="Content-Type: application/merge-patch+json"
authorization="Authorization: Bearer raw_token_value"
runtime_options="{\"max_heap_bytes\":1024,\"max_stack_bytes\":1024,\"max_execution_time_ms\":2000,\"log_exception_details\":false,\"return_exception_details\":false,\"max_cached_interpreters\":1024}"
server_identity="--cacert service_cert.pem"

# Patch the runtime options
#
curl $server_identity -X PATCH "https://contoso.confidential-ledger.azure.com/app/userDefinedEndpoints/runTimeOptions?api-version=$apiVersion" -H "$content_type_merge_patch_json" -H "$authorization" -d $runtime_options

# View the runtime options
#
curl $server_identity "https://contoso.confidential-ledger.azure.com/app/userDefinedEndpoints/runTimeOptions?api-version=$apiVersion" -H "$authorization"

これで、アプリケーション エンドポイントを呼び出してトランザクションを送信する準備ができました。

リソースをクリーンアップする

このコレクションの他のクイックスタートとチュートリアルは、このクイックスタートに基づいています。 後続のクイック スタートおよびチュートリアルを引き続き実行する場合は、これらのリソースをそのまま残しておくことをお勧めします。

必要がなくなったら、Azure CLI の az group delete コマンドを使用して、リソース グループおよびすべての関連リソースを削除できます。

az group delete --name "myResourceGroup"

次のステップ

このチュートリアルでは、カスタム JavaScript アプリケーションを Confidential Ledger インスタンスにデプロイしました。 Azure confidential ledger およびアプリケーションとの統合方法について詳しくは、続けて以下の記事を参照してください。