你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
先决条件
- Azure 存储帐户
- Azure CLI (可选)
- 适用于 Python 的 Azure SDK 支持的 Python 版本(可选)
概述
由机密账本支持的托管应用程序的 Blob 存储摘要 可用于保证 Blob 容器中的 Blob 是可信且未被篡改的。 应用程序连接到存储帐户后,除了计算摘要并将其存储到 Azure 机密账本之外,还会实时跟踪要添加到存储帐户中的每个容器的所有 blob。 可以随时执行审核以检查 blob 的有效性,并确保 blob 容器不会被篡改。
部署托管应用程序
可在 Azure 市场中找到托管应用程序: 由机密账本支持的 Blob 存储摘要(预览版)。
要创建的资源
填写必填字段并部署应用程序后,将在受管理资源组下创建以下资源:
- 机密账本
- Microsoft Azure 服务总线队列(已启用“会话”)
- 存储帐户 (用于存储摘要逻辑和审核历史记录的发布者拥有的存储帐户)
- Function App
- Application Insights
将存储帐户连接到托管应用程序
成功部署托管应用程序后,可以将其连接到 Azure 存储帐户,以便将 Blob 容器摘要处理和记录到 Azure 机密账本中。
托管应用程序当前支持以下类型的存储帐户:
- 标准常规用途 v2 (GPv2) 存储帐户,包括为热层、冷层或存档层配置的存储帐户。
- 已启用分层命名空间(HNS)的 Azure Data Lake Storage Gen2(ADLS Gen2)帐户。
- 具有公共或专用终结点配置的存储帐户,前提是授予了适当的网络和标识权限。
- 标准或高级性能层,只要启用了 Blob 服务。
注意: 仅支持 Blob 服务。 其他服务(例如文件、表或队列)不适用于托管应用程序。
为存储帐户创建主题和事件订阅
托管应用程序使用 Azure 服务总线队列来跟踪和记录所有“创建 Blob”事件和“删除 Blob”事件。 将使用托管应用程序在受管理资源组中创建的队列,并将其添加为要为其创建 blob 的任何存储帐户的事件订阅服务器。 此外,请确保为你正在跟踪的存储帐户关联的 System Topic Name
分配托管应用创建的 Azure 服务总线队列的 Azure Service Bus Data Sender
。
- Azure 门户
- CLI
在 Microsoft Azure 门户中,可以导航到要开始为其创建 blob 摘要的存储帐户,并转到“Events
”边栏选项卡。 可以在那里创建事件订阅并将其连接到 Azure 服务总线队列终结点。 请务必将 Managed identity type
标记为 System Assigned
。
该队列使用会话来维护跨多个存储帐户的排序,因此还需要导航到“Delivery Properties
”选项卡,并为此事件订阅输入唯一的会话 ID。
将所需角色添加到存储帐户
托管应用程序需要 Storage Blob Data Owner
角色才能读取并为每个 blob 创建哈希,并且需要添加此角色才能正确计算摘要。
- Azure 门户
- CLI
注意
多个存储帐户可以连接到单个托管应用程序实例。 我们目前建议最多 10 个存储帐户 ,其中包含高使用率 Blob 容器。
添加 blob 和摘要创建
将存储帐户正确连接到托管应用程序后,可以开始将 blob 添加到存储帐户中的容器。 系统将实时跟踪 blob,计算摘要并将其存储在 Azure 机密账本中。
事务表和块表
所有 blob 创建事件都在托管应用程序内存储的内部表中进行跟踪。
事务表用于保存有关每个 blob 的信息,以及使用 blob 元数据和/或内容的组合生成的唯一哈希。
块表用于保存与为 blob 容器创建的每个摘要相关的信息,摘要的关联事务 ID 存储在 Azure 机密账本中。
摘要设置
创建托管应用程序时,可以选择一些摘要设置。 可以选择用于创建摘要的 Hashing Algorithm
,无论是 MD5
还是 SHA256
。 还可以选择每个摘要或 Digest Size
中包含的 blob 数。 摘要大小范围介于 1-16
之间,是每个块中将一起哈希处理的 blob 数。 最后,可以选择 Hash Contents
,以及创建每个摘要时将进行哈希处理的内容。 这可以是每个 blob 的 File Contents + Metadata
,也可以只是 File Contents
。
在 Azure 机密账本上查看摘要
通过导航到“Ledger Explorer
”边栏选项卡,可以查看直接存储在 Azure 机密账本中的摘要。
执行审核
如果想要检查添加到容器的 blob 的有效性,以确保它们不会被篡改,则可以随时运行审核。 审核会重播每个 blob 创建事件,并使用审核期间存储在容器中的 blob 来重新计算摘要。 然后,它会将重新计算的摘要与 Azure 机密中存储的摘要进行比较,并提供一份报告,其中显示所有摘要比较以及 blob 容器是否被篡改。
触发审核
可以通过向与托管应用程序关联的 Microsoft Azure 服务总线队列添加以下消息来触发审核:
{
"eventType": "PerformAudit",
"storageAccount": "<storage_account_name>",
"blobContainer": "<blob_container_name>"
}
- Azure 门户
- Python SDK
请确保包含 Session ID
,因为队列已启用会话。
查看审核结果
成功执行审核后,可以在相应的存储帐户中名为 <managed-application-name>-audit-records
的容器下找到审核结果。 结果包含重新计算的摘要、从 Azure 机密账本检索的摘要以及 blob 是否被篡改。
创建托管应用程序时,如果选择使用电子邮件警报,则会在 Audit Failure
或 Audit Success and Failure
(具体取决于选择的选项)期间收到发送到你电子邮件地址的电子邮件。
启用用户跟踪审核
可以使用发送到托管应用创建的内部存储帐户的诊断日志来跟踪哪些用户上传或删除了 blob。
1.启用诊断设置
- 转到 存储帐户 → 监视 → 诊断设置。
- 为 “blob” 服务添加新设置。
- 启用:
Storage Write
Storage Delete
- 将目标设置为托管应用创建的内部存档存储帐户。
2.将以下消息发送到服务总线队列(具有会话 ID):
看到流入存储帐户的诊断日志后,可以在触发审核事件时添加 getUsers
字段:
{
"eventType": "PerformAudit",
"storageAccount": "<storage_account_name>",
"blobContainer": "<blob_container_name>",
"getUsers": true
}
3.检查审核结果
成功处理审核后,每个条目将包括执行操作的用户及其 OID(如有):
"user": {
"upn": "user@example.com",
"oid": "<object-id>"
}
日志记录和错误
可以在相应的存储帐户中名为 <managed-application-name>-error-logs
的容器下找到错误日志。 如果 blob 创建事件或审核进程失败,则会记录失败的原因并将其存储在此容器中。 如果对错误日志或应用程序功能有任何疑问,请联系托管应用程序详细信息中提供的 Azure 机密账本支持团队。
清理托管应用程序
可以删除托管应用程序以清理并移除所有关联的资源。 删除托管应用程序会停止跟踪所有 Blob 事务,并停止创建所有摘要。 对于在删除之前添加的 blob,审核报告仍然有效。
更多资源
有关托管应用程序和已部署资源的详细信息,请参阅以下链接: