Aracılığıyla paylaş


Python için Azure Gizli Kayıt Defteri istemci kitaplığı - sürüm 1.1.1

Azure Gizli Kayıt Defteri, sabit ve kurcalamaya karşı dayanıklı bir kayıt defterine 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, kuşatma olarak da bilinen güvenli, donanım tabanlı güvenilir yürütme ortamlarında çalışır. Microsoft Research'ün Gizli Konsorsiyum Çerçevesi üzerine kurulmuştur.

Kaynak kodu | Paket (PyPI) | Paket (Conda) | API başvuru belgeleri | Ürün belgeleri

Başlarken

Paketleri yükleme

pip ile azure-confidentialledger ve azure-identity yükleyin:

pip install azure-identity azure-confidentialledger

azure-identity , aşağıda gösterildiği gibi Azure Active Directory kimlik doğrulaması için kullanılır.

Önkoşullar

  • Azure aboneliği
  • Python 3.6 veya üzeri
  • 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 atanır ve Administrator ayrıcalıkları vardır.

İstemcinin kimliğini doğrulama

Azure Active Directory'i 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. Ancak, ConfidentialLedgerClientazure-identity kimlik bilgilerini kabul eder. Diğer kimlik bilgileri hakkında daha fazla bilgi için azure-identity belgelerine bakın.

İstemci sertifikası kullanma

Azure Active Directory'ye alternatif olarak, istemciler karşılıklı TLS aracılığıyla kimlik doğrulaması yapmak için bir istemci sertifikası kullanmayı tercih edebilir. azure.confidentialledger.ConfidentialLedgerCertificateCredential bu amaçla kullanılabilir.

İstemci oluşturma

DefaultAzureCredential çoğu Azure SDK istemci senaryolarını otomatik olarak işler. Başlamak için Gizli Kayıt Defterinize kayıtlı AAD kimliği için ortam değişkenlerini ayarlayın.

export AZURE_CLIENT_ID="generated app id"
export AZURE_CLIENT_SECRET="random password"
export AZURE_TENANT_ID="tenant id"

Ardından kimliğini DefaultAzureCredential doğrulayabilecektir ConfidentialLedgerClient.

İ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. Bu değerleri aldıktan sonra lütfen ve örneklerini "my-ledger-id""https://my-ledger-id.confidential-ledger.azure.com" aşağıdaki örneklerde değiştirin. Değerini kayıt defterinizin ARM açıklamasındaki ana bilgisayar adıyla identityServiceUri değiştirmeniz de gerekebilir"https://identity.confidential-ledger.core.azure.com".

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.

from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient
from azure.identity import DefaultAzureCredential

identity_client = ConfidentialLedgerCertificateClient()
network_identity = identity_client.get_ledger_identity(
    ledger_id="my-ledger-id"
)

ledger_tls_cert_file_name = "ledger_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity["ledgerTlsCertificate"])

credential = DefaultAzureCredential()
ledger_client = ConfidentialLedgerClient(
    endpoint="https://my-ledger-id.confidential-ledger.azure.com",
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name
)

Oluşturucu, mevcut olmayan bir dosyayla birlikte sağlanmışsa kayıt ConfidentialLedgerClient defteri TLS sertifikasını getirir (ve belirtilen dosyaya yazar). Kullanıcı, oluşturulan dosyayı gerektiği gibi kaldırmakla sorumludur.

from azure.confidentialledger import ConfidentialLedgerClient
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
ledger_client = ConfidentialLedgerClient(
    endpoint="https://my-ledger-id.confidential-ledger.azure.com",
    credential=credential,
    ledger_certificate_path="ledger_certificate.pem"
)

# The ledger TLS certificate is written to `ledger_certificate.pem`.

Kayıt defteri TLS sertifikası için bir dosyanın kullanıldığını net bir şekilde ifade etmek için, sonraki örnekler kayıt defteri TLS sertifikasını bir dosyaya açıkça yazar.

Ö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. İşlemler 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.

Koleksiyonlar

