Compartir a través de


Programación de Azure confidential ledger (ACL)

La programación es una nueva característica de Azure confidential ledger que permite a los clientes ejecutar código personalizado en la misma base de proceso de confianza (TCB) que las transacciones normales de Azure confidential ledger (ACL). La ventaja de ejecutar las transacciones y el código personalizado en la TCB es que proporciona la misma confidencialidad y garantías de integridad a las transacciones y el código personalizado producidas por ella. La programación también admite el control de acceso basado en roles (RBAC) a través de roles personalizados definidos en ACL y que se usan en el código.

A continuación, se muestran algunos escenarios que se pueden habilitar mediante programación:

  • Análisis y agregación de datos: la información confidencial se puede analizar en la TCB y solo se puede compartir información agregada con las partes interesadas.
  • Atestación: la información confidencial, como los datos personales, la puntuación de crédito y la información de estado, se puede compartir con cargas de trabajo que se ejecuten en otras ofertas de proceso confidencial, como la ACI confidencial de Azure y la VM confidencial, después de la atestación

Requisitos previos

  • Un confidential ledger solo puede ser creado por usuarios que tengan permisos de Propietario en la suscripción de Azure. Confirme que tiene el acceso adecuado antes de continuar con este inicio rápido.

En este tutorial, se entiende que creó una instancia de Azure confidential ledger. Es posible crear una instancia de Azure confidential ledger en Azure Portal, la CLI de Azure o Azure PowerShell.

Desarrollo e implementación de aplicaciones

Las aplicaciones se desarrollan mediante TypeScript y se acumulan en un conjunto de JavaScript. Para obtener más información sobre el proceso de desarrollo, consulte la documentación de Confidential Consortium Framework (CCF).

Importante

Solo los usuarios administradores pueden implementar aplicaciones y administrar RBAC personalizado en Azure confidential ledger. En el resto de la sección, se entiende que un administrador ejecutará los pasos siguientes.

En la sección siguiente, se entiende que la aplicación está lista para la implementación. Para mostrar el proceso de implementación, se usa la aplicación bancaria de ejemplo disponible en el repositorio azureconfidentialledger-app-samples (https://github.com/microsoft/azureconfidentialledger-app-samples).

Nota:

La aplicación muestra cómo se pueden realizar casos de usos bancarios comunes, como la apertura de cuentas, los depósitos y las transferencias de fondos, mediante una aplicación JavaScript implementada en una instancia de Azure confidential ledger. También se muestra cómo se usan los roles personalizados y RBAC para autorizar las acciones del usuario.

Inicio de sesión en Azure

Nota:

Azure confidential ledger admite Microsoft Entra de serie. No se requieren más configuraciones. Si la aplicación usa JWT emitido por otros proveedores de identidad, póngase en contacto con el servicio de atención al cliente para que esté configurado en la instancia de Azure confidential ledger.

Obtenga un token de Microsoft Entra para autenticarse en la instancia de Azure confidential ledger.

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

Copie el valor del token sin procesar de la salida del comando.

Descargue la identidad del libro de contabilidad

Cada instancia de Azure confidential ledger está asociada a una identidad única representada por un certificado denominado como certificado de servicio. Se requiere para establecer una conexión segura con la instancia. Descárguela y guárdela en servicer_cert.pem.

Nota:

contoso es el nombre de la instancia de Azure confidential ledger. Reemplácelo por el nombre de la instancia.

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

Implementación de la aplicación

Implemente el conjunto de aplicaciones de JavaScript llamando a /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"

Creación de roles y usuarios personalizados

En solicitudes bancarias se necesita a dos personas: a un "administrador" y a un "cajero". Se crean dos roles y usuarios para representar a las personas.

Nota:

El usuario se representa mediante un certificado único.

Nota:

A los usuarios de la aplicación se les asignan los roles integrados, es decir, Administrador, Colaborador y Lector. Los roles personalizados distinguen mayúsculas de minúsculas y los roles integrados no. Un usuario puede tener varios roles asignados.

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"

Actualización de la configuración en tiempo de ejecución (opcional)

La configuración del runtime de JavaScript se puede actualizar llamando al punto de conexión /app/userDefinedEndpoints/runTimeOptions. Para demostrarlo, establezcamos el tiempo máximo de ejecución en 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"

Ya está listo para llamar a los puntos de conexión de la aplicación y enviar transacciones.

Limpieza de recursos

Otras guías de inicio rápido y tutoriales de esta colección se basan en los valores de esta. Si tiene pensado seguir trabajando en otras guías de inicio rápido y tutoriales, considere la posibilidad de dejar estos recursos activos.

Cuando ya no se necesiten, puede usar el comando az group delete de la CLI de Azure para quitar el grupo de recursos y todos los recursos relacionados.

az group delete --name "myResourceGroup"

Pasos siguientes

En este tutorial, implementó una aplicación de JavaScript personalizada en una instancia de Azure confidential ledger. Para obtener más información sobre Azure confidential ledger y cómo integrarlo con las aplicaciones, continúe con estos artículos.