Azure 表存储 提供一个结构化、非关系型数据的 NoSQL 键值存储。 表安全与其他 Azure 存储 数据服务共享基础,但有一些具体细节——包括独特的 Microsoft Entra ID 授权表面,以及与 Azure Cosmos DB for Table API 的重叠——值得关注。
Note
本文介绍了针对Azure 表存储的具体安全实践。 关于账户级别的安全指导,请参见“保护您的 Azure 存储 账户”。
特定于服务的安全性
Azure 表存储 和 Azure Cosmos DB for Table API 都暴露了类似的表数据模型,但它们的安全能力有显著差异。 选择项目启动时满足您安全需求的平台。 它们之间的数据迁移并不简单。
当你需要专用吞吐量、全局分布或每表工作负载进行更细致的网络隔离时,可以使用 Azure Cosmos DB for Table:Cosmos DB for Table API 是一个独立资源,拥有自己的私有端点、防火墙和 IAM 配置,独立于任何存储账户。 当 Table 工作负载的网络或治理要求与共享同一常规用途存储帐户的其他工作负载不同时,这样可以将其影响范围隔离开来。 欲了解更多信息,请参见《Azure Cosmos DB for Table》。
当你需要在账户级别将表存储与 Blob、文件和队列共同部署时,可以使用 Azure 表存储:表存储位于通用存储账户中,因此同一套网络规则、专用终结点和标识策略可同时应用于全部四项数据服务。 Cosmos DB for Table 是一个独立资源,拥有独立的安全配置。
身份和访问管理
使用 Microsoft Entra ID 授权表数据操作:Entra ID 授权无需在应用程序代码中使用帐户密钥,并提供基于身份的审核跟踪记录。 尽可能在表范围内分配内置的 存储表数据读取者 或 存储表数据参与者 角色。 有关详细信息,请参阅 使用 Microsoft Entra ID 授权对表的访问。
将角色分配范围限定到特定表:内置表数据角色支持表级作用域设置。 当某个服务只需要访问单个表时,应在表资源级别而不是在账户级别分配角色。
将SAS令牌范围限制为特定的分区和行键范围:表SAS支持分区键和行键范围限制。 使用它们可将令牌的访问范围限制为多租户表中某个租户的行,或限制为特定的数据子集。 有关详细信息,请参阅使用共享访问签名 (SAS) 授予对 Azure 存储资源的有限访问权限。
只授予所需的特定表操作:表SAS分别支持
query、add、update和delete权限。 读者式调用方只应持有update,绝不能持有query或delete。
数据保护
Table Storage 将实体存储为扁平属性包,不提供针对每个实体的访问控制列表。 在制定分区策略时就要考虑安全性,而不是事后再补加访问控制。
与访问边界对齐的分区表:当一个表服务多个租户或分类级别时,选择一个按租户或分类分组实体的分区键。 将此与 SAS 分区键范围限制结合使用,即可在无需为每个租户单独创建表的情况下强制实施租户隔离。
不要在实体属性中存储秘密或不必要的个人数据:任何拥有
queryread或访问该表或分区的主体都可以看到实体。 将机密存储在 Azure 密钥保管库 中,并在实体中保存对这些机密的引用,同时尽量减少放入可查询属性中的个人数据。在应用层加密敏感属性值:对于必须保密的属性值,插入或更新前用 密钥保管库 中的密钥加密客户端的值。 这种加密与对整个表应用的存储端加密无关。 有关详细信息,请参阅 “关于密钥”。
日志记录和监控
启用表操作的诊断设置:将
StorageRead、StorageWrite和StorageDelete类别发送到 Log Analytics。 对异常的授权方式发出警报,尤其是在应禁用共享密钥访问的帐户中。 更多信息请参见监控 Azure 表存储。对大量删除或更新操作发出警报:偏离该表基线水平的批量
DeleteEntity或UpdateEntity操作可能表明存在数据销毁或篡改行为。 建立基线并在偏差时发出警报。
相关安全文章
- 保护您的 Azure 存储 账户——跨界 Azure 存储 安全指南。
- 保护你的 Azure Blob 存储 - Blob 专属安全性。
- 保护您的 Azure 文件存储 - 文件共享安全。
- 保护你的 Azure 队列存储 - 队列专用安全。