Клиентская библиотека REST конфиденциального реестра Azure для JavaScript версии 1.0.0

Конфиденциальный реестр 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

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 и средства ведения журнала.

Дальнейшие действия

Подробные примеры использования этой библиотеки см. в каталоге примеров .

Участие

Если вы хотите вносить изменения в эту библиотеку, ознакомьтесь с руководством по внесению изменений, в котором содержатся сведения о создании и тестировании кода.

Просмотры