Azure Cosmos DB 中的数据库安全性概述

适用对象: NoSQL MongoDB Cassandra Gremlin

本文介绍了数据库安全最佳做法以及 Azure Cosmos DB 提供的关键功能,帮助你防范、检测和应对数据库入侵。

Azure Cosmos DB 安全有什么新功能?

静态加密现已可用于所有 Azure 中国区域的 Azure Cosmos DB 中存储的文档和备份。 对于这些区域中的新客户和现有客户,会自动应用静态加密。 无需配置任何内容。 可获得与以前(即知道使用静态加密可确保数据安全之前)一样的出色延迟、吞吐量、可用性和功能。 Azure Cosmos DB 帐户中存储的数据将使用服务托管密钥通过 Microsoft 管理的密钥进行自动无缝加密。 或者,你可以选择使用你管理的密钥(通过使用客户管理的密钥或 CMK)添加另一层加密。

如何保护我的数据库安全?

数据安全性的责任由你、客户和数据库提供程序共同分担。 根据所选的数据库提供程序,要承担的责任大小将有所不同。 如果选择本地解决方案,则从终结点保护到硬件物理安全性的所有工作都由你负责 - 这不是一个轻松的任务。 如果选择 Azure Cosmos DB 等平台即服务 (PaaS) 云数据库提供程序,要考虑的问题会明显减少。 下图摘自 Microsoft 的 Shared Responsibilities for Cloud Computing(云计算的责任分担)白皮书,显示了使用 Azure Cosmos DB 等 PaaS 提供程序时,责任会得到怎样的减轻。

Screenshot that shows customer and database provider responsibilities.

上图显示了高层级的云安全组件,但是,对于数据库解决方案,需要考虑到哪些具体的事项呢? 如何对不同的解决方案进行比较?

建议根据以下要求查检表来比较数据库系统:

  • 网络安全和防火墙设置
  • 用户身份验证和精细用户控制
  • 能够在多个区域复制数据来应对区域性故障
  • 能够从一个数据中心故障转移到另一个数据中心
  • 在数据中心内执行本地数据复制
  • 自动数据备份
  • 从备份还原已删除的数据
  • 保护和隔离敏感数据
  • 监视攻击
  • 响应攻击
  • 能够地域隔离数据以遵守数据监管限制
  • 对受保护数据中心内的服务器进行物理保护
  • 认证

以下要求看似理所当然,但最近发生的大规模数据库入侵提醒我们这些要求尽管很简单,但却至关重要:

  • 将修补的服务器保持最新状态
  • HTTPS(默认)/TLS 加密
  • 使用强密码的管理帐户

Azure Cosmos DB 如何保护我的数据库?

让我们回顾一下前面的列表。 Azure Cosmos DB 能够满足其中的多少项要求? 它满足每一项要求。

让我们详细探讨其中每项要求。

安全要求 Azure Cosmos DB 的安全方案
网络安全性 使用 IP 防火墙是用于保护数据库的第一个保护层。 Azure Cosmos DB 支持使用基于 IP 的策略驱动访问控制来提供入站防火墙支持。 基于 IP 的访问控制类似于传统数据库系统使用的防火墙规则。 但是,它们已进行扩展,因此只能从一组已批准的计算机或云服务访问 Azure Cosmos DB 数据库帐户。 要了解更多信息,请参阅 Azure Cosmos DB 防火墙支持

使用 Azure Cosmos DB,可以启用特定的 IP 地址 (168.61.48.0)、IP 范围 (168.61.48.0/8) 以及 IP 和范围的组合。

Azure Cosmos DB 会阻止从此允许列表外部的计算机发出的所有请求。 从获批准计算机和云服务发出的请求必须完成身份验证过程才能获得资源的访问控制权。

可以使用虚拟网络服务标记实现网络隔离,并保护 Azure Cosmos DB 资源不受常规 Internet 影响。 创建安全规则时,请使用服务标记代替特定 IP 地址。 通过在规则的相应“源”或“目标”字段中指定服务标记名(例如,AzureCosmosDB),可以允许或拒绝相应服务的流量。
授权 Azure Cosmos DB 使用基于哈希的消息身份验证代码 (HMAC) 进行授权。