Çoğu kullanım örneğinde Gizli Kayıt Defteri başına yalnızca bir koleksiyon olsa da, farklı veri gruplarının aynı Gizli Kayıt Defteri'nde depolanması gerektiğinde koleksiyon kimliği özelliğini sağlarız.

Defter girişleri kendi collectionIdtarafından alınır. Gizli Kayıt Defteri, belirtilmemiş olarak yazılan girişler için her zaman sabit, hizmet tarafından belirlenen collectionId bir collectionId kabul eder.

Kullanıcılar

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

Makbuzlar

İşlem bütünlüğü garantilerini zorunlu kılmak için, Azure Gizli Kayıt Defteri sabit kayıt defterine eklenen tüm işlem bloklarının karmasını kaydetmek için [Merkle ağacı][merkle_tree_wiki] veri yapısını kullanır. Bir yazma işlemi tamamlandıktan sonra, Azure Gizli Kayıt Defteri kullanıcıları, yazma işleminin doğru kaydedildiğini doğrulamak için Gizli Kayıt Defteri'nde oluşturulan giriş üzerinden şifreleme merkle kanıtı veya alındı bilgisi alabilir. Yazma işlemi alındı bilgisi, sistemin karşılık gelen işlemi işlediğinin kanıtıdır ve girişin kayıt defterine etkili bir şekilde eklendiğini doğrulamak için kullanılabilir.

Azure Gizli Kayıt Defteri yazma işlemi makbuzları hakkında daha fazla bilgi için lütfen aşağıdaki makaleye bakın.

Makbuz Doğrulama

Bir yazma işlemi için alındı bilgisi aldıktan sonra Azure Gizli Kayıt Defteri kullanıcıları, bir doğrulama algoritmasının ardından getirilen alındı bilgisinin içeriğini doğrulayabilir. Doğrulamanın başarısı, makbuzla ilişkili yazma işleminin sabit kayıt defterine doğru şekilde eklendiğinin kanıtıdır.

Azure Gizli Kayıt Defteri yazma işlemi makbuzları için doğrulama işlemi hakkında daha fazla bilgi için lütfen aşağıdaki makaleye bakın.

Uygulama Talepleri

Azure Gizli Kayıt Defteri uygulamaları, işlem yazmak için uygulama talepleri olarak adlandırılan rastgele veriler ekleyebilir. Bu talepler, bir yazma işlemi sırasında yürütülen eylemleri temsil edilir. Bir işleme eklendiğinde, talep nesnesinin SHA-256 özeti kayıt defterine dahil edilir ve yazma işleminin bir parçası olarak işlenir. Bu, özetin yerinde imzalandığını ve üzerinde oynanamayacağını garanti eder.

Daha sonra uygulama talepleri, eklendiği aynı işleme karşılık gelen alındı bilgisi yükünde özetlenmemiş biçimlerinde gösterilebilir. Bu, kullanıcıların işlem sırasında Azure Gizli Kayıt Defteri örneği tarafından eklenen ve oturum açılan talep özetinin aynısını yeniden hesaplamak için makbuzdaki bilgiden yararlanmasına olanak tanır. Talep özeti, yazma işlemi alındı bilgisi doğrulama işleminin bir parçası olarak kullanılabilir ve kullanıcıların kaydedilen taleplerin orijinalliğini tam olarak doğrulaması için çevrimdışı bir yol sağlar.

Uygulama talepleri biçimi ve özet hesaplama algoritması hakkında daha fazla ayrıntıya aşağıdaki bağlantılardan ulaşabilirsiniz:

CCF Uygulaması talepleri hakkında daha fazla bilgi için lütfen aşağıdaki CCF belge sayfalarına bakın:

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 altında, uygulamalar uygulama işlemini değiştirmek ve idare etmek için teklif gönderebilen bir üye konsorsiyumu tarafından yönetilir. Azure Gizli Kayıt Defteri'nde Microsoft Azure, Gizli Kayıt Defteri'ndeki iyi durumda olmayan düğümleri değiştirme ve kapanım kodunu yükseltme gibi idare ve bakım eylemleri gerçekleştirmesini sağlayan bir operatör üyesi kimliğine sahip olur.

