Biblioteca de cliente REST do Azure Confidential Ledger para JavaScript – versão 1.0.0
O Azure Confidential Ledger fornece um serviço para registar num livro razão imutável e à prova de adulteração. Como parte do portefólio de Computação Confidencial do Azure , o Azure Confidential Ledger é executado em enclaves SGX. Baseia-se no Framework do Consórcio Confidencial da Microsoft Research.
Confie fortemente na documentação do serviço e nos nossos documentos do cliente Rest para utilizar esta biblioteca
Ligações principais:
Introdução
Ambientes atualmente suportados
- Node.js versão 14.x.x ou superior
Pré-requisitos
- Uma subscrição do Azure.
- Uma instância em execução do Azure Confidential Ledger.
- Um utilizador registado no Livro Razão Confidencial, normalmente atribuído durante a criação de recursos do ARM , com
Administrator
privilégios.
Instalar o pacote @azure-rest/confidential-ledger
Instale a biblioteca de cliente REST Do Azure Condifential Ledger para JavaScript com npm
:
npm install @azure-rest/confidential-ledger
Criar e Autenticar o cliente
Utilizar o Azure Active Directory
Este documento demonstra a utilização de DefaultAzureCredential para autenticar no Livro Razão Confidencial através do Azure Active Directory. Pode encontrar as variáveis de ambiente no Portal do Azure. No entanto, ConfidentialLedger
aceita qualquer credencial de @azure/identidade .
DefaultAzureCredential
processará automaticamente a maioria dos cenários de cliente do SDK do Azure. Para começar, defina os valores do ID de cliente, do ID do inquilino e do segredo do cliente da aplicação do AAD como variáveis de ambiente: AZURE_CLIENT_ID
, AZURE_TENANT_ID
, AZURE_CLIENT_SECRET
.
Em seguida, DefaultAzureCredential
poderá autenticar o ConfidentialLedger
cliente.
A criação do cliente também requer o URL e o ID do Livro Razão Confidencial, que pode obter a partir da CLI do Azure ou do Portal do Azure.
Uma vez que os Livros RazãoIs Confidenciais utilizam certificados autoassinados gerados e armazenados em segurança num enclave, o certificado de assinatura de cada Livro Razão Confidencial tem primeiro de ser obtido a partir do Serviço de Identidade Do Livro Razão Confidencial.
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);
Utilizar um certificado de cliente
Como alternativa ao Azure Active Directory, os clientes podem optar por autenticar com um certificado de cliente no TLS mútuo em vez de através de um token do Azure Active Directory. Para este tipo de autenticação, é necessário transmitir ao cliente um CertificateCredential
que é composto por um certificado e chave privada, ambos no 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,
},
});
Conceitos-chave
Entradas e transações de livros razão
Cada escrita no Azure Confidential Ledger gera uma entrada de livro razão imutável no serviço. As escritas, também conhecidas como transações, são identificadas exclusivamente por IDs de transação que incrementam com cada escrita. Uma vez escritas, as entradas de livros razão podem ser obtidas em qualquer altura.
Recibos
As alterações de estado ao Livro Razão Confidencial são guardadas numa estrutura de dados denominada árvore Merkle. Para verificar criptograficamente se as escritas foram guardadas corretamente, é possível obter uma prova Merkle ou um recibo para qualquer ID de transação.
Coleções
Embora a maioria dos casos de utilização envolva um livro razão, fornecemos a funcionalidade de coleção no caso de grupos de dados semanticamente ou logicamente diferentes precisarem de ser armazenados no mesmo Livro Razão Confidencial.
As entradas de razão são obtidas pelo identificador de coleção. O Livro Razão Confidencial assumirá sempre um ID de coleção constante e determinado pelo serviço para as entradas submetidas sem uma coleção especificada.
Utilizadores
Os utilizadores são geridos diretamente com o Livro Razão Confidencial em vez de através do Azure. Os utilizadores podem ser baseados no AAD, identificados pelo respetivo ID de objeto do AAD ou baseado em certificado, identificados pela respetiva impressão digital do certificado PEM.
Computação confidencial
A Computação Confidencial do Azure permite-lhe isolar e proteger os seus dados enquanto estão a ser processados na cloud. O Azure Confidential Ledger é executado em máquinas virtuais de Computação Confidencial do Azure, proporcionando assim uma proteção de dados mais forte com a encriptação de dados em utilização.
Confidencial Consortium Framework
O Azure Confidential Ledger baseia-se no Framework de Consórcio Confidencial (CCF) open source da Microsoft Research. Em CCF, as aplicações são geridas por um consórcio de membros com a capacidade de submeter propostas para modificar e governar a operação de aplicação. No Azure Confidential Ledger, o Microsoft Azure detém uma identidade de membro, permitindo-lhe executar ações de governação, como substituir nós em mau estado de funcionamento no Livro Razão Confidencial ou atualizar o código do enclave.
Exemplos
Esta secção contém fragmentos de código para os seguintes exemplos:
- Entrada Post Ledger
- Obter um ID de Entrada Por Transação do Livro Razão
- Obter Todas as Entradas do Livro Razão
- Obter Todas as Coleções
- Obter Transações para uma Coleção
- Listar Aspas do Enclave
Entrada Post Ledger
const entry: LedgerEntry = {
contents: contentBody,
};
const ledgerEntry: PostLedgerEntryParameters = {
contentType: "application/json",
body: entry,
};
const result = await client.path("/app/transactions").post(ledgerEntry);
Obter um ID de Entrada Por Transação do Livro Razão
const status = await client
.path("/app/transactions/{transactionId}/status", transactionId)
.get();
Obter Todas as Entradas do Livro Razão
const ledgerEntries = await client.path("/app/transactions");
Obter Todas as Coleções
const result = await client.path("/app/collections").get();
Obter Transações para uma Coleção
const getLedgerEntriesParams = { queryParameters: { collectionId: "my collection" } };
const ledgerEntries = await client.path("/app/transactions").get(getLedgerEntriesParams);
Listar Aspas do 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);
});
Exemplo 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);
});
Resolução de problemas
Registo
Ativar o registo pode ajudar a descobrir informações úteis sobre falhas. Para ver um registo de pedidos HTTP e respostas, defina a variável de AZURE_LOG_LEVEL
ambiente como info
. Em alternativa, o registo pode ser ativado no runtime ao chamar setLogLevel
no @azure/logger
:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Para obter instruções mais detalhadas sobre como ativar registos, pode ver os documentos do pacote de @azure/logger.
Passos seguintes
Veja o diretório de exemplos para obter exemplos detalhados sobre como utilizar esta biblioteca.
Contribuir
Se quiser contribuir para esta biblioteca, leia o guia de contribuição para saber mais sobre como criar e testar o código.
Projetos relacionados
Azure SDK for JavaScript