Compartir a través de


Funciones avanzadas definidas por el usuario en Azure Confidential Ledger (versión preliminar)

Las funciones avanzadas definidas por el usuario (UDF) permiten que el código personalizado se ejecute en el mismo entorno de ejecución de confianza (TEE) que el libro de contabilidad. Esta característica amplía las ventajas de la confidencialidad y la garantía de integridad al código personalizado. Además, admite el control de acceso basado en rol (RBAC) personalizado para la autorización.

Importante

Las funciones definidas por el usuario se encuentran actualmente en versión preliminar en versión 2024-08-22-previewde API. Puede solicitar acceso a esta versión preliminar a través de este formulario de registro. Consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure para conocer los términos legales que se aplican a las características de Azure que se encuentran en la versión beta, en versión preliminar o que todavía no se han publicado para que estén disponibles con carácter general.

Sugerencia

Para escenarios más sencillos, como la lógica personalizada ligera o la integración directa con la API de libro de contabilidad, consulte funciones sencillas definidas por el usuario en Azure Confidential Ledger.

Casos de uso

Estos son algunos escenarios en los que las funciones avanzadas definidas por el usuario pueden ser beneficiosas:

  • Análisis y agregación de datos: la información confidencial se puede procesar en el TEE y la información agregada se puede compartir con las partes interesadas.
  • Protección de información confidencial: la información confidencial, como los datos personales, la puntuación de crédito y la información de salud, se pueden compartir con otras cargas de trabajo confidenciales después de la atestación.

Prerrequisitos

  • 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 supone que ha creado una instancia de libro de contabilidad. Puede crear uno mediante Azure Portal, la CLI de Azure o Azure PowerShell.

Desarrollo de aplicaciones

Las aplicaciones de libros de cuentas se desarrollan usando TypeScript y se empacan en un paquete 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 administradores pueden implementar aplicaciones y administrar RBAC personalizado en el libro de contabilidad. En el resto de la sección se supone que un administrador ejecuta los comandos.

Usamos la aplicación bancaria disponible en el repositorio azureconfidentialledger-app-samples (https://github.com/microsoft/azureconfidentialledger-app-samples) para demostrar la característica.

Nota:

La aplicación bancaria expone las API para escenarios bancarios usados habitualmente, como la apertura de cuentas, el depósito y la transferencia de fondos mediante roles y acciones personalizados.

Inicio de sesión en Azure

Nota:

El Azure confidential ledger es compatible con Microsoft Entra ID. Si la aplicación se integra con otros proveedores de identidades, póngase en contacto con el servicio de atención al cliente para configurarla en el libro de contabilidad.

Obtenga un token de Id. de Microsoft Entra.

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

Copie el valor del token en bruto desde la salida.

Descargue la identidad del libro de contabilidad

Un libro de contabilidad se identifica de forma única mediante un certificado denominado certificado de servicio. Se usa para establecer una conexión segura con el libro de contabilidad. Descárguelo desde un punto de conexión conocido y guárdelo en servicer_cert.pem.

Nota:

contoso es el nombre del libro de contabilidad. Reemplácelo por el nombre del libro de contabilidad adecuado.

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 invocando el punto de conexión /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"

Nota:

Las funciones avanzadas definidas por el usuario y las funciones sencillas definidas por el usuario son características mutuamente excluyentes. No puede crear ni ejecutar UDF simples si se definen UDF avanzadas y viceversa. Para cambiar entre los dos, siga las instrucciones de la página de información general de UDF.

Creación de roles y usuarios

La aplicación bancaria utiliza dos personas, es decir, un administrador y un cajero. Creamos roles y usuarios para representarlos.

Nota:

Cada 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"

Ahora 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 este inicio rápido. Si tiene pensado seguir trabajando en otros inicios 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 más información sobre Azure Confidential Ledger y cómo integrarlo con las aplicaciones, continúe con estos artículos: