Biblioteka klienta REST poufnego rejestru platformy Azure dla języka JavaScript — wersja 1.0.0
Rejestr poufny platformy Azure udostępnia usługę rejestrowania w niezmiennym, odpornym na naruszenia rejestrze. W ramach portfolio poufnego przetwarzania platformy Azure rejestr poufny platformy Azure działa w enklawie SGX. Jest ona oparta na strukturze poufnego konsorcjum Microsoft Research.
W dużej mierze polegaj na dokumentacji usługi i dokumentacji klienta REST , aby korzystać z tej biblioteki
Kluczowe linki:
Wprowadzenie
Obecnie obsługiwane środowiska
- Node.js w wersji 14.x.x lub nowszej
Wymagania wstępne
- Subskrypcja platformy Azure.
- Uruchomione wystąpienie rejestru poufnego platformy Azure.
- Zarejestrowany użytkownik w rejestrze poufnym, zazwyczaj przypisany podczas tworzenia zasobów usługi ARM z uprawnieniami
Administrator
.
Instalowanie pakietu @azure-rest/confidential-ledger
Zainstaluj bibliotekę klienta REST usługi Azure Condifential Ledger dla języka JavaScript przy użyciu polecenia npm
:
npm install @azure-rest/confidential-ledger
Tworzenie i uwierzytelnianie klienta
Korzystanie z usługi Azure Active Directory
W tym dokumencie pokazano, jak używać domyślnejazureCredential do uwierzytelniania w rejestrze poufnym za pośrednictwem usługi Azure Active Directory. Zmienne środowiskowe można znaleźć w witrynie Azure Portal. ConfidentialLedger
Akceptuje jednak wszelkie poświadczenia @azure/tożsamości.
DefaultAzureCredential
program automatycznie obsłuży większość scenariuszy klienta zestawu Azure SDK. Aby rozpocząć, ustaw wartości identyfikatora klienta, identyfikatora dzierżawy i wpisu tajnego klienta aplikacji usługi AAD jako zmienne środowiskowe: AZURE_CLIENT_ID
, , AZURE_CLIENT_SECRET
AZURE_TENANT_ID
.
DefaultAzureCredential
Następnie będzie można uwierzytelnić ConfidentialLedger
klienta.
Utworzenie klienta wymaga również adresu URL i identyfikatora poufnego rejestru, który można pobrać z interfejsu wiersza polecenia platformy Azure lub witryny Azure Portal.
Ponieważ rejestry poufne używają certyfikatów z podpisem własnym wygenerowanych i przechowywanych w enklawie, certyfikat podpisywania dla każdego poufnego rejestru musi zostać najpierw pobrany z usługi tożsamości poufnego rejestru.
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);
Używanie certyfikatu klienta
Alternatywnie dla usługi Azure Active Directory klienci mogą zdecydować się na uwierzytelnianie przy użyciu certyfikatu klienta w wzajemnym protokole TLS zamiast za pośrednictwem tokenu usługi Azure Active Directory. W przypadku tego rodzaju uwierzytelniania klient musi zostać przekazany CertificateCredential
, który składa się z certyfikatu i klucza prywatnego, zarówno w formacie 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,
},
});
Kluczowe pojęcia
Wpisy i transakcje rejestru
Każdy zapis w rejestrze poufnym platformy Azure generuje niezmienny wpis rejestru w usłudze. Zapisy, nazywane również transakcjami, są jednoznacznie identyfikowane przez identyfikatory transakcji, które przyrostują każdy zapis. Po zapisaniu wpisy rejestru mogą być pobierane w dowolnym momencie.
Rachunki
Zmiany stanu w rejestrze poufnym są zapisywane w strukturze danych nazywanej drzewem Merkle. Aby kryptograficznie sprawdzić, czy zapisy zostały poprawnie zapisane, dowód merkle lub potwierdzenie, można pobrać dla dowolnego identyfikatora transakcji.
Kolekcje
Podczas gdy większość przypadków użycia będzie obejmować jeden rejestr, udostępniamy funkcję zbierania w przypadku, gdy semantycznie lub logicznie różne grupy danych muszą być przechowywane w tym samym rejestrze poufnym.
Wpisy rejestru są pobierane przez ich identyfikator kolekcji. Rejestr poufny zawsze przyjmuje stały identyfikator kolekcji określonej przez usługę dla wpisów przesłanych bez określonej kolekcji.
Użytkownicy
Użytkownicy są zarządzani bezpośrednio przy użyciu rejestru poufnego zamiast za pośrednictwem platformy Azure. Użytkownicy mogą być oparte na usłudze AAD, identyfikowane przez identyfikator obiektu usługi AAD lub oparte na certyfikatach, identyfikowane przez odcisk palca certyfikatu PEM.
Poufne przetwarzanie
Poufne przetwarzanie na platformie Azure umożliwia izolowanie i ochronę danych podczas ich przetwarzania w chmurze. Rejestr poufny platformy Azure działa na maszynach wirtualnych usługi Azure Confidential Computing, co zapewnia lepszą ochronę danych przy użyciu szyfrowania danych.
Poufne konsorcjum Framework
Poufne rejestry platformy Azure są oparte na strukturze Poufne konsorcjum (CCF) firmy Microsoft Research. W ramach programu CCF aplikacje są zarządzane przez konsorcjum członków z możliwością przesyłania propozycji do modyfikowania i zarządzania operacją aplikacji. W rejestrze poufnym platformy Azure platforma Microsoft Azure jest właścicielem tożsamości członka, umożliwiając jej wykonywanie akcji ładu, takich jak zastępowanie węzłów w złej kondycji w rejestrze poufnym lub uaktualnianie kodu enklawy.
Przykłady
Ta sekcja zawiera fragmenty kodu dla następujących przykładów:
- Wpis rejestru
- Pobieranie wpisu rejestru według identyfikatora transakcji
- Pobieranie wszystkich wpisów rejestru
- Pobieranie wszystkich kolekcji
- Pobieranie transakcji dla kolekcji
- Lista cudzysłowów enklawy
Wpis rejestru
const entry: LedgerEntry = {
contents: contentBody,
};
const ledgerEntry: PostLedgerEntryParameters = {
contentType: "application/json",
body: entry,
};
const result = await client.path("/app/transactions").post(ledgerEntry);
Pobieranie wpisu rejestru według identyfikatora transakcji
const status = await client
.path("/app/transactions/{transactionId}/status", transactionId)
.get();
Pobieranie wszystkich wpisów rejestru
const ledgerEntries = await client.path("/app/transactions");
Pobieranie wszystkich kolekcji
const result = await client.path("/app/collections").get();
Pobieranie transakcji dla kolekcji
const getLedgerEntriesParams = { queryParameters: { collectionId: "my collection" } };
const ledgerEntries = await client.path("/app/transactions").get(getLedgerEntriesParams);
Lista cudzysłowów enklawy
// 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);
});
Pełny przykład
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);
});
Rozwiązywanie problemów
Rejestrowanie
Włączenie rejestrowania może pomóc odkryć przydatne informacje o błędach. Aby wyświetlić dziennik żądań HTTP i odpowiedzi, ustaw zmienną AZURE_LOG_LEVEL
środowiskową na info
. Możesz też włączyć rejestrowanie w czasie wykonywania, wywołując polecenie w elemecie setLogLevel
@azure/logger
:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Aby uzyskać bardziej szczegółowe instrukcje dotyczące włączania dzienników, zapoznaj się z dokumentami dotyczącymi pakietu @azure/rejestratora.
Następne kroki
Zapoznaj się z katalogiem samples , aby uzyskać szczegółowe przykłady dotyczące sposobu korzystania z tej biblioteki.
Współtworzenie
Jeśli chcesz współtworzyć tę bibliotekę, przeczytaj przewodnik współtworzenia , aby dowiedzieć się więcej na temat sposobu kompilowania i testowania kodu.
Powiązane projekty
Azure SDK for JavaScript