你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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 支持部门举报潜在的攻击行为后,我们会启动五步事件响应过程。 目标是恢复正常的服务安全性和操作。 该过程可在检测到问题并启动调查后尽快恢复服务。

有关详细信息,请参阅云中的 Microsoft 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. 转到 Microsoft 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. 转到 Microsoft 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. 你应该会看到密钥重新生成事件及其状态、发出操作的时间、启动密钥重新生成操作的用户的详细信息。 密钥生成操作以“接受”状态启动。 它会更改为“已启动”,并在操作完成后更改为“成功”

后续步骤