建立受控應用程式以儲存 Blob 摘要
機密總帳支援的 Blob 儲存體摘要受控應用程式可用來保證 Blob 容器內的 Blob 受信任且不會遭到竄改。 應用程式一旦連線到儲存體帳戶,除了計算摘要並將其儲存至 Azure 機密總帳之外,也會即時追蹤新增至儲存體帳戶中每個容器的所有 Blob。 您可以隨時執行稽核,以檢查 Blob 的有效性,並確保 Blob 容器不會遭到竄改。
您可以在 Azure Marketplace 中找到受控應用程式:機密總帳支援的 Blob 儲存體摘要 (預覽)。
填入必要欄位並部署應用程式之後,就會在受控資源群組下建立下列資源:
建立受控應用程式之後,您就可以將受控應用程式連線到儲存體帳戶,開始處理 Blob 容器摘要並記錄到 Azure 機密總帳。
受控應用程式會使用 Azure 服務匯流排 佇列來追蹤和記錄所有建立 Blob 和刪除 Blob 事件。 您將會使用受控應用程式在受控資源群組中建立的佇列,並將其新增為您要為其建立 Blob 的任何儲存體帳戶的事件訂閱者。 此外,請確定System Topic Name
與您追蹤的記憶體帳戶相關聯,已為受控應用程式所建立 Azure 服務匯流排 佇佇列指派 Azure Service Bus Data Sender
。
在 Azure 入口網站上,您可以瀏覽至您想要開始建立 Blob 摘要的儲存體帳戶,然後移至 Events
刀鋒視窗。 您可以在該處建立事件訂用帳戶,並將其連線至 Azure 服務匯流排佇列端點。 請務必將標示 Managed identity type
為 System Assigned
。
佇列會使用工作階段來維護跨多個儲存體帳戶的排序,因此您也必須瀏覽至 Delivery Properties
索引標籤,並為此事件訂用帳戶輸入唯一的工作階段識別碼。
建立事件主題:
az eventgrid system-topic create \
--resource-group {resource_group} \
--name {sample_topic_name} \
--location {location} \
--topic-type microsoft.storage.storageaccounts \
--source /subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.Storage/storageAccounts/{storage_account_name} \
--identity SystemAssigned
resource-group
- 應在其中建立主題的資源群組
name
- 要建立的主題名稱
location
- 要建立的主題位置
source
- 要為其建立主題的儲存體帳戶資源識別碼
建立事件訂用帳戶:
az eventgrid system-topic event-subscription create \
--name {sample_subscription_name} \
--system-topic-name {sample_topic_name} \
--resource-group {resource_group} \
--event-delivery-schema EventGridSchema \
--included-event-types Microsoft.Storage.BlobCreated \
--delivery-attribute-mapping sessionId static {sample_session_id} false \
--endpoint-type servicebusqueue \
--endpoint /subscriptions/{subscription}/resourceGroups/{managed_resource_group}/providers/Microsoft.ServiceBus/namespaces/{service_bus_namespace}/queues/{service_bus_queue}
name
- 要建立的訂用帳戶名稱
system-topic-name
- 為其建立訂用帳戶的主題名稱 (應與新建立的主題相同)
resource-group
- 應在其中建立訂用帳戶的資源群組
delivery-attribute-mapping
- 必要 sessionId 欄位的對應。 輸入唯一的 sessionId
endpoint
- 訂閱儲存體帳戶主題的服務匯流排佇列資源識別碼
受控應用程式需要 Storage Blob Data Owner
角色來讀取和建立每個 Blob 的雜湊,而且必須新增此角色才能正確計算摘要。
az role assignment create \
--role "Storage Blob Data Owner" \
--assignee-object-id {function_oid} \
--assignee-principal-type ServicePrincipal\
--scope /subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}
assignee-object-id
- 使用受控應用程式建立之 Azure Function 的 OID。 可以在 [身分識別] 刀鋒視窗底下找到
scope
- 要為其建立角色的儲存體帳戶資源識別碼
注意
多個儲存體帳戶可以連線到單一受控應用程式執行個體。 我們目前建議最多 10 個儲存體帳戶,包含高使用量 Blob 容器。
一旦儲存體帳戶正確連線到受控應用程式,Blob 就可以開始新增至儲存體帳戶內的容器。 Blob 會即時進行追蹤,且摘要會計算並儲存在 Azure 機密總帳中。
所有 Blob 建立事件都會在受控應用程式內儲存的內部資料表中追蹤。
交易資料表會保存每個 Blob 的相關資訊,以及使用 Blob 中繼資料和/或內容組合所產生的唯一雜湊。
區塊資料表會保存針對 Blob 容器建立的每個摘要相關資訊,而摘要的相關聯交易識別碼會儲存在 Azure 機密總帳中。
建立受控應用程式時,可以選取一些摘要設定。 您可以選擇用來建立摘要的 Hashing Algorithm
,無論是 MD5
還是 SHA256
。 您也可以選擇每個摘要或 Digest Size
中包含的 Blob 數目。 摘要大小範圍從 1-16
開始,而且是每個區塊內一起雜湊的 Blob 數目。 最後,您可以選取 Hash Contents
,以及在建立每個摘要時進行雜湊的內容。 這可以是每個 Blob 的 File Contents + Metadata
,或只是 File Contents
。
您可以瀏覽至 Ledger Explorer
刀鋒視窗,檢視直接儲存在 Azure 機密總帳中的摘要。
如果您想要檢查新增至容器的 Blob 有效性,以確保這些 Blob 不會遭到竄改,則可以在任何時間點執行稽核。 稽核會重新執行每個 Blob 建立事件,並使用稽核期間儲存在容器中的 Blob 重新計算摘要。 然後比較重新計算的摘要與儲存在 Azure 機密中的摘要,並提供報告來顯示所有摘要比較,以及 Blob 容器是否遭到竄改。
您可以將下列訊息納入與受控應用程式相關聯的服務匯流排佇列,以觸發稽核:
{
"eventType": "PerformAudit",
"storageAccount": "<storage_account_name>",
"blobContainer": "<blob_container_name>"
}
請務必包含 Session ID
,因為佇列已啟用工作階段。
import json
import uuid
from azure.servicebus import ServiceBusClient, ServiceBusMessage
SERVICE_BUS_CONNECTION_STR = "<service_bus_connection_string>"
QUEUE_NAME = "<service_bus_queue_name>"
STORAGE_ACCOUNT_NAME = "<storage_account_name>"
BLOB_CONTAINER_NAME = "<blob_container_name>"
SESSION_ID = str(uuid.uuid4())
servicebus_client = ServiceBusClient.from_connection_string(conn_str=SERVICE_BUS_CONNECTION_STR, logging_enable=True)
sender = servicebus_client.get_queue_sender(queue_name=QUEUE_NAME)
message = {
"eventType": "PerformAudit",
"storageAccount": STORAGE_ACCOUNT_NAME,
"blobContainer": BLOB_CONTAINER_NAME
}
message = ServiceBusMessage(json.dumps(message), session_id=SESSION_ID)
sender.send_messages(message)
成功執行稽核之後,您可以在個別儲存體帳戶內所找到名為 <managed-application-name>-audit-records
的容器底下,找到稽核的結果。 結果包含重新計算的摘要、從 Azure 機密總帳擷取的摘要,以及 Blob 是否遭到竄改。
建立受控應用程式時,如果您選擇使用電子郵件警示,根據選取的選項,您會在 Audit Failure
或 Audit Success and Failure
期間收到傳送給您的電子郵件。
您可以在個別儲存體帳戶中所找到名為 <managed-application-name>-error-logs
的容器底下,找到錯誤記錄檔。 如果 Blob 建立事件或稽核程序失敗,則會記錄失敗的原因並儲存在此容器中。 如果錯誤記錄檔或應用程式功能有任何問題,請連絡受控應用程式詳細資料中提供的 Azure 機密總帳支援小組。
您可以刪除受控應用程式,以清除和移除所有相關聯的資源。 刪除受控應用程式會停止追蹤所有 Blob 交易,並停止建立所有摘要。 稽核報告對於在刪除之前新增的 Blob 仍然有效。
如需受控應用程式和已部署資源的詳細資訊,請參閱下列連結: