Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure Confidential Ledger proporciona un servicio para el registro en un libro de contabilidad inmutable y a prueba de alteraciones. Como parte de la cartera de computación confidencial de Azure , Azure Confidential Ledger se ejecuta en enclaves sgx. Se basa en el marco del consorcio confidencial de Microsoft Research.
Confíe en gran medida en la documentación del servicio y en la documentación del cliente rest para usar esta biblioteca.
Vínculos principales:
Introducción
Entornos admitidos actualmente
- Node.js versión 14.x.x o superior
Requisitos previos
- Una suscripción de Azure.
- Una instancia en ejecución de Azure Confidential Ledger.
- Un usuario registrado en Confidential Ledger, normalmente asignado durante la creación de recursos de ARM , con
Administratorprivilegios.
Instalar el paquete @azure-rest/confidential-ledger
Instale la biblioteca cliente REST de Azure Condifential Ledger para JavaScript con npm:
npm install @azure-rest/confidential-ledger
Creación y autenticación del cliente
Uso de Azure Active Directory
En este documento se muestra cómo usar DefaultAzureCredential para autenticarse en Confidential Ledger a través de Azure Active Directory. Puede encontrar las variables de entorno en Azure Portal. Sin embargo, ConfidentialLedger acepta cualquier credencial de @azure/identidad .
DefaultAzureCredential controlará automáticamente la mayoría de los escenarios de cliente del SDK de Azure. Para empezar, establezca los valores del identificador de cliente, el identificador de inquilino y el secreto de cliente de la aplicación de AAD como variables de entorno: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET.
A continuación, DefaultAzureCredential podrá autenticar al ConfidentialLedger cliente.
La creación del cliente también requiere la dirección URL y el identificador de Confidential Ledger, que puede obtener desde la CLI de Azure o Azure Portal.
Dado que Confidential Ledgers usa certificados autofirmados generados y almacenados de forma segura en un enclave, primero se debe recuperar el certificado de firma de cada libro de contabilidad confidencial de Confidential Ledger Identity Service.
import ConfidentialLedger, { getLedgerIdentity } from "../../src";
const { ledgerIdentityCertificate } = await getLedgerIdentity(
// for example, test-ledger-name
LEDGER_IDENTITY,
// for example, https://identity.confidential-ledger.core.azure.com
IDENTITY_SERVICE_URL
);
const credential = new DefaultAzureCredential();
// ENDPOINT example: https://test-ledger-name.confidential-ledger.azure.com
const ledgerClient = ConfidentialLedger(ENDPOINT, ledgerIdentityCertificate, credential);
Uso de un certificado de cliente
Como alternativa a Azure Active Directory, los clientes pueden optar por autenticarse con un certificado de cliente en TLS mutuo en lugar de a través de un token de Azure Active Directory. Para este tipo de autenticación, el cliente debe pasarse un CertificateCredential que se compone de un certificado y una clave privada, ambos en formato PEM.
import ConfidentialLedger, { getLedgerIdentity } from "@azure-rest/confidential-ledger";
// Get the signing certificate from the Confidential Ledger Identity Service
const { ledgerIdentityCertificate } = await getLedgerIdentity(
LEDGER_IDENTITY,
IDENTITY_SERVICE_URL
);
// both cert (certificate key) and key (private key) are in PEM format
const cert = PUBLIC_KEY;
const key = PRIVATE_KEY;
// Create the Confidential Ledger Client
// ENDPOINT example: https://test-ledger-name.confidential-ledger.azure.com
const ledgerClient = ConfidentialLedger(env.ENDPOINT, ledgerIdentityCertificate, {
tlsOptions: {
cert,
key,
},
});
Conceptos clave
Entradas y transacciones del libro de contabilidad
Cada escritura en Azure Confidential Ledger genera una entrada de libro de contabilidad inmutable en el servicio. Las escrituras, también conocidas como transacciones, se identifican de forma única mediante identificadores de transacción que se incrementan con cada escritura. Una vez escritas, las entradas del libro de contabilidad se pueden recuperar en cualquier momento.
Receipts
Los cambios de estado en Confidential Ledger se guardan en una estructura de datos denominada árbol Merkle. Para comprobar criptográficamente que las escrituras se guardaron correctamente, se puede recuperar una prueba de Merkle o recibo para cualquier identificador de transacción.
Colecciones
Aunque la mayoría de los casos de uso implicarán un libro de contabilidad, proporcionamos la característica de recopilación en caso de que se almacenen de forma semántica o lógicamente diferentes grupos de datos en el mismo libro de contabilidad confidencial.
Las entradas del libro de contabilidad se recuperan mediante su identificador de colección. Confidential Ledger siempre asume un identificador de colección constante determinado por el servicio para las entradas enviadas sin una colección especificada.
Usuarios
Los usuarios se administran directamente con Confidential Ledger en lugar de a través de Azure. Los usuarios pueden estar basados en AAD, identificados por su identificador de objeto de AAD o basado en certificados, identificados por su huella digital del certificado PEM.
Computación confidencial
La computación confidencial de Azure permite aislar y proteger los datos mientras se procesan en la nube. Azure Confidential Ledger se ejecuta en máquinas virtuales de computación confidencial de Azure, lo que proporciona una protección de datos más sólida con el cifrado de datos en uso.
Confidential Consortium Framework
Azure Confidential Ledger se basa en el marco de consorcio confidencial (CCF) de código abierto de Microsoft Research. En ccF, las aplicaciones son administradas por un consorcio de miembros con la capacidad de enviar propuestas para modificar y controlar la operación de aplicación. En Azure Confidential Ledger, Microsoft Azure posee una identidad de miembro, lo que le permite realizar acciones de gobernanza como reemplazar nodos incorrectos en Confidential Ledger o actualizar el código de enclave.
Ejemplos
Esta sección contiene fragmentos de código para los ejemplos siguientes:
- Entrada del libro de contabilidad posterior
- Obtener una entrada de libro de contabilidad por identificador de transacción
- Obtener todas las entradas del libro de contabilidad
- Obtener todas las colecciones
- Obtener transacciones para una colección
- Enumerar comillas de enclave
Entrada del libro de contabilidad posterior
const entry: LedgerEntry = {
contents: contentBody,
};
const ledgerEntry: PostLedgerEntryParameters = {
contentType: "application/json",
body: entry,
};
const result = await client.path("/app/transactions").post(ledgerEntry);
Obtener una entrada de libro de contabilidad por identificador de transacción
const status = await client
.path("/app/transactions/{transactionId}/status", transactionId)
.get();
Obtener todas las entradas del libro de contabilidad
const ledgerEntries = await client.path("/app/transactions");
Obtener todas las colecciones
const result = await client.path("/app/collections").get();
Obtener transacciones para una colección
const getLedgerEntriesParams = { queryParameters: { collectionId: "my collection" } };
const ledgerEntries = await client.path("/app/transactions").get(getLedgerEntriesParams);
Enumerar comillas de enclave
// Get enclave quotes
const enclaveQuotes = await confidentialLedger.path("/app/enclaveQuotes").get();
// Check for non-success response
if (enclaveQuotes.status !== "200") {
throw enclaveQuotes.body.error;
}
// Log all the enclave quotes' nodeId
Object.keys(enclaveQuotes.body.enclaveQuotes).forEach((key) => {
console.log(enclaveQuotes.body.enclaveQuotes[key].nodeId);
});
Ejemplo completo
import ConfidentialLedger, { getLedgerIdentity } from "@azure-rest/confidential-ledger";
import { DefaultAzureCredential } from "@azure/identity";
export async function main() {
// Get the signing certificate from the Confidential Ledger Identity Service
const ledgerIdentity = await getLedgerIdentity("<my-ledger-id>");
// Create the Confidential Ledger Client
const confidentialLedger = ConfidentialLedger(
"https://<ledger-name>.eastus.cloudapp.azure.com",
ledgerIdentity.ledgerIdentityCertificate,
new DefaultAzureCredential()
);
// Get enclave quotes
const enclaveQuotes = await confidentialLedger.path("/app/enclaveQuotes").get();
// Check for non-success response
if (enclaveQuotes.status !== "200") {
throw enclaveQuotes.body.error;
}
// Log all the enclave quotes' nodeId
Object.keys(enclaveQuotes.body.enclaveQuotes).forEach((key) => {
console.log(enclaveQuotes.body.enclaveQuotes[key].nodeId);
});
}
main().catch((err) => {
console.error(err);
});
Solución de problemas
Registro
La habilitación del registro puede ayudar a descubrir información útil sobre los errores. Para ver un registro de solicitudes y respuestas HTTP, establezca la variable de entorno AZURE_LOG_LEVEL en info. Como alternativa, el registro se puede habilitar en tiempo de ejecución llamando a setLogLevel en @azure/logger:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Para obtener instrucciones más detalladas sobre cómo habilitar los registros, consulte los documentos del paquete @azure/logger.
Pasos siguientes
Eche un vistazo al directorio de ejemplos para obtener ejemplos detallados sobre cómo usar esta biblioteca.
Contribuciones
Si desea contribuir a esta biblioteca, lea la guía de contribución para obtener más información sobre cómo compilar y probar el código.
Proyectos relacionados

Azure SDK for JavaScript