Docs 菜单
Docs 主页
/
MongoDB Atlas
/ /

使用 Google Cloud KMS 管理客户密钥

在此页面上

  • 使用 Google Cloud KMS 启用客户托管的密钥
  • 例子
  • 必需的访问权限
  • 先决条件
  • 为项目启用客户托管密钥
  • 为 Atlas 集群启用客户密钥管理
  • 警报
  • 轮换您的 GCP 密钥版本资源 ID
  • MongoDB 主密钥 - MongoDB 责任
  • 您的 Google Cloud CMK — 您的职责
  • 先决条件
  • 步骤
  • 警报
  • 相关主题

注意

  • 此功能不适用于 M0 免费集群、M2M5 集群。如需了解更多信息,请参阅 Atlas M0(免费集群)、M2 和 M5 限制

  • 无服务器实例目前不支持此功能。要了解更多信息,请参阅无服务器实例限制

您可以使用 Google Cloud KMS 中的客户托管密钥 (CMK) 进一步加密 Atlas 中的静态数据。

Atlas 使用 Google Cloud KMS 中的CMK来加密和解密 MongoDB 主密钥,然后使用这些密钥来加密集群数据库文件和云提供商快照。要详细了解 Atlas 如何使用CMK进行加密,请参阅使用 Google Cloud KMS 启用客户管理的密钥。

当您使用自己的云提供商KMS时,Atlas 每90天自动轮换 MongoDB 主密钥。这些密钥滚动轮换,并且该过程不需要重写数据。

您必须先为 Atlas 项目配置客户密钥管理,然后才能在该项目中的集群上启用它。

Atlas 中的客户密钥管理遵循称为 信封加密 的过程 。此过程通过使用一个密钥加密另一个密钥来创建多层加密。为了启用客户密钥管理,Atlas 使用以下加密密钥:

Customer-Managed Key (CMK)

客户管理的密钥是您在 Google Cloud KMS 中创建、拥有和管理的加密密钥。您在 Google Cloud KMS 中创建 CMK ,并在 项目 级别将其连接到 Atlas。要详细了解 Google Cloud KMS 中使用的 CMK ,请参阅 Google Cloud 文档

Atlas 仅使用此密钥来加密 MongoDB 主密钥。

MongoDB Master Key

Atlas 集群中的每个节点都会创建一个 MongoDB 主密钥。 MongoDB 主密钥是 MongoDB Server 用于通过WiredTiger 存储引擎加密文件的加密密钥。 Atlas 在本地保存密钥的加密副本。

此密钥使用CMK加密,并对每个数据库的加密密钥进行加密。

Per-Database Encryption Key

Atlas 集群中的每个节点还会为集群中的每个数据库创建一个加密密钥。 Atlas 使用这些密钥通过 WiredTiger 读取和写入数据,WiredTiger 也会加密和存储这些密钥。

此密钥使用 MongoDB 主密钥加密。

请考虑以下针对三节点副本集的加密层次结构。 Atlas 使用 Google Cloud KMS 中的CMK为集群中的每个节点加密唯一的 MongoDB 主密钥。每个节点还包含三个数据库,每个数据库都使用每个数据库唯一的加密密钥进行加密。当集群启动时,Atlas 使用来自 Google Cloud KMS 的CMK解密 MongoDB 主密钥,并将其提供给 MongoDB Server。

注意

如果您撤销 Atlas 对CMK的访问权限,Atlas 会关闭集群中的节点,并且在您恢复对CMK的访问权限之前,您无法访问数据。

使用 Google Cloud KMS 和 Atlas 的 CMK 工作流程示意图
点击放大

要配置客户密钥管理,您必须拥有对项目的 Project Owner 访问权限。

拥有 Organization Owner 访问权限的用户必须将自己作为 Project Owner 添加到项目中。

要使用 Google Cloud KMS 为 MongoDB 项目启用客户托管密钥,您必须具备:

  • 您的 Google 云服务账号密钥。

  • Google Cloud KMS 中的对称加密密钥。

  • 与您的 Google Cloud KMS 加密密钥关联的密钥版本资源 ID。

  • 一个 Google Cloud 服务帐户,该帐户具有服务帐户密钥所指定的凭据,并具有足够权限执行以下操作:

    • 获取 Google Cloud KMS 加密密钥版本。

    • 使用 Google Cloud KMS 加密密钥版本加密数据。

    • 使用 Google Cloud KMS 加密密钥解密数据。

    注意

    处理解密的是密钥,而不是密钥版本。

  • 如果您的 Google Cloud KMS 配置有要求,请使用 GCP Accessible Services Atlas IP 地址 和集群节点的公共 IP 地址或 DNS 主机名,以便 Atlas 可以与 KMS 通信。如果节点 IP 地址 发生变化 ,则必须更新配置以避免连接中断。

提示

另请参阅:

您必须先为项目启用客户密钥管理,然后才能在该项目中的集群上进行启用。

1
  1. 如果尚未显示,请从导航栏的 Organizations 菜单中选择包含所需项目的组织。

  2. 如果尚未显示该页,请从导航栏的 Projects(项目)菜单中选择所需的项目。

  3. 单击侧边栏中的 Advanced(支持)。

2
3
4

Service Account Key 应格式化为 JSON 对象。它包含 GCP 服务帐户的加密档案。

5

密钥版本资源 ID 是 CryptoKeyVersion 的完全限定资源名称。