Örnekler

Bu bölüm, aşağıdakiler gibi yaygın görevleri kapsayan kod parçacıkları içerir:

Ekleme girdisi

Değiştirilmeye karşı dayanıklı bir şekilde depolanması gereken veriler, kayıt defterine bir giriş eklenerek Azure Gizli Kayıt Defteri'ne kaydedilebilir.

Gizli Kayıt Defteri dağıtılmış bir sistem olduğundan, nadir geçici hatalar yazmaların kaybolmasına neden olabilir. Korunması gereken girişler için yazma işleminin dayanıklı hale geldiğini doğrulamanız önerilir. Daha yüksek istemci aktarım hızının tercih edildiği daha az önemli yazma işlemleri için bekleme adımı atlanabilir.

from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient
from azure.identity import DefaultAzureCredential

identity_client = ConfidentialLedgerCertificateClient()
network_identity = identity_client.get_ledger_identity(
    ledger_id="my-ledger-id"
)

ledger_tls_cert_file_name = "ledger_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity["ledgerTlsCertificate"])

credential = DefaultAzureCredential()
ledger_client = ConfidentialLedgerClient(
    endpoint="https://my-ledger-id.confidential-ledger.azure.com",
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name
)

post_entry_result = ledger_client.create_ledger_entry(
        {"contents": "Hello world!"}
    )
transaction_id = post_entry_result["transactionId"]

wait_poller = ledger_client.begin_wait_for_commit(transaction_id)
wait_poller.wait()
print(f'Ledger entry at transaction id {transaction_id} has been committed successfully')

Alternatif olarak, istemci bir kayıt defteri girişi yazarken işlemeyi bekleyebilir.

from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient
from azure.identity import DefaultAzureCredential

identity_client = ConfidentialLedgerCertificateClient()
network_identity = identity_client.get_ledger_identity(
    ledger_id="my-ledger-id"
)

ledger_tls_cert_file_name = "ledger_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity["ledgerTlsCertificate"])

credential = DefaultAzureCredential()
ledger_client = ConfidentialLedgerClient(
    endpoint="https://my-ledger-id.confidential-ledger.azure.com",
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name
)

post_poller = ledger_client.begin_create_ledger_entry(
    {"contents": "Hello world again!"}
)
new_post_result = post_poller.result()
print(
    'The new ledger entry has been committed successfully at transaction id '
    f'{new_post_result["transactionId"]}'
)

Defter girişlerini alma

Hizmet geçmiş girişleri yüklediği için en son kayıt defterinden eski defter girişlerini almak biraz zaman alabilir, bu nedenle bir poller sağlanır.

Defter girişleri koleksiyon tarafından alınır. Döndürülen değer, işlem kimliği tarafından tanımlanan zaman noktasında belirtilen koleksiyonda bulunan değerdir.

from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient
from azure.identity import DefaultAzureCredential

identity_client = ConfidentialLedgerCertificateClient()
network_identity = identity_client.get_ledger_identity(
    ledger_id="my-ledger-id"
)

ledger_tls_cert_file_name = "ledger_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity["ledgerTlsCertificate"])

credential = DefaultAzureCredential()
ledger_client = ConfidentialLedgerClient(
    endpoint="https://my-ledger-id.confidential-ledger.azure.com",
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name
)

post_poller = ledger_client.begin_create_ledger_entry(
    {"contents": "Original hello"}
)
post_result = post_poller.result()

post_transaction_id = post_result["transactionId"]

latest_entry = ledger_client.get_current_ledger_entry()
print(
    f'Current entry (transaction id = {latest_entry["transactionId"]}) '
    f'in collection {latest_entry["collectionId"]}: {latest_entry["contents"]}'
)

post_poller = ledger_client.begin_create_ledger_entry(
    {"contents": "Hello!"}
)
post_result = post_poller.result()

