快速入門:適用於 Python 的 Microsoft Azure 機密總帳用戶端程式庫
開始使用適用於 Python 的 Microsoft Azure 機密總帳用戶端程式庫。 請遵循步驟中的步驟來安裝套件,並試用基本工作的範例程式碼。
Microsoft Azure 機密總帳是一項高安全性的新服務,可用來管理敏感性資料記錄。 Azure 機密總帳以具有權限的區塊鏈模型為基礎,可提供獨特的資料完整性優勢,例如不變性 (讓總帳只能附加) 和防篡改 (以確保所有記錄都保持不變)。
如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶。
API 參考文件 | 程式庫原始程式碼 | 套件 (Python Package Index) 管理程式庫| 套件 (Python Package Index) 用戶端程式庫
必要條件
- Azure 訂用帳戶 - 建立免費帳戶。 - 訂用帳戶擁有者 - 只有具備 Azure 訂用帳戶「擁有者」權限的使用者,才能建立機密總帳。 先確認您有適當的存取權,再繼續進行本快速入門。
- Azure SDK for Python 支援的 Python 版本。
- Azure CLI 或 Azure PowerShell。
設定
本快速入門使用 Azure 身分識別程式庫,搭配 Azure CLI 或 Azure PowerShell,向 Azure 服務驗證使用者。 開發人員也可以使用 Visual Studio 或 Visual Studio Code 來驗證其呼叫。 如需詳細資訊,請參閱使用 Azure 身分識別用戶端程式庫驗證用戶端。
登入 Azure
使用 Azure CLI az login 命令或 Azure PowerShell Connect-AzAccount Cmdlet 來登入 Azure。
az login
如果 CLI 或 PowerShell 可以開啟您的預設瀏覽器,其會執行這項操作,並載入 Azure 登入頁面。 否則,請造訪 https://aka.ms/devicelogin,並輸入顯示在終端機中的授權碼。
如果出現提示,請在瀏覽器中使用您的帳戶認證登入。
安裝套件
在終端機或命令提示字元中,建立適當的專案資料夾,然後建立並啟動 Python 虛擬環境,如使用 Python 虛擬環境中所述。
安裝 Microsoft Entra 身分識別用戶端程式庫:
pip install azure-identity
安裝 Azure 機密總帳控制平面用戶端程式庫。
pip install azure.mgmt.confidentialledger
安裝 Azure 機密總帳資料平面用戶端程式庫。
pip install azure.confidentialledger
建立資源群組
資源群組是在其中部署與管理 Azure 資源的邏輯容器。 使用 Azure CLI az group create 命令或 Azure PowerShell New-AzResourceGroup Cmdlet,在 eastus 位置中建立名為 myResourceGroup 的資源群組。
az group create --name "myResourceGroup" -l "EastUS"
註冊 microsoft.ConfidentialLedger 資源提供者
資源提供者是提供 Azure 資源的服務。 使用 Azure CLI az provider register 命令或 Azure PowerShell Register-AzResourceProvider Cmdlet 來註冊 Azure 機密總帳資源提供者 'microsoft.ConfidentialLedger'。
az provider register --namespace "microsoft.ConfidentialLedger"
您可以使用 Azure CLI az provider register 命令或 Azure PowerShell Get-AzResourceProvider Cmdlet 來確認註冊已完成。
az provider show --namespace "microsoft.ConfidentialLedger"
建立 Python 應用程式
初始化
我們現在可以開始撰寫 Python 應用程式。 首先,匯入所需的套件。
# Import the Azure authentication library
from azure.identity import DefaultAzureCredential
## Import the control plane sdk
from azure.mgmt.confidentialledger import ConfidentialLedger as ConfidentialLedgerAPI
from azure.mgmt.confidentialledger.models import ConfidentialLedger
# import the data plane sdk
from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient
接下來,使用 DefaultAzureCredential 類別來驗證應用程式。
credential = DefaultAzureCredential()
設定一些變數供應用程式使用,以完成設定:資源群組 (myResourceGroup)、您想要建立的總帳名稱,以及要供資料平面用戶端程式庫使用的兩個 URL。
重要
每個總帳都必須有全域唯一的名稱。 在下列範例中,將 <your-unique-ledger-name> 取代為您的總帳名稱。
resource_group = "<azure-resource-group>"
ledger_name = "<your-unique-ledger-name>"
subscription_id = "<azure-subscription-id>"
identity_url = "https://identity.confidential-ledger.core.azure.com"
ledger_url = "https://" + ledger_name + ".confidential-ledger.azure.com"
使用控制平面用戶端程式庫
控制平面用戶端程式庫 (azure.mgmt.confidentialledger) 允許對總帳進行作業,例如建立、修改、刪除、列出與訂用帳戶相關聯的總帳,以及取得特定總帳的詳細資料。
在程式碼中,先向 ConfidentialLedgerAPI 傳遞認證變數和您的 Azure 訂用帳戶識別碼( 兩者皆已在上方設定),以建立控制平面用戶端。
confidential_ledger_mgmt = ConfidentialLedgerAPI(
credential, subscription_id
)
我們現在可以使用 begin_create
來建立總帳。 begin_create
函式需要三個參數:您的資源群組、總帳的名稱,以及「properties」物件。
使用下列索引鍵和值建立 properties
字典,並將其指派給變數。
properties = {
"location": "eastus",
"tags": {},
"properties": {
"ledgerType": "Public",
"aadBasedSecurityPrincipals": [],
},
}
ledger_properties = ConfidentialLedger(**properties)
現在,將資源群組、總帳的名稱和 properties 物件傳遞至 begin_create
。
confidential_ledger_mgmt.ledger.begin_create(resource_group, ledger_name, ledger_properties)
若要確認總帳已成功建立,請使用 get
函式檢視其詳細資料。
myledger = confidential_ledger_mgmt.ledger.get(resource_group, ledger_name)
print("Here are the details of your newly created ledger:")
print (f"- Name: {myledger.name}")
print (f"- Location: {myledger.location}")
print (f"- ID: {myledger.id}")
使用資料平面用戶端程式庫
現在我們有了總帳,接下來請使用資料平面用戶端程式庫 (azure.confidentialledger) 來與其互動。
首先,我們要產生並儲存機密總帳憑證。
identity_client = ConfidentialLedgerCertificateClient(identity_url)
network_identity = identity_client.get_ledger_identity(
ledger_id=ledger_name
)
ledger_tls_cert_file_name = "networkcert.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
cert_file.write(network_identity['ledgerTlsCertificate'])
現在,我們可以使用網路憑證以及總帳 URL 和認證來建立機密總帳用戶端。
ledger_client = ConfidentialLedgerClient(
endpoint=ledger_url,
credential=credential,
ledger_certificate_path=ledger_tls_cert_file_name
)
我們已準備好寫入到總帳。 我們會使用 create_ledger_entry
函式來進行此操作。
sample_entry = {"contents": "Hello world!"}
append_result = ledger_client.create_ledger_entry(entry=sample_entry)
print(append_result['transactionId'])
列印函式會傳回總帳寫入交易識別碼,其可供用來擷取寫入到總帳的訊息。
entry = ledger_client.get_ledger_entry(transaction_id=append_result['transactionId'])['entry']
print(f"Entry (transaction id = {entry['transactionId']}) in collection {entry['collectionId']}: {entry['contents']}")
如果您只想要認可至總帳的最新交易,則可以使用 get_current_ledger_entry
函式。
latest_entry = ledger_client.get_current_ledger_entry()
print(f"Current entry (transaction id = {latest_entry['transactionId']}) in collection {latest_entry['collectionId']}: {latest_entry['contents']}")
列印函式會傳回「Hello world!」,因為這是總帳中與交易識別碼對應且為最新交易的訊息。
完整範例程式碼
import time
from azure.identity import DefaultAzureCredential
## Import control plane sdk
from azure.mgmt.confidentialledger import ConfidentialLedger as ConfidentialLedgerAPI
from azure.mgmt.confidentialledger.models import ConfidentialLedger
# import data plane sdk
from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient
# Set variables
resource_group = "<azure-resource-group>"
ledger_name = "<your-unique-ledger-name>"
subscription_id = "<azure-subscription-id>"
identity_url = "https://identity.confidential-ledger.core.azure.com"
ledger_url = "https://" + ledger_name + ".confidential-ledger.azure.com"
# Authentication
# Need to do az login to get default credential to work
credential = DefaultAzureCredential()
# Control plane (azure.mgmt.confidentialledger)
#
# initialize endpoint with credential and subscription
confidential_ledger_mgmt = ConfidentialLedgerAPI(
credential, "<subscription-id>"
)
# Create properties dictionary for begin_create call
properties = {
"location": "eastus",
"tags": {},
"properties": {
"ledgerType": "Public",
"aadBasedSecurityPrincipals": [],
},
}
ledger_properties = ConfidentialLedger(**properties)
# Create a ledger
confidential_ledger_mgmt.ledger.begin_create(resource_group, ledger_name, ledger_properties)
# Get the details of the ledger you just created
print(f"{resource_group} / {ledger_name}")
print("Here are the details of your newly created ledger:")
myledger = confidential_ledger_mgmt.ledger.get(resource_group, ledger_name)
print (f"- Name: {myledger.name}")
print (f"- Location: {myledger.location}")
print (f"- ID: {myledger.id}")
# Data plane (azure.confidentialledger)
#
# Create a CL client
identity_client = ConfidentialLedgerCertificateClient(identity_url)
network_identity = identity_client.get_ledger_identity(
ledger_id=ledger_name
)
ledger_tls_cert_file_name = "networkcert.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
cert_file.write(network_identity['ledgerTlsCertificate'])
ledger_client = ConfidentialLedgerClient(
endpoint=ledger_url,
credential=credential,
ledger_certificate_path=ledger_tls_cert_file_name
)
# Write to the ledger
sample_entry = {"contents": "Hello world!"}
ledger_client.create_ledger_entry(entry=sample_entry)
# Read from the ledger
latest_entry = ledger_client.get_current_ledger_entry()
print(f"Current entry (transaction id = {latest_entry['transactionId']}) in collection {latest_entry['collectionId']}: {latest_entry['contents']}")
輪詢者
如果您想要等候寫入交易認可至總帳,則可以使用 begin_create_ledger_entry
函式。 這會傳迴輪詢者,以等待項目永久認可。
sample_entry = {"contents": "Hello world!"}
ledger_entry_poller = ledger_client.begin_create_ledger_entry(
entry=sample_entry
)
ledger_entry_result = ledger_entry_poller.result()
查詢較舊的總帳項目需要總帳從磁碟讀取項目並加以驗證。 您可以使用 begin_get_ledger_entry
函式來建立輪詢者,其會等候所查詢的項目處於就緒狀態才進行檢視。
get_entry_poller = ledger_client.begin_get_ledger_entry(
transaction_id=ledger_entry_result['transactionId']
)
entry = get_entry_poller.result()
清除資源
其他 Azure 機密總帳文章可以本快速入門為基礎。 如果您打算繼續進行後續的快速入門和教學課程,您可以讓這些資源留在原處。
否則,當您完成本文中建立的資源時,請使用 Azure CLI az group delete 命令來刪除資源群組及其包含的所有資源:
az group delete --resource-group myResourceGroup