Aracılığıyla paylaş


JavaScript için Azure Gizli Kayıt Defteri REST istemci kitaplığı - sürüm 1.0.0

Azure Gizli Kayıt Defteri, sabit, kurcalamaya karşı dayanıklı bir kayıt defterinde günlüğe kaydetmeye yönelik bir hizmet sağlar. Azure Gizli Bilgi İşlem portföyünün bir parçası olarak, Azure Gizli Kayıt Defteri SGX kuşatmalarında çalışır. Microsoft Research'ün Gizli Konsorsiyum Çerçevesi üzerine kurulmuştur.

Bu kitaplığı kullanmak için lütfen hizmetin belgelerine ve Rest istemci belgelerimize yoğun bir şekilde güvenin

Önemli bağlantılar:

Başlarken

Şu anda desteklenen ortamlar

  • Node.js sürüm 14.x.x veya üzeri

Önkoşullar

  • Bir Azure aboneliği.
  • Azure Gizli Kayıt Defteri'nin çalışan bir örneği.
  • Gizli Kayıt Defteri'nde kayıtlı bir kullanıcı, genellikle ARM kaynağı oluşturma sırasında atanmış ve ayrıcalıklara sahip Administrator .

@azure-rest/confidential-ledger paketini yükleyin

ile npmJavaScript için Azure Condifential Ledger REST istemci kitaplığını yükleyin:

npm install @azure-rest/confidential-ledger

İstemci oluşturma ve kimlik doğrulaması

Azure Active Directory kullanma

Bu belgede, Azure Active Directory aracılığıyla Gizli Kayıt Defteri'nde kimlik doğrulaması yapmak için DefaultAzureCredential kullanımı gösterilmektedir. Ortam değişkenlerini Azure Portal'da bulabilirsiniz. Ancak, ConfidentialLedger@azure/kimlik kimlik bilgilerini kabul eder.

DefaultAzureCredential çoğu Azure SDK istemci senaryolarını otomatik olarak işler. Başlamak için AAD uygulamasının istemci kimliği, kiracı kimliği ve istemci gizli dizisi değerlerini ortam değişkenleri olarak ayarlayın: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET.

Ardından istemcinin DefaultAzureCredentialConfidentialLedger kimliğini doğrulayabilecektir.

İstemciyi oluşturmak için Gizli Kayıt Defterinizin URL'si ve kimliği de gerekir. Bu URL'yi Azure CLI veya Azure Portal'dan alabilirsiniz.

Gizli Kayıt Defterleri güvenli bir şekilde oluşturulan ve bir kapanımda depolanan otomatik olarak imzalanan sertifikaları kullandığından, her Gizli Kayıt Defteri için imza sertifikasının önce Gizli Kayıt Defteri Kimlik Hizmeti'nden alınması gerekir.

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);

İstemci sertifikası kullanma

Azure Active Directory'ye alternatif olarak, istemciler Azure Active Directory belirteci yerine karşılıklı TLS'de bir istemci sertifikasıyla kimlik doğrulamayı seçebilir. Bu tür bir CertificateCredential kimlik doğrulaması için istemciye, her ikisi de PEM biçiminde bir sertifika ve özel anahtardan oluşan bir geçirilmelidir.

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,
      },
    });

Önemli kavramlar

Defter girişleri ve hareketleri

Azure Gizli Kayıt Defteri'ne yapılan her yazma işlemi, hizmette sabit bir kayıt defteri girişi oluşturur. İşlem olarak da adlandırılan yazma işlemleri, her yazma işlemiyle artan işlem kimlikleriyle benzersiz olarak tanımlanır. Yazıldıktan sonra, kayıt defteri girişleri herhangi bir zamanda alınabilir.

Makbuzlar

Gizli Kayıt Defteri'nde yapılan durum değişiklikleri, Merkle ağacı olarak adlandırılan bir veri yapısına kaydedilir. Yazma işlemlerinin doğru kaydedildiğini kriptografik olarak doğrulamak için herhangi bir işlem kimliği için merkle kanıtı veya alındı bilgisi alınabilir.

Koleksiyonlar