get_entry_poller = ledger_client.begin_get_ledger_entry(post_transaction_id)
older_entry = get_entry_poller.result()
print(
    f'Contents of {older_entry["entry"]["collectionId"]} at {post_transaction_id}: {older_entry["entry"]["contents"]}'
)

Aralıklı sorgu oluşturma

Defter girişleri bir dizi hareket kimliği üzerinden alınabilir. Girdiler yalnızca varsayılan veya belirtilen koleksiyondan döndürülür.

from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient
from azure.identity import DefaultAzureCredential

identity_client = ConfidentialLedgerCertificateClient()
network_identity = identity_client.get_ledger_identity(
    ledger_id="my-ledger-id"
)

ledger_tls_cert_file_name = "ledger_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity["ledgerTlsCertificate"])

credential = DefaultAzureCredential()
ledger_client = ConfidentialLedgerClient(
    endpoint="https://my-ledger-id.confidential-ledger.azure.com",
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name
)

post_poller = ledger_client.begin_create_ledger_entry(
    {"contents": "First message"}
)
first_transaction_id = post_poller.result()["transactionId"]

for i in range(10):
    ledger_client.create_ledger_entry(
        {"contents": f"Message {i}"}
    )

post_poller = ledger_client.begin_create_ledger_entry(
    {"contents": "Last message"}
)
last_transaction_id = post_poller.result()["transactionId"]

ranged_result = ledger_client.list_ledger_entries(
    from_transaction_id=first_transaction_id,
    to_transaction_id=last_transaction_id,
)
for entry in ranged_result:
    print(f'Contents at {entry["transactionId"]}: {entry["contents"]}')

Kullanıcıları yönetme

Ayrıcalığı olan Administrator kullanıcılar, Gizli Kayıt Defteri kullanıcılarını doğrudan Gizli Kayıt Defteri'nin kendisiyle yönetebilir. Kullanılabilir roller (salt okunur), Contributor (okuma ve yazma) ve Administrator (kullanıcıları okuma, yazma ve ekleme veya kaldırma) rolleridir Reader .

from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient
from azure.identity import DefaultAzureCredential

identity_client = ConfidentialLedgerCertificateClient()
network_identity = identity_client.get_ledger_identity(
    ledger_id="my-ledger-id"
)

ledger_tls_cert_file_name = "ledger_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity["ledgerTlsCertificate"])

credential = DefaultAzureCredential()
ledger_client = ConfidentialLedgerClient(
    endpoint="https://my-ledger-id.confidential-ledger.azure.com",
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name
)

user_id = "some AAD object id"
user = ledger_client.create_or_update_user(
    user_id, {"assignedRole": "Contributor"}
)
# A client may now be created and used with AAD credentials (i.e. AAD-issued JWT tokens) for the user identified by `user_id`.

user = ledger_client.get_user(user_id)
assert user["userId"] == user_id
assert user["assignedRole"] == "Contributor"

ledger_client.delete_user(user_id)

# For a certificate-based user, their user ID is the fingerprint for their PEM certificate.
user_id = "PEM certificate fingerprint"
user = ledger_client.create_or_update_user(
    user_id, {"assignedRole": "Reader"}
)

user = ledger_client.get_user(user_id)
assert user["userId"] == user_id
assert user["assignedRole"] == "Reader"

ledger_client.delete_user(user_id)

Sertifika kimlik doğrulamayı kullanma

İstemciler, Azure Active Directory belirteci yerine karşılıklı TLS'de bir istemci sertifikasıyla kimlik doğrulaması yapabilir. ConfidentialLedgerCertificateCredential bu tür istemciler için sağlanır.

from azure.confidentialledger import (
    ConfidentialLedgerCertificateCredential,
    ConfidentialLedgerClient,
)
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient

identity_client = ConfidentialLedgerCertificateClient()
network_identity = identity_client.get_ledger_identity(
    ledger_id="my-ledger-id"
)

ledger_tls_cert_file_name = "ledger_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity["ledgerTlsCertificate"])

