Azure Confidential Ledger REST-Clientbibliothek für JavaScript – Version 1.0.0
Azure Confidential Ledger bietet einen Dienst für die Protokollierung bei einem unveränderlichen, manipulationssicheren Ledger. Als Teil des Azure Confidential Computing-Portfolios wird Azure Confidential Ledger in SGX-Enklaven ausgeführt. Es basiert auf dem Confidential Consortium Framework von Microsoft Research.
Verwenden Sie diese Bibliothek in hohem Maße auf die Dokumentation des Diensts und unsere Rest-Clientdokumentation.
Wichtige Links:
Erste Schritte
Die derzeitig unterstützten Umgebungen
- Node.js Version 14.x.x oder höher
Voraussetzungen
- Ein Azure-Abonnement.
- Eine ausgeführte Instanz von Azure Confidential Ledger
- Ein registrierter Benutzer im Confidential Ledger, der normalerweise während der ARM-Ressourcenerstellung zugewiesen wird, mit
Administrator
Berechtigungen.
Installieren Sie das Paket @azure-rest/confidential-ledger
.
Installieren Sie die Azure Condifential Ledger REST-Clientbibliothek für JavaScript mit npm
:
npm install @azure-rest/confidential-ledger
Erstellen und Authentifizieren des Clients
Verwenden von Azure Active Directory
In diesem Dokument wird die Verwendung von DefaultAzureCredential zur Authentifizierung beim Confidential Ledger über Azure Active Directory veranschaulicht. Die Umgebungsvariablen finden Sie im Azure-Portal. Akzeptiert jedoch ConfidentialLedger
alle @azure-/Identitätsanmeldeinformationen .
DefaultAzureCredential
verarbeitet die meisten Azure SDK-Clientszenarien automatisch. Legen Sie zunächst die Werte der Client-ID, der Mandanten-ID und des geheimen Clientschlüssels der AAD-Anwendung als Umgebungsvariablen fest: AZURE_CLIENT_ID
, AZURE_TENANT_ID
, AZURE_CLIENT_SECRET
.
Anschließend DefaultAzureCredential
kann sich der ConfidentialLedger
Client authentifizieren.
Das Erstellen des Clients erfordert auch die URL und ID Ihres Vertraulichen Ledgers, die Sie über die Azure CLI oder das Azure-Portal abrufen können.
Da Confidential Ledgers selbstsignierte Zertifikate verwenden, die sicher generiert und in einer Enclave gespeichert sind, muss das Signaturzertifikat für jedes Confidential Ledger zuerst aus dem Confidential Ledger Identity Service abgerufen werden.
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);
Verwenden eines Clientzertifikats
Als Alternative zu Azure Active Directory können sich Clients mit einem Clientzertifikat in gegenseitigem TLS anstatt über ein Azure Active Directory-Token authentifizieren. Für diese Art der Authentifizierung muss dem Client eine CertificateCredential
übergeben werden, die aus einem Zertifikat und einem privaten Schlüssel besteht, beide im PEM-Format.
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,
},
});
Wichtige Begriffe
Ledgereinträge und Transaktionen
Jeder Schreibvorgang in Azure Confidential Ledger generiert einen unveränderlichen Ledgereintrag im Dienst. Schreibvorgänge, die auch als Transaktionen bezeichnet werden, werden durch Transaktions-IDs eindeutig identifiziert, die mit jedem Schreibvorgang inkrementieren. Nach dem Schreiben können Ledgereinträge jederzeit abgerufen werden.
Receipts
Zustandsänderungen am Confidential Ledger werden in einer Datenstruktur gespeichert, die als Merkle-Struktur bezeichnet wird. Um kryptografisch zu überprüfen, ob Schreibvorgänge ordnungsgemäß gespeichert wurden, kann ein Merkle-Nachweis oder -Beleg für jede Transaktions-ID abgerufen werden.
Sammlungen
Während die meisten Anwendungsfälle ein Ledger umfassen, bieten wir das Sammlungsfeature für den Fall, dass semantisch oder logisch unterschiedliche Datengruppen im selben Vertraulichen Ledger gespeichert werden müssen.
Ledgereinträge werden von ihrem Sammlungsbezeichner abgerufen. Das Confidential Ledger geht immer von einer konstanten, vom Dienst bestimmten Sammlungs-ID für Einträge aus, die ohne Angabe einer Sammlung übermittelt werden.
Benutzer
Benutzer werden direkt mit dem Confidential Ledger anstatt über Azure verwaltet. Benutzer können AAD-basiert sein, durch ihre AAD-Objekt-ID oder zertifikatbasiert durch ihren PEM-Zertifikatfingerabdruck identifiziert sein.
Confidential Computing
Mit Azure Confidential Computing können Sie Ihre Daten isolieren und schützen, während sie in der Cloud verarbeitet werden. Azure Confidential Ledger wird auf virtuellen Azure Confidential Computing-Computern ausgeführt und bietet somit einen besseren Schutz der Daten durch Verschlüsselung der verwendeten Daten.
Vertrauliches Konsortiumsframework
Azure Confidential Ledger basiert auf dem Open-Source Confidential Consortium Framework (CCF) von Microsoft Research. Unter CCF werden Anwendungen von einem Konsortium von Mitgliedern verwaltet, die Vorschläge zum Ändern und Steuern des Anwendungsvorgangs einreichen können. In Azure Confidential Ledger besitzt Microsoft Azure eine Mitgliedsidentität, sodass Governanceaktionen wie das Ersetzen fehlerhafter Knoten im Vertraulichen Ledger oder das Upgrade des Enclave-Codes ausgeführt werden können.
Beispiele
Dieser Abschnitt enthält Codeausschnitte für die folgenden Beispiele:
- Post Ledger-Eintrag
- Abrufen eines Ledgereintrags nach Transaktions-ID
- Alle Ledgereinträge abrufen
- Alle Sammlungen abrufen
- Abrufen von Transaktionen für eine Sammlung
- Listen von Enclave-Anführungszeichen
Post Ledger-Eintrag
const entry: LedgerEntry = {
contents: contentBody,
};
const ledgerEntry: PostLedgerEntryParameters = {
contentType: "application/json",
body: entry,
};
const result = await client.path("/app/transactions").post(ledgerEntry);
Abrufen eines Ledgereintrags nach Transaktions-ID
const status = await client
.path("/app/transactions/{transactionId}/status", transactionId)
.get();
Alle Ledgereinträge abrufen
const ledgerEntries = await client.path("/app/transactions");
Alle Sammlungen abrufen
const result = await client.path("/app/collections").get();
Abrufen von Transaktionen für eine Sammlung
const getLedgerEntriesParams = { queryParameters: { collectionId: "my collection" } };
const ledgerEntries = await client.path("/app/transactions").get(getLedgerEntriesParams);
Listen von Enclave-Anführungszeichen
// 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);
});
Vollständiges Beispiel
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);
});
Problembehandlung
Protokollierung
Die Aktivierung der Protokollierung kann hilfreiche Informationen über Fehler aufdecken. Um ein Protokoll von HTTP-Anforderungen und -Antworten anzuzeigen, legen Sie die Umgebungsvariable AZURE_LOG_LEVEL
auf info
fest. Alternativ kann die Protokollierung zur Laufzeit aktiviert werden, indem Sie setLogLevel
in @azure/logger
aufrufen:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Ausführlichere Anweisungen zum Aktivieren von Protokollen finden Sie in der Paketdokumentation zu @azure/logger.
Nächste Schritte
Ausführliche Beispiele zur Verwendung dieser Bibliothek finden Sie im Beispielverzeichnis .
Mitwirken
Wenn Sie an dieser Bibliothek mitwirken möchten, lesen Sie die Anleitung für Mitwirkende, um mehr darüber zu erfahren, wie Sie den Code erstellen und testen können.
Verwandte Projekte
Azure SDK for JavaScript