Biblioteka klienta poufnego rejestru platformy Azure dla języka Python — wersja 1.1.1
Rejestr poufny platformy Azure udostępnia usługę rejestrowania w niezmienialnym, odpornym na naruszenia rejestrze. W ramach portfolio poufnego przetwarzania na platformie Azure usługa Azure Confidential Ledger działa w bezpiecznych, opartych na sprzęcie zaufanych środowiskach wykonywania, nazywanych również enklawami. Jest ona oparta na platformie Microsoft Research Confidential Consortium Framework.
Kod | źródłowyPakiet (PyPI) | Pakiet (Conda) | Dokumentacja referencyjna interfejsu | APIDokumentacja produktu
Wprowadzenie
Instalowanie pakietów
Zainstaluj usługę azure-confidentialledger i azure-identity za pomocą narzędzia pip:
pip install azure-identity azure-confidentialledger
Usługa azure-identity jest używana do uwierzytelniania usługi Azure Active Directory, jak pokazano poniżej.
Wymagania wstępne
- Subskrypcja platformy Azure
- Środowisko Python 3.6 lub nowsze
- Uruchomione wystąpienie rejestru poufnego platformy Azure.
- Zarejestrowany użytkownik w rejestrze poufnym, zwykle przypisany podczas tworzenia zasobów usługi ARM , z uprawnieniami
Administrator
.
Uwierzytelnianie klienta
Korzystanie z usługi Azure Active Directory
W tym dokumencie pokazano, jak używać wartości DefaultAzureCredential do uwierzytelniania w rejestrze poufnym za pośrednictwem usługi Azure Active Directory. ConfidentialLedgerClient
Jednak akceptuje wszystkie poświadczenia azure-identity. Aby uzyskać więcej informacji na temat innych poświadczeń, zobacz dokumentację azure-identity .
Korzystanie z certyfikatu klienta
Zamiast usługi Azure Active Directory klienci mogą użyć certyfikatu klienta do uwierzytelniania za pośrednictwem wzajemnego protokołu TLS. azure.confidentialledger.ConfidentialLedgerCertificateCredential
może być używany do tego celu.
Tworzenie klienta
DefaultAzureCredential
program automatycznie obsłuży większość scenariuszy klienta zestawu Azure SDK. Aby rozpocząć, ustaw zmienne środowiskowe dla tożsamości usługi AAD zarejestrowanej w rejestrze poufnym.
export AZURE_CLIENT_ID="generated app id"
export AZURE_CLIENT_SECRET="random password"
export AZURE_TENANT_ID="tenant id"
DefaultAzureCredential
Następnie będzie można uwierzytelnić element ConfidentialLedgerClient
.
Konstruowanie klienta wymaga również adresu URL i identyfikatora rejestru poufnego, który można uzyskać z interfejsu wiersza polecenia platformy Azure lub witryny Azure Portal. Po pobraniu tych wartości zastąp wystąpienia elementów i "https://my-ledger-id.confidential-ledger.azure.com"
w poniższych przykładach"my-ledger-id"
. Może być również konieczne zastąpienie "https://identity.confidential-ledger.core.azure.com"
nazwą hosta z identityServiceUri
opisu arm rejestru.
Ponieważ rejestry poufne używają certyfikatów z podpisem własnym, które są bezpiecznie generowane i przechowywane w enklawie, należy najpierw pobrać certyfikat podpisywania dla każdego rejestru poufnego z usługi tożsamości rejestru poufnego.
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
)
ConfidentialLedgerClient
Wygodnie konstruktor pobierze certyfikat TLS rejestru (i zapisze go w określonym pliku), jeśli zostanie dostarczony z nieistniejącego pliku. Użytkownik jest odpowiedzialny za usunięcie utworzonego pliku zgodnie z potrzebami.
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`.
Aby wyjaśnić, że plik jest używany dla certyfikatu TLS rejestru, kolejne przykłady jawnie będą zapisywać certyfikat TLS rejestru do pliku.
Kluczowe pojęcia
Wpisy i transakcje rejestru
Każdy zapis w rejestrze poufnym platformy Azure generuje niezmienny wpis rejestru w usłudze. Zapisy, nazywane również transakcjami, są jednoznacznie identyfikowane przez identyfikatory transakcji, które zwiększają się wraz z każdym zapisem. Po zapisaniu wpisy rejestru mogą być pobierane w dowolnym momencie.
Kolekcje
Większość przypadków użycia obejmuje tylko jedną kolekcję na rejestr poufny, ale udostępniamy funkcję identyfikatora kolekcji w przypadku, gdy semantycznie lub logicznie różne grupy danych muszą być przechowywane w tym samym rejestrze poufnym.
Wpisy rejestru są pobierane przez element collectionId
. Rejestr poufny zawsze zakłada stałą usługę określaną collectionId
dla wpisów zapisanych bez określonego collectionId
.
Użytkownicy
Użytkownicy są zarządzani bezpośrednio przy użyciu rejestru poufnego zamiast za pośrednictwem platformy Azure. Użytkownicy mogą być oparte na usłudze AAD, identyfikowane przez identyfikator obiektu usługi AAD lub oparte na certyfikatach, identyfikowane przez odcisk palca certyfikatu PEM.
Rachunki
Aby wymusić gwarancje integralności transakcji, rejestr poufny platformy Azure używa struktury danych [merkle][merkle_tree_wiki] do rejestrowania skrótu wszystkich bloków transakcji, które są dołączane do niezmiennego rejestru. Po zatwierdzeniu transakcji zapisu użytkownicy rejestru poufnego platformy Azure mogą uzyskać kryptograficzny dowód merkle lub potwierdzenie w wpisie utworzonym w rejestrze poufnym, aby sprawdzić, czy operacja zapisu została poprawnie zapisana. Potwierdzenie transakcji zapisu jest dowodem na to, że system zadeklarował odpowiednią transakcję i może służyć do sprawdzania, czy wpis został skutecznie dołączony do rejestru.
Zapoznaj się z następującym artykułem , aby uzyskać więcej informacji na temat potwierdzeń dotyczących zapisu transakcji rejestru poufnego platformy Azure.
Weryfikacja potwierdzenia
Po otrzymaniu potwierdzenia transakcji zapisu użytkownicy rejestru poufnego platformy Azure mogą zweryfikować zawartość pobranego potwierdzenia po algorytmie weryfikacji. Powodzenie weryfikacji jest dowodem na to, że operacja zapisu skojarzona z potwierdzeniem została poprawnie dołączona do niezmienialnego rejestru.
Aby uzyskać więcej informacji na temat procesu weryfikacji na potrzeby potwierdzeń transakcji zapisu poufnego rejestru platformy Azure, zapoznaj się z następującym artykułem .
Oświadczenia aplikacji
Aplikacje rejestru poufnego platformy Azure mogą dołączać dowolne dane nazywane oświadczeniami aplikacji do zapisywania transakcji. Te oświadczenia reprezentują akcje wykonywane podczas operacji zapisu. Po dołączeniu do transakcji skrót SHA-256 obiektu oświadczeń jest zawarty w rejestrze i zatwierdzony w ramach transakcji zapisu. Gwarantuje to, że skrót jest podpisany i nie można go modyfikować.
Później oświadczenia aplikacji można ujawnić w postaci nietrawnej w ładunku paragonu odpowiadającym tej samej transakcji, w której zostały dodane. Dzięki temu użytkownicy mogą wykorzystać informacje w paragonie, aby ponownie obliczyć to samo podsumowanie oświadczeń, które zostało dołączone i zalogowane przez wystąpienie poufnej księgi platformy Azure podczas transakcji. Skrót oświadczeń może być używany w ramach procesu weryfikacji potwierdzenia transakcji zapisu, zapewniając użytkownikom sposób w trybie offline, aby w pełni zweryfikować autentyczność zarejestrowanych oświadczeń.
Więcej szczegółów na temat formatu oświadczeń aplikacji i algorytmu obliczeń skrótów można znaleźć pod następującymi linkami:
- Oświadczenia aplikacji rejestru poufnego platformy Azure
- Weryfikacja skrótu oświadczeń aplikacji rejestru poufnego platformy Azure
Aby uzyskać więcej informacji na temat oświadczeń aplikacji CCF, zapoznaj się z następującymi stronami dokumentacji CCF:
Poufne przetwarzanie
Usługa Azure Confidential Computing umożliwia izolowanie i ochronę danych podczas ich przetwarzania w chmurze. Rejestr poufny platformy Azure działa na maszynach wirtualnych usługi Azure Confidential Computing, co zapewnia silniejszą ochronę danych przy użyciu szyfrowania danych.
Struktura poufnego konsorcjum
Rejestr poufny platformy Azure jest oparty na strukturze Poufne konsorcjum (CCF) firmy Microsoft Research. W ramach programu CCF aplikacje są zarządzane przez konsorcjum członków z możliwością przesyłania propozycji modyfikowania i zarządzania operacją aplikacji. W rejestrze poufnym platformy Azure platforma Microsoft Azure jest właścicielem tożsamości członka operatora, która umożliwia mu wykonywanie akcji ładu i konserwacji, takich jak zastępowanie węzłów w złej kondycji w rejestrze poufnym i uaktualnianie kodu enklawy.
Przykłady
Ta sekcja zawiera fragmenty kodu obejmujące typowe zadania, w tym:
- Dołączanie wpisu
- Pobieranie wpisów rejestru
- Tworzenie zapytania z zakresem
- Zarządzanie użytkownikami
- Korzystanie z uwierzytelniania certyfikatu
- Weryfikowanie potwierdzeń transakcji zapisu
Dołączanie wpisu
Dane, które muszą być przechowywane niezmiennie w sposób odporny na naruszenia, można zapisać w rejestrze poufnym platformy Azure, dołączając wpis do rejestru.
Ponieważ rejestr poufny jest systemem rozproszonym, rzadkie błędy przejściowe mogą spowodować utratę zapisów. W przypadku wpisów, które należy zachować, zaleca się sprawdzenie, czy zapis stał się trwały. W przypadku mniej ważnych zapisów, w których preferowana jest wyższa przepływność klienta, krok oczekiwania może zostać pominięty.
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')
Alternatywnie klient może czekać na zatwierdzenie podczas pisania wpisu rejestru.
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"]}'
)
Pobieranie wpisów rejestru
Pobieranie wpisów rejestru starszych niż najnowsze może zająć trochę czasu, ponieważ usługa ładuje wpisy historyczne, więc jest dostarczany wpis poller.
Wpisy rejestru są pobierane przez kolekcję. Zwracana wartość jest wartością zawartą w określonej kolekcji w punkcie w czasie identyfikowanym przez identyfikator transakcji.
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"]}'
)
Tworzenie zapytania z zakresem
Wpisy rejestru mogą być pobierane z zakresu identyfikatorów transakcji. Wpisy będą zwracane tylko z domyślnej lub określonej kolekcji.
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"]}')
Zarządzanie użytkownikami
Użytkownicy z Administrator
uprawnieniami mogą zarządzać użytkownikami rejestru poufnego bezpośrednio przy użyciu samego rejestru poufnego. Dostępne role to Reader
(tylko do odczytu), Contributor
(odczyt i zapis) oraz Administrator
(odczyt, zapis i dodawanie lub usuwanie użytkowników).
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)
Korzystanie z uwierzytelniania certyfikatu
Klienci mogą uwierzytelniać się przy użyciu certyfikatu klienta w wzajemnym protokole TLS zamiast za pośrednictwem tokenu usługi Azure Active Directory. ConfidentialLedgerCertificateCredential
dla takich klientów.
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
)
Weryfikowanie potwierdzenia transakcji zapisu
Klienci mogą korzystać z biblioteki weryfikacji potwierdzenia w zestawie SDK, aby zweryfikować potwierdzenia transakcji zapisu wystawione przez wystąpienia poufne usługi Azure Legder. Narzędzie może służyć do pełnego weryfikowania paragonów w trybie offline, ponieważ algorytm weryfikacji nie wymaga połączenia z rejestrem poufnym ani żadną inną usługą platformy Azure.
Po dołączeniu nowego wpisu do rejestru (zapoznaj się z tym przykładem), można uzyskać potwierdzenie dla zatwierdzonej transakcji zapisu.
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}")
Po pobraniu potwierdzenia dla transakcji zapisu można wywołać verify_receipt
funkcję w celu sprawdzenia, czy potwierdzenie jest prawidłowe. Funkcja może zaakceptować opcjonalną listę oświadczeń aplikacji w celu zweryfikowania pod kątem skrótu oświadczeń potwierdzenia.
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")
Pełny przykładowy program w języku Python pokazujący, jak dołączyć nowy wpis do uruchomionego wystąpienia poufnego rejestru, uzyskać potwierdzenie zatwierdzonej transakcji i sprawdzić, czy zawartość potwierdzenia można znaleźć w folderze samples : get_and_verify_receipt.py.
Interfejs API asynchroniczny
Ta biblioteka zawiera kompletny interfejs API asynchroniczny obsługiwany w języku Python 3.5 lub nowszym. Aby go użyć, należy najpierw zainstalować transport asynchroniczny, taki jak aiohttp. Aby uzyskać więcej informacji, zobacz dokumentację azure-core .
Klient asynchroniczny jest uzyskiwany z azure.confidentialledger.aio
programu . Metody mają takie same nazwy i podpisy jak klient synchroniczny. Przykłady można znaleźć tutaj.
Rozwiązywanie problemów
Ogólne
Klienci rejestru poufnego zgłaszają wyjątki zdefiniowane w usłudze azure-core. Jeśli na przykład spróbujesz uzyskać transakcję, która nie istnieje, ConfidentialLedgerClient
zgłasza błąd ResourceNotFoundError:
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)
Rejestrowanie
Ta biblioteka używa standardowej biblioteki rejestrowania do rejestrowania. Podstawowe informacje o sesjach HTTP (adresach URL, nagłówkach itp.) są rejestrowane na poziomie INFORMACJI.
Szczegółowe rejestrowanie na poziomie DEBUG, w tym treści żądań/odpowiedzi i nieredagowanych nagłówków, można włączyć na kliencie z argumentem logging_enable
:
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,
)
Podobnie może logging_enable
włączyć szczegółowe rejestrowanie dla pojedynczej operacji, nawet jeśli nie jest włączone dla klienta:
ledger_client.get_current_ledger_entry(logging_enable=True)
Następne kroki
Więcej przykładów kodu
Te przykłady kodu pokazują typowe operacje scenariuszy z biblioteką klienta Poufne rejestry platformy Azure.
Typowe scenariusze
Zapisywanie w rejestrze:
- write_to_ledger.py
- write_to_ledger_async.py (wersja asynchroniowa)
Napisz wiele wpisów rejestru i pobierz je wszystkie później:
- list_ledger_entries.py
- list_ledger_entries_async.py (wersja asynchroniowa)
Zarządzanie użytkownikami przy użyciu zaimplementowanej przez usługę kontroli dostępu opartej na rolach:
- manage_users.py
- manage_users_async.py (wersja asynchroniowa)
Scenariusze zaawansowane
Korzystanie z kolekcji:
- use_collections.py
- use_collections_async.py (wersja asynchroniowa)
Pobieranie paragonów dla zapisów rejestru:
- get_receipt.py
- get_receipt_async.py (wersja asynchroniowa)
Weryfikowanie szczegółów usługi:
- verify_service.py
- verify_service_async.py (wersja asynchroniowa)
Dodatkowa dokumentacja
Aby uzyskać bardziej obszerną dokumentację dotyczącą poufnego rejestru platformy Azure, zobacz dokumentację referencyjną interfejsu API. Możesz również dowiedzieć się więcej na temat struktury poufnego konsorcjum Microsoft Research Firmy Microsoft.
Współtworzenie
W tym projekcie zachęcamy do współtworzenia i zgłaszania sugestii. Współtworzenie w większości przypadków wymaga zgody na umowę licencyjną dotyczącą współautorów (CLA, Contributor License Agreement), zgodnie z którą współautor ma prawo udzielić i faktycznie udziela nam praw do używania wytworzonej przez siebie zawartości. Aby uzyskać szczegółowe informacje, odwiedź stronę https://cla.microsoft.com.
Po przesłaniu żądania ściągnięcia robot CLA automatycznie określi, czy musisz przekazać umowę CLA, i doda odpowiednie informacje do tego żądania (na przykład etykietę czy komentarz). Po prostu postępuj zgodnie z instrukcjami robota. Wystarczy zrobić to raz dla wszystkich repozytoriów, w przypadku których jest używana nasza umowa CLA.
W tym projekcie przyjęto Kodeks postępowania oprogramowania Open Source firmy Microsoft. Aby uzyskać więcej informacji, zobacz artykuł Code of Conduct FAQ (Często zadawane pytania dotyczące kodeksu postępowania). Jeśli będziesz mieć jeszcze jakieś pytania lub komentarze, wyślij wiadomość e-mail na adres opencode@microsoft.com.
Azure SDK for Python