credential = ConfidentialLedgerCertificateCredential(
    certificate_path="Path to user certificate PEM file"
)
ledger_client = ConfidentialLedgerClient(
    endpoint="https://my-ledger-id.confidential-ledger.azure.com",
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name
)

Yazma işlemi alındı bilgilerini doğrulama

İstemciler, Azure Gizli Legder örnekleri tarafından verilen yazma işlemi makbuzlarını doğrulamak için SDK'daki makbuz doğrulama kitaplığından yararlanabilir. Doğrulama algoritması gizli bir kayıt defterine veya başka bir Azure hizmetine bağlanmayı gerektirmediğinden, bu yardımcı program makbuzları çevrimdışı olarak tam olarak doğrulamak için kullanılabilir.

Kayıt defterine yeni bir giriş eklendikten sonra (lütfen bu örne bakın), taahhüt edilen yazma işlemi için alındı bilgisi almak mümkündür.

from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient
from azure.identity import DefaultAzureCredential

# Replace this with the Confidential Ledger ID 
ledger_id = "my-ledger-id"

# Setup authentication
credential = DefaultAzureCredential()

# Create a Ledger Certificate client and use it to
# retrieve the service identity for our ledger
identity_client = ConfidentialLedgerCertificateClient()
network_identity = identity_client.get_ledger_identity(
    ledger_id=ledger_id
)

# Save ledger service certificate into a file for later use
ledger_tls_cert_file_name = "ledger_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity["ledgerTlsCertificate"])

# Create Confidential Ledger client
ledger_client = ConfidentialLedgerClient(
    endpoint=f"https://{ledger_id}.confidential-ledger.azure.com",
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name
)

# The method begin_get_receipt returns a poller that
# we can use to wait for the receipt to be available for retrieval 
get_receipt_poller = ledger_client.begin_get_receipt(transaction_id)
get_receipt_result = get_receipt_poller.result()

print(f"Write receipt for transaction id {transaction_id} was successfully retrieved: {get_receipt_result}")

Yazma işlemi için alındı bilgisi getirildikten sonra, alındı bilgisinin verify_receipt geçerli olduğunu doğrulamak için işlevini çağırmak mümkündür. İşlev, alındı talepleri özetini doğrulamak için isteğe bağlı bir uygulama talepleri listesini kabul edebilir.

from azure.confidentialledger.receipt import (
    verify_receipt,
)

# Read contents of service certificate file saved in previous step.
with open(ledger_tls_cert_file_name, "r") as service_cert_file:
    service_cert_content = service_cert_file.read()

# Optionally read application claims, if any
application_claims = get_receipt_result.get("applicationClaims", None) 

try:
    # Verify the contents of the receipt.
    verify_receipt(get_receipt_result["receipt"], service_cert_content, application_claims=application_claims)
    print(f"Receipt for transaction id {transaction_id} successfully verified")
except ValueError:
    print(f"Receipt verification for transaction id {transaction_id} failed")

Çalışan gizli kayıt defteri örneğine yeni bir giriş eklemeyi, yürütülen işlem için alındı bilgisi almayı ve makbuz içeriğinin samples klasörünün altında bulunabildiğini doğrulamayı gösteren tam örnek bir Python programı: get_and_verify_receipt.py.

Zaman uyumsuz API

Bu kitaplık, Python 3.5+ üzerinde desteklenen tam bir zaman uyumsuz API içerir. Bunu kullanmak için önce aiohttp gibi bir zaman uyumsuz aktarım yüklemeniz gerekir. Daha fazla bilgi için bkz. azure-core belgeleri .

zaman uyumsuz bir istemci' den azure.confidentialledger.aioalınır. Yöntemler, zaman uyumlu istemciyle aynı adlara ve imzalara sahiptir. Örnekler burada bulunabilir.

Sorun giderme

Genel

Gizli Kayıt Defteri istemcileri azure-core'da tanımlanan özel durumları tetikler. Örneğin, mevcut olmayan bir işlemi almaya çalışırsanız ResourceNotFoundError'ıConfidentialLedgerClient oluşturur:

from azure.core.exceptions import ResourceNotFoundError
from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient
from azure.identity import DefaultAzureCredential

identity_client = ConfidentialLedgerCertificateClient()
network_identity = identity_client.get_ledger_identity(
    ledger_id="my-ledger-id"
)

ledger_tls_cert_file_name = "ledger_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity["ledgerTlsCertificate"])

credential = DefaultAzureCredential()
ledger_client = ConfidentialLedgerClient(
    endpoint="https://my-ledger-id.confidential-ledger.azure.com",
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name
)

try:
    ledger_client.begin_get_ledger_entry(
        transaction_id="10000.100000"  # Using a very high id that probably doesn't exist in the ledger if it's relatively new.
    )
except ResourceNotFoundError as e:
    print(e.message)

Günlüğe Kaydetme

Bu kitaplık , günlüğe kaydetme için standart günlük kitaplığını kullanır. HTTP oturumları (URL'ler, üst bilgiler vb.) hakkındaki temel bilgiler BİlGİ düzeyinde günlüğe kaydedilir.

İstek/yanıt gövdeleri ve kaydedilmemiş üst bilgiler de dahil olmak üzere ayrıntılı HATA AYıKLAMA düzeyi günlüğü, bir istemcide şu bağımsız değişkenle logging_enable etkinleştirilebilir:

import logging
import sys

from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient
from azure.identity import DefaultAzureCredential

# Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)

# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

identity_client = ConfidentialLedgerCertificateClient()
network_identity = identity_client.get_ledger_identity(
    ledger_id="my-ledger-id"
)

ledger_tls_cert_file_name = "ledger_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity["ledgerTlsCertificate"])

credential = DefaultAzureCredential()

# This client will log detailed information about its HTTP sessions, at DEBUG level.
ledger_client = ConfidentialLedgerClient(
    endpoint="https://my-ledger-id.confidential-ledger.azure.com",
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name,
    logging_enable=True,
)

Benzer şekilde, logging_enable istemci için etkinleştirilmemiş olsa bile tek bir işlem için ayrıntılı günlüğe kaydetmeyi etkinleştirebilir:

ledger_client.get_current_ledger_entry(logging_enable=True)

Sonraki adımlar

Daha fazla örnek kod

Bu kod örnekleri, Azure Gizli Kayıt Defteri istemci kitaplığıyla yapılan yaygın senaryo işlemlerini gösterir.

Genel senaryolar

Gelişmiş senaryolar

Diğer Belgeler

Azure Gizli Kayıt Defteri hakkında daha kapsamlı belgeler için API başvuru belgelerine bakın. Ayrıca Microsoft Research'ün açık kaynak Gizli Konsorsiyum Çerçevesi hakkında daha fazla bilgi edinebilirsiniz.

Katkıda bulunma

Bu proje, katkı ve önerilere açıktır. Çoğu durumda, sağladığınız katkıyı kullanmamız için bize hak tanıma hakkına sahip olduğunuzu ve bu hakkı bize tanıdığınızı bildiren bir Katkıda Bulunan Lisans Sözleşmesi’ni (CLA) kabul etmeniz gerekir. Ayrıntılar için bkz. https://cla.microsoft.com.

Bir çekme isteği gönderdiğinizde, CLA robotu bir CLA sağlamanız gerekip gerekmediğini otomatik olarak belirler ve çekme isteğini uygun şekilde donatır (örn. etiket, açıklama). Robot tarafından sağlanan yönergeleri izlemeniz yeterlidir. Bu işlemi, CLA’mızı kullanarak tüm depolarda yalnızca bir kere yapmanız gerekir.

Bu proje Microsoft Open Source Code of Conduct (Microsoft Açık Kaynak Kullanım Kuralları) belgesinde listelenen kurallara uygundur. Daha fazla bilgi için Kullanım Kuralları hakkında SSS bölümüne bakın veya başka soru ya da görüşleriniz olursa opencode@microsoft.com ile iletişime geçin.