每个请求使用机密帐户密钥进行哈希处理,后续的 base-64 编码哈希将连同每个调用发送到 Azure Cosmos DB。 要验证请求,Azure Cosmos DB 需使用正确的机密密钥和属性生成哈希值,然后将该值与请求中的值进行比较。 如果两个值匹配,则会成功授权此操作并处理请求。 如果两个值不匹配,则授权失败,请求被拒。

可以使用主密钥资源令牌对文档等资源进行精细访问。

若要了解详细信息,请参阅保护对 Azure Cosmos DB 资源的访问
用户和权限 通过使用帐户的主密钥,可以为每个数据库创建用户资源和权限资源。 资源令牌与数据库中的权限相关联,确定用户是否对数据库中的应用程序资源拥有访问权限(读写、只读或无访问权限)。 应用程序资源包括容器、文档、附件、存储过程、触发器和 UDF。 然后,在身份验证期间,使用资源令牌来允许或拒绝访问资源。

若要了解详细信息,请参阅保护对 Azure Cosmos DB 资源的访问
Active Directory 集成(Azure 基于角色的访问控制) 还可以在 Azure 门户中通过“访问控制(标识和访问管理)”来提供或限制对 Azure Cosmos DB 帐户、数据库、容器和套餐(吞吐量)的访问权限。 IAM 提供基于角色的访问控制并与 Active Directory 集成。 对于个人和组,可使用内置角色或自定义角色。 若要了解详细信息,请参阅 Active Directory 集成
多区域复制 Azure Cosmos DB 提供统包式多区域分发。可以统包方式将数据复制到 Azure 的任何一个跨中国的数据中心。 多区域复制可以实现全局缩放,以较低的延迟访问全中国的数据。

从安全角度来看,多区域复制可确保数据受到保护,防范区域性故障。

若要了解详细信息,请参阅在多个区域分配数据
区域性故障转移 如果已将数据复制到多个数据中心,当区域数据中心脱机时,Azure Cosmos DB 会自动切换操作。 可以使用数据复制到的区域创建故障转移区域的优先级列表。

若要了解详细信息,请参阅 Azure Cosmos DB 中的区域性故障转移
本地复制 即使是在单个数据中心内,Azure Cosmos DB 也会自动复制数据来实现高可用性,并允许选择一致性级别。 此复制可保证为所有单区域帐户和具有松散一致性的所有多区域帐户提供 99.99% 的可用性 SLA,为所有多区域数据库帐户提供 99.999% 的读取可用性。
自动联机备份 Azure Cosmos DB 数据库定期备份并存储在异地冗余的存储中。

若要了解详细信息,请参阅使用 Azure Cosmos DB 进行自动联机备份和还原
还原已删除的数据 可以使用自动联机备份来恢复大约 30 天内意外删除的数据。

若要了解详细信息,请参阅使用 Azure Cosmos DB 进行自动联机备份和还原
保护和隔离敏感数据 “新增功能”中列出的区域中的所有数据现已处于静态加密状态。

可将个人数据和其他机密数据隔离到特定的容器,并限制为只能由特定的用户进行读写或只读访问。
监视攻击 使用审核日志和活动日志,可以监视帐户中的正常和异常活动。 可以查看对资源执行的操作。 此数据包括:操作是谁发起的、操作是何时发生的、操作的状态,等等。
响应攻击 联系 Azure 支持并报告潜在的攻击行为后,我们会启动一个五步事件响应过程。 其目标是恢复正常的服务安全性和操作。 此过程会在检测到问题并启动调查后,尽快将服务恢复正常。

若要了解更多信息,请参阅云中的 Azure 安全响应
地域隔离 Azure Cosmos DB 确保符合主权区域(例如中国)的数据治理要求。
受保护的设施 Azure Cosmos DB 中的数据存储在 Azure 的受保护数据中心内的固态硬盘上。

若要了解更多信息,请参阅 Microsoft 多区域数据中心
HTTPS/SSL/TLS 加密 与 Azure Cosmos DB 建立的所有连接都支持 HTTPS。 Azure Cosmos DB 支持最高 1.2(含)的 TLS 级别。
可以在服务器端强制实施最低 TLS 级别。 为此,请参阅自助服务指南在 Azure Cosmos DB 中自助强制实施最低 TLS 版本
静态加密 对存储在 Azure Cosmos DB 中的所有静态数据进行加密。 若要了解更多信息,请参阅 Azure Cosmos DB 静态加密
修补的服务器 作为一种托管的数据库,在 Azure Cosmos DB 中无需管理和修补服务器,因为系统会自动完成这些操作。
使用强密码的管理帐户 在 Azure Cosmos DB 中,不允许有不带密码的管理帐户。