Çoğu kullanım örneğinde tek bir kayıt defteri olsa da, anlamlı veya mantıksal olarak farklı veri gruplarının aynı Gizli Kayıt Defteri'nde depolanması gerektiğinde toplama özelliğini sağlarız.

Kayıt defteri girişleri, koleksiyon tanımlayıcıları tarafından alınır. Gizli Kayıt Defteri, bir koleksiyon belirtilmeden gönderilen girişler için her zaman sabit, hizmet tarafından belirlenen bir koleksiyon kimliği kabul eder.

Kullanıcılar

Kullanıcılar Azure yerine doğrudan Gizli Kayıt Defteri ile yönetilir. Kullanıcılar AAD tabanlı olabilir, AAD nesne kimlikleriyle veya sertifika tabanlı olabilir ve PEM sertifika parmak izleriyle tanımlanır.

Gizli bilgi işlem

Azure Gizli Bilgi İşlem , verilerinizi bulutta işlenirken yalıtmanıza ve korumanıza olanak tanır. Azure Gizli Kayıt Defteri, Azure Gizli Bilgi İşlem sanal makinelerinde çalışır ve bu sayede kullanımdaki verilerin şifrelenmesiyle daha güçlü veri koruması sağlar.

Gizli Konsorsiyum Çerçevesi

Azure Gizli Kayıt Defteri, Microsoft Research'ün açık kaynak Gizli Konsorsiyum Çerçevesi (CCF) üzerine kurulmuştur. CCF'nin altında uygulamalar, uygulama işlemini değiştirmek ve yönetmek için teklif gönderebilen bir üye konsorsiyumu tarafından yönetilir. Azure Gizli Kayıt Defteri'nde Microsoft Azure bir üye kimliğine sahip olur ve gizli kayıt defterindeki iyi durumda olmayan düğümleri değiştirme veya kapanım kodunu yükseltme gibi idare eylemlerini gerçekleştirmesine olanak sağlar.

Örnekler

Bu bölümde aşağıdaki örnekler için kod parçacıkları bulunur:

Defter Girişini Deftere Naklet

const entry: LedgerEntry = {
  contents: contentBody,
};
const ledgerEntry: PostLedgerEntryParameters = {
  contentType: "application/json",
  body: entry,
};
const result = await client.path("/app/transactions").post(ledgerEntry);

Hareket Kimliğine Göre Defter Girişi Alma

const status = await client
  .path("/app/transactions/{transactionId}/status", transactionId)
  .get();

Tüm Defter Girişlerini Al

const ledgerEntries = await client.path("/app/transactions");

Tüm Koleksiyonları Al

const result = await client.path("/app/collections").get();

Koleksiyon İçin İşlemleri Alma

const getLedgerEntriesParams = { queryParameters: { collectionId: "my collection" } };
const ledgerEntries = await client.path("/app/transactions").get(getLedgerEntriesParams);

Liste Kapanım Tırnakları

// 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);
});

Tam Örnek

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);
});

Sorun giderme

Günlüğe Kaydetme

Günlüğün etkinleştirilmesi hatalarla ilgili yararlı bilgilerin ortaya çıkarılmasına yardımcı olabilir. HTTP isteklerinin ve yanıtlarının günlüğünü görmek için ortam değişkenini AZURE_LOG_LEVEL olarak infoayarlayın. Alternatif olarak, günlüğü çalışma zamanında içinde çağrılarak setLogLevel@azure/loggeretkinleştirilebilir:

import { setLogLevel } from "@azure/logger";

setLogLevel("info");

Günlükleri etkinleştirme hakkında daha ayrıntılı yönergeler için @azure/günlükçü paketi belgelerine bakabilirsiniz.

Sonraki adımlar

Bu kitaplığın nasıl kullanılacağına ilişkin ayrıntılı örnekler için lütfen samples dizinine göz atın.

Katkıda bulunma

Bu kitaplığa katkıda bulunmak isterseniz, kodu derleme ve test etme hakkında daha fazla bilgi edinmek için lütfen katkıda bulunma kılavuzunu okuyun.

İzlenimler