Condividi tramite


Programmabilità del libro mastro riservato di Azure

La programmabilità è una nuova funzionalità di Confidential Ledger che consente ai clienti di eseguire codice personalizzato nella stessa base di calcolo attendibile (TCB) delle normali transazioni di Azure Confidential Ledger (ACL). Il vantaggio di eseguire il codice personalizzato e le transazioni nel TCB è che fornisce le stesse garanzie di riservatezza e integrità per il codice personalizzato e le transazioni prodotte da esso. La programmabilità supporta anche il controllo degli Controllo di accesso accessi in base al ruolo (RBAC) tramite ruoli personalizzati definiti nell'ACL e usati nel codice.

Di seguito sono riportati alcuni scenari che possono essere abilitati tramite la programmabilità:

  • Aggregazione e analisi dei dati: le informazioni riservate possono essere analizzate nel TCB e solo le informazioni aggregate possono essere condivise con gli stakeholder.
  • Attestazione: informazioni riservate come informazioni personali, punteggio di credito e informazioni sull'integrità possono essere condivise con carichi di lavoro in esecuzione in altre offerte di calcolo riservato, ad esempio Azure Confidential ACI e Confidential VM dopo l'attestazione

Prerequisiti

  • Proprietario della sottoscrizione: un confidential ledger può essere creato solo dagli utenti con autorizzazioni di proprietario per la sottoscrizione di Azure. Verificare di avere l'accesso appropriato prima di continuare con questo avvio rapido.

Questa esercitazione presuppone che sia stata creata un'istanza di Confidential Ledger. È possibile creare un libro mastro riservato con il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell.

Sviluppo e distribuzione di applicazioni

Le applicazioni vengono sviluppate usando TypeScript ed è stato eseguito il rollup in un bundle JavaScript. Per altre informazioni sul processo di sviluppo, vedere la documentazione di Confidential Consortium Framework (CCF).

Importante

Solo gli utenti amministratori possono distribuire le applicazioni e gestire il controllo degli accessi in base al ruolo personalizzato nel libro mastro riservato. Nella parte restante della sezione si presuppone che un amministratore esequisi i passaggi seguenti.

Nella sezione seguente si presuppone che l'applicazione sia pronta per la distribuzione. Per illustrare il processo di distribuzione, viene usata l'applicazione bancaria di esempio disponibile nel repository azureconfidentialledger-app-samples (https://github.com/microsoft/azureconfidentialledger-app-samples).

Nota

L'applicazione dimostra come è possibile realizzare casi d'uso bancari comuni come l'apertura di conti, il deposito e il trasferimento di fondi tramite un'applicazione JavaScript distribuita in un'istanza di Confidential Ledger. Viene inoltre illustrato come usare ruoli personalizzati e controllo degli accessi in base al ruolo per autorizzare le azioni dell'utente.

Accedere ad Azure

Nota

Confidential Ledger supporta Microsoft Entra out-of-the-box. Non sono necessarie altre configurazioni. Se l'applicazione usa JWT rilasciato da altri provider di identità, contattare il supporto tecnico per configurarlo nell'istanza Confidential Ledger.

Ottenere un token Microsoft Entra per l'autenticazione all'istanza Confidential Ledger.

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

Copiare il valore del token non elaborato dall'output del comando.

Scaricare l'identità del libro mastro

Ogni istanza di Confidential Ledger è associata a un'identità univoca rappresentata da un certificato denominato certificato del servizio. È necessario stabilire una connessione sicura all'istanza di . Scaricarlo e salvarlo in servicer_cert.pem.

Nota

contoso è il nome dell'istanza di Confidential Ledger. Sostituirlo con il nome dell'istanza.

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

Distribuire l'applicazione

Distribuire il bundle dell'applicazione JavaScript chiamando /app/userDefinedEndpoints.

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"

Creare ruoli e utenti personalizzati

L'applicazione bancaria coinvolge due persone, vale a dire un "manager" e un "teller". Creiamo due ruoli e utenti per rappresentare gli utenti.

Nota

L'utente è rappresentato da un certificato univoco.

Nota

Agli utenti dell'applicazione possono essere assegnati i ruoli predefiniti, ovvero Amministratore, Collaboratore e Lettore. I ruoli personalizzati fanno distinzione tra maiuscole e minuscole e i ruoli predefiniti non fanno distinzione tra maiuscole e minuscole. A un utente possono essere assegnati più ruoli.

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"

Aggiornare la configurazione del runtime (facoltativo)

La configurazione del runtime JavaScript può essere aggiornata chiamando l'endpoint /app/userDefinedEndpoints/runTimeOptions. Per dimostrarlo, impostare il tempo di esecuzione massimo su 2000 ms.

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"

A questo punto è possibile chiamare gli endpoint dell'applicazione e inviare le transazioni.

Pulire le risorse

Altre guide introduttive ed esercitazioni della raccolta si basano su questa. Se si prevede di usare le guide introduttive e le esercitazioni successive, è consigliabile non cancellare le risorse create.

Quando non sono più necessari, è possibile rimuovere il gruppo di risorse e tutte le risorse correlate tramite il comando az group delete dell'interfaccia della riga di comando di Azure:

az group delete --name "myResourceGroup"

Passaggi successivi

In questa esercitazione è stata distribuita un'applicazione JavaScript personalizzata in un'istanza del libro mastro riservato. Per altre informazioni sul libro mastro riservato di Azure e su come integrarlo con le applicazioni, continuare con questi articoli.