默认融入了基于 TLS 和 HMAC 机密的身份验证安全性。
安全和数据保护认证 有关最新的认证列表,请参阅 Azure 合规性和包含所有 Azure 认证(包括 Azure Cosmos DB)的最新 Azure 合规性文档

以下屏幕截图显示如何使用审核日志记录和活动日志监视帐户。 Screenshot that shows activity logs for Azure Cosmos DB.

主/辅助密钥

主/辅助密钥提供对数据库帐户的所有管理资源的访问权限。 主/辅助密钥:

  • 提供对帐户、数据库、用户和权限的访问权限。
  • 无法用于提供对容器和文档的精细访问权限。
  • 在创建帐户过程中创建。
  • 随时可重新生成。

每个帐户包括两个密钥:主密钥和辅助密钥。 使用两个密钥的目的是为了能够重新生成或轮换密钥,从而可以持续访问帐户和数据。

主/辅助密钥分为两种版本:读写和只读。 这些只读密钥只允许针对帐户执行读取操作。 它们不提供对资源的读取权限。

密钥轮换和重新生成

密钥轮换和重新生成的过程非常简单。 首先,请确保应用程序始终使用主密钥或辅助密钥来访问你的 Azure Cosmos DB 帐户。 然后,执行以下所述的步骤。

如果你的应用程序当前正在使用主密钥

  1. 转到 Azure 门户中的 Azure Cosmos DB 帐户。

  2. 从左侧菜单中选择“密钥”,然后从辅助密钥右侧的省略号 (...) 中选择“重新生成辅助密钥”。

    Screenshot showing how to regenerate the secondary key in the Azure portal when used with the NoSQL API.

  3. 验证新的辅助密钥是否适用于你的 Azure Cosmos DB 帐户。 密钥重新生成可能需要一分钟,也可能长达数小时,具体取决于 Azure Cosmos DB 帐户的大小。

  4. 在应用程序中将主密钥替换为辅助密钥。

  5. 返回到 Azure 门户,并触发主密钥的重新生成。

    Screenshot showing how to regenerate the primary key in the Azure portal when used with the NoSQL API.

如果你的应用程序当前正在使用辅助密钥

  1. 转到 Azure 门户中的 Azure Cosmos DB 帐户。

  2. 从左侧菜单中选择“密钥”,然后从主密钥右侧的省略号 (...) 中选择“重新生成主密钥”。

    Screenshot that shows how to regenerate the primary key in the Azure portal when used with the NoSQL API.

  3. 验证新的主密钥是否适用于你的 Azure Cosmos DB 帐户。 密钥重新生成可能需要一分钟,也可能长达数小时,具体取决于 Azure Cosmos DB 帐户的大小。

  4. 在应用程序中将辅助密钥替换为主密钥。

  5. 返回到 Azure 门户,并触发辅助密钥的重新生成。

    Screenshot that shows how to regenerate the secondary key in the Azure portal when used with the NoSQL API.

跟踪密钥重新生成的状态

在轮换或重新生成密钥后,可以从活动日志中跟踪该密钥的状态。 请使用以下步骤来跟踪状态。

  1. 登录到 Azure 门户并转到你的 Azure Cosmos DB 帐户。

  2. 在左侧菜单中选择“密钥”。 在每个密钥下方应会看到上次重新生成密钥的日期。

    Screenshot that shows status of key regeneration from the activity log.

    建议至少每隔 60 天重新生成一次密钥。 如果上次重新生成的时间在 60 天以前,则会看到一个警告图标。 此外,你可能会发现密钥未被记录。 如果是这种情况,则表示你的帐户是在 2022 年 6 月 18 日之前创建的,并且未登记日期。 但是,你应该能够重新生成并查看新密钥的新的上次生成日期。

  3. 你应该会看到密钥重新生成事件及其状态、发出操作的时间、启动密钥重新生成操作的用户的详细信息。 密钥生成操作启动并具有“已接受”状态。 它将更改为“已启动”,然后在操作完成后更改为“成功”。

后续步骤