6

为项目启用客户管理的密钥后,您必须为包含要加密的数据的每个 Atlas 集群启用客户密钥管理。

注意

您必须拥有 Project Owner 角色才能为该项目中的集群启用客户密钥管理。

对于新集群,请在创建集群时将管理自己的加密密钥设置切换为 Yes(是)。

对于现有群组:

1
  1. 如果尚未显示,请从导航栏的 Organizations 菜单中选择包含所需项目的组织。

  2. 如果尚未显示该页,请从导航栏的 Projects(项目)菜单中选择所需的项目。

  3. 如果 Clusters(数据库部署)页面尚未出现,请单击侧边栏中的 Database(数据库)。

2

根据密钥管理服务配置,您可能需要将 Atlas 集群节点 IP 地址添加到云提供商 KMS 列表, 以便集群与 KMS 通信。 要启用集群与 KMS 之间的通信,请执行以下操作:

  1. ipAddresses端点发送 GET 请求。 API 端点返回现有集群节点的 IP 地址列表,类似于以下内容:

    {
    "groupId": "xxx", // ObjectId
    "services": {
    "clusters": [
    {
    "clusterName": "Cluster0",
    "inbound": [
    "3.92.113.229",
    "3.208.110.31",
    "107.22.44.69"
    ],
    "outbound": [
    "3.92.113.229",
    "3.208.110.31",
    "107.22.44.69"
    ]
    }
    ]
    }
    }
  2. 将返回的 IP 地址添加到云提供商的 IP 访问列表。有关详细信息,请参阅使用 AWSAzureGCP 管理客户密钥的先决条件。

3

对于包含要加密的数据的集群,单击省略号 ...,然后选择 Edit Configuration

4
  1. 展开 Additional Settings 面板。

  2. Manage your own encryption keys 设置切换为 Yes

5
  1. 单击 Review Changes(连接)。

  2. 查看更改,然后单击 Apply Changes 以更新集群。

为项目配置客户密钥管理后,Atlas 会自动创建encryption key rotation alert 。您可以随时轮换 GCP 密钥版本资源 ID,重置此警报。

注意

当您使用自己的云提供商KMS时,Atlas 每90天自动轮换 MongoDB 主密钥。这些密钥滚动轮换,并且该过程不需要重写数据。

Atlas 不会自动轮换用于 Google Cloud 密钥管理的密钥版本资源 ID。

作为最佳实践,当您为 Atlas 项目 启用静态加密alert 时,Atlas90 会创建 来提醒您默认每 天轮换 GCP 密钥版本资源 ID。您可以配置此警报的时间段。

您可以 轮换 自己创建 Google Cloud CMK ,或将 Google Cloud KMS 实例配置为 自动轮换 您的 CMK 。如果您配置了自动轮换 Google Cloud CMK ,则默认轮换时间段约为365 天。

如果您已在 Google Cloud 中设置自动 CMK 轮换,并且不希望收到每 90 天轮换一次 CMK 的 Atlas 警报,则可以将默认警报期限修改为大于 365 天。

您必须在与 Atlas 项目关联的 Google Cloud 帐户中创建新的服务帐户密钥。

以下过程介绍如何通过在 Atlas 中指定新的密钥版本资源 ID 来轮换 Atlas 项目密钥标识符。

1
  1. 如果尚未显示,请从导航栏的 Organizations 菜单中选择包含所需项目的组织。

  2. 如果尚未显示该页,请从导航栏的 Projects(项目)菜单中选择所需的项目。

  3. 单击侧边栏中的 Advanced(支持)。

2
3
  1. 如果 Google Cloud KMS 标签页尚未激活,请单击 Google Cloud KMS

  2. 如果尚未显示 Encryption Key Credentials 对话框,则展开 Encryption Key Credentials

  3. Key Identifier 条目中输入 GCP 密钥版本资源 ID。

    包括 CryptoKeyVersion 的完全限定资源名称。

    例子

    projects/my-project-0/locations/us-east4/keyRings/my-key-ring-0/cryptoKeys/my-key-0/cryptoKeyVersions/1

    加密密钥必须属于为您的 Atlas 项目配置的 Google Cloud Service 帐户密钥。单击 Service Account Key 部分查看当前为项目配置的服务帐户密钥。

  4. 单击 Update Credentials(连接)。

在密钥标识符轮换过程中,Atlas 在 Atlas 控制台中显示横幅。

警告

在部署更改之前,请勿删除或禁用原始密钥版本资源 ID。

如果集群使用备份您的集群,请不要删除或禁用原始密钥版本资源 ID,直到确保没有快照使用该密钥进行加密。

此过程完成后,Atlas 会重置 encryption key rotation alert 计时器。

  • 如需在部署 Atlas 集群时使用“密钥管理”启用“静态加密”,请参阅“管理加密密钥”。

  • 如需使用“密钥管理”对现有 Atlas 集群启用“静态加密”,请参阅“启用静态加密”。

  • 如需进一步了解如何在 Atlas 中使用“密钥管理”进行静态加密,请参阅“使用客户密钥管理进行静态加密”。

  • 要了解有关 MongoDB 静态加密的更多信息,请参阅 MongoDB 服务器文档中的静态加密

  • 要了解有关使用云备份进行静态加密的更多信息,请参阅存储引擎和云备份加密

← 使用 Azure 密钥保管库管理客户密钥