Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Конфиденциальный реестр Azure предоставляет службу для ведения журнала в неизменяемом реестре, защищенном от незаконного изменения. В рамках портфеля конфиденциальных вычислений Azure Конфиденциальный реестр Azure выполняется в анклавах SGX. Он основан на платформе конфиденциального консорциума Microsoft Research.
Чтобы использовать эту библиотеку, в значительной степени полагайтесь на документацию службы и наши клиентские документы rest .
Основные ссылки:
Начало работы
Поддерживаемые в настоящее время среды
- Node.js версии 14.x.x или более поздней
Предварительные требования
- Подписка Azure.
- Выполняющийся экземпляр конфиденциального реестра Azure.
- Зарегистрированный пользователь в Конфиденциальном реестре, который обычно назначается во время создания ресурса ARM , с
Administratorпривилегиями.
Установите пакет @azure-rest/confidential-ledger.
Установите клиентскую библиотеку REST реестра Azure Condifential для JavaScript с помощью npm:
npm install @azure-rest/confidential-ledger
Создание и проверка подлинности клиента
Использование Azure Active Directory
В этом документе показано использование DefaultAzureCredential для проверки подлинности в Конфиденциальном реестре через Azure Active Directory. Переменные среды можно найти на портале Azure. ConfidentialLedger Тем не менее принимает любые учетные данные @azure или удостоверения.
DefaultAzureCredential автоматически обрабатывает большинство клиентских сценариев пакета AZURE SDK. Чтобы приступить к работе, задайте значения идентификатора клиента, идентификатора клиента и секрета клиента приложения AAD в качестве переменных среды: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET.
DefaultAzureCredential Затем сможет пройти проверку подлинности ConfidentialLedger клиента.
Для создания клиента также требуется URL-адрес и идентификатор конфиденциального реестра, которые можно получить с помощью Azure CLI или портала Azure.
Так как конфиденциальные реестры используют самозаверяемые сертификаты, безопасно созданные и хранящиеся в анклаве, сертификат подписи для каждого конфиденциального реестра необходимо сначала получить из службы удостоверений конфиденциального реестра.
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);
Использование сертификата клиента
В качестве альтернативы Azure Active Directory клиенты могут выполнять проверку подлинности с помощью сертификата клиента во взаимном протоколе TLS, а не с помощью маркера Azure Active Directory. Для такого типа проверки подлинности клиенту необходимо передать CertificateCredential , состоящий из сертификата и закрытого ключа в формате 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,
},
});
Основные понятия
Записи и транзакции реестра
При каждой записи в Конфиденциальный реестр Azure создается неизменяемая запись реестра в службе. Операции записи, также называемые транзакциями, однозначно идентифицируются идентификаторами транзакций, которые увеличиваются с каждой записью. После записи записи реестра можно получить в любое время.
Receipts
Изменения состояния конфиденциального реестра сохраняются в структуре данных, называемой деревом Меркла. Чтобы криптографически проверить правильность сохранения записей, можно получить подтверждение Merkle или квитанцию для любого идентификатора транзакции.
Коллекции
Хотя в большинстве вариантов использования используется один реестр, мы предоставляем функцию сбора в случае, если семантически или логически разные группы данных должны храниться в одном конфиденциальном реестре.
Записи реестра извлекаются по идентификатору коллекции. Конфиденциальный реестр всегда принимает постоянный идентификатор коллекции, определяемый службой, для записей, отправленных без указанной коллекции.
Пользователи
Управление пользователями осуществляется непосредственно с помощью Конфиденциального реестра, а не через Azure. Пользователи могут быть основаны на AAD, идентифицируются по идентификатору объекта AAD или на основе сертификата, идентифицируются по отпечатку сертификата PEM.
Конфиденциальные вычисления
Конфиденциальные вычисления Azure позволяют изолировать и защищать данные во время их обработки в облаке. Конфиденциальный реестр Azure работает на виртуальных машинах Конфиденциальных вычислений Azure, обеспечивая более надежную защиту данных с шифрованием используемых данных.
Платформа конфиденциального консорциума
Конфиденциальный реестр Azure основан на платформе Консорциума конфиденциального консорциума (CCF) Microsoft Research с открытым кодом. В рамках CCF приложения управляются консорциумом членов с возможностью отправлять предложения по изменению и управлению работой приложения. В Конфиденциальном реестре Azure Microsoft Azure владеет удостоверением участника, что позволяет ему выполнять действия по управлению, такие как замена неработоспособных узлов в Конфиденциальном реестре или обновление кода анклава.
Примеры
В этом разделе содержатся фрагменты кода для следующих примеров:
- Запись post ledger
- Получение записи реестра по идентификатору транзакции
- Получение всех записей реестра
- Получение всех коллекций
- Получение транзакций для коллекции
- Перечисление кавычек анклава
Запись post ledger
const entry: LedgerEntry = {
contents: contentBody,
};
const ledgerEntry: PostLedgerEntryParameters = {
contentType: "application/json",
body: entry,
};
const result = await client.path("/app/transactions").post(ledgerEntry);
Получение записи реестра по идентификатору транзакции
const status = await client
.path("/app/transactions/{transactionId}/status", transactionId)
.get();
Получение всех записей реестра
const ledgerEntries = await client.path("/app/transactions");
Получение всех коллекций
const result = await client.path("/app/collections").get();
Получение транзакций для коллекции
const getLedgerEntriesParams = { queryParameters: { collectionId: "my collection" } };
const ledgerEntries = await client.path("/app/transactions").get(getLedgerEntriesParams);
Перечисление кавычек анклава
// 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);
});
Полный пример
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);
});
Устранение неполадок
Ведение журнала
Включение ведения журнала может помочь выявить полезные сведения о сбоях. Чтобы просмотреть журнал HTTP-запросов и ответов, задайте для переменной среды AZURE_LOG_LEVEL значение info. Кроме того, ведение журнала можно включить во время выполнения, вызвав setLogLevel в @azure/logger:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Более подробные инструкции по включению журналов см. в документации по пакету @azure и средства ведения журнала.
Дальнейшие действия
Подробные примеры использования этой библиотеки см. в каталоге примеров .
Участие
Если вы хотите вносить изменения в эту библиотеку, ознакомьтесь с руководством по внесению изменений, в котором содержатся сведения о создании и тестировании кода.
Связанные проекты

Azure SDK for JavaScript