对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

通过公共网络使用 AWS 管理客户密钥

使用您在Amazon Web Services KMS中创建、拥有和管理的客户托管密钥 ( 集合扫描 ) 对Atlas中的静态数据进行加密。

本页介绍如何在您的Atlas项目以及该项目中的集群上使用Amazon Web Services KMS配置客户密钥管理。

要使用 AWS KMS 为 MongoDB 项目启用客户托管密钥,必须:

  • 使用 M10 或更大的集群。
  • 具有足够特权的 AWS IAM 角色。Atlas 必须有权使用密钥执行以下操作:

    注意

    如果你希望将 AWS KMS 密钥与来自不同 AWS 账户的 AWS IAM 角色(而不是创建 AWS KMS 密钥的 IAM 角色)一起使用,请确保你拥有足够特权:

    • 在 AWS KMS 密钥下添加密钥策略声明以包含外部 AWS 账户。

    • 为外部 AWS 帐户中的 IAM 角色添加 IAM 内联策略。

    有关 IAM 角色和客户主密钥的全面讨论,请参阅 AWS 文档。

    确认上述特权后,您可以按照常规步骤在 Atlas 中配置 KMS 设置,但以下情况除外:

    • 您必须在 AWS KMS密钥ID字段中提供 AWS KMS密钥的完整 ARN(例如 arn:aws:kms:eu-west-2:111122223333:key/12345678-1234-1234-1234-12345678),而不是主密钥ID (例如 12345678-1234-1234-1234-12345678)。

    要学习;了解如何创建 IAM角色,请参阅 AWS 文档中的 IAM 角色。

    在启用了静态加密的项目中,Atlas 对所有集群都使用相同的 IAM 角色和 AWS KMS 密钥设置。

  • 如果 AWS KMS 配置需要,请允许从 Atlas IP 地址以及集群节点的公共 IP 地址或 DNS 主机名访问,以便 Atlas 可以与 KMS 通信。您必须在策略文档中配置 IP 地址条件操作符,将 IP 地址包含在托管的 IAM 角色策略中。如果节点 IP 地址发生变化,必须更新配置以避免连接中断。

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

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Security 标题下的 Database & Network Access。

  4. 在侧边栏中,单击 Advanced。

    显示“高级”页面。

2
3

要创建新的 AWS IAM 角色用于访问 AWS KMS 密钥进行静态加密,请按照使用 AWS CLI 创建新角色步骤进行操作。如果您要授权现有 AWS IAM 角色,请按照为现有角色添加信任关系步骤进行操作。

4

注意

此策略声明允许 MongoDB 的 AWS 主体使用客户的KMS密钥进行加密和解密操作。 Atlas主体不是秘密,所有Atlas客户都使用该主体。这是一个高度限制、用途有限的 AWS 账户,除了 IAM 用户之外,没有任何资源。策略声明中的 ExternalId 对于每个Atlas项目都是唯一的,但它不是秘密。 ExternalId 用于降低跨上下文(混淆代理)漏洞的可能性。 Atlas 使用通用主体来访问权限所有客户密钥,这是Amazon推荐的访问权限模式,如此处所述。

静态加密的访问策略类似于以下内容:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:DescribeKey"
],
"Resource": [
"arn:aws:kms:us-east-1:123456789012:key/12x345y6-7z89-0a12-3456-xyz123456789"
]
}
]
}
5
6
  1. 从 AWS IAM role 下拉列表中选择要分配的角色。

  2. 在 Customer Master Key ID 字段中指定加密密钥。

  3. 选择您的加密密钥的 AWS 区域。

1

使用API端点创建新的 AWS IAM角色。 Atlas将使用此角色对您的 AWS 帐户进行身份验证。

保存返回的字段值 atlasAWSAccountArn 和 atlasAssumedRoleExternalId,以便在下一步中使用。

2
  1. 登录 AWS 管理控制台。

  2. 导航至 Identity and Access Management (IAM) 服务。

  3. 从左侧导航栏中选择 Roles 。

  4. 单击角色列表中您希望用于 Atlas 访问的现有 IAM 角色。

  5. 选择 Trust Relationships 标签页。

  6. 单击 Edit trust relationship 按钮。

  7. 编辑 Policy Document。添加包含以下内容的新 Statement 对象。

    注意

    此策略声明允许 MongoDB 的 AWS 主体使用客户的KMS密钥进行加密和解密操作。 Atlas主体不是秘密,所有Atlas客户都使用该主体。这是一个高度限制、用途有限的 AWS 账户,除了 IAM 用户之外,没有任何资源。策略声明中的 ExternalId 对于每个Atlas项目都是唯一的,但它不是秘密。 ExternalId 用于降低跨上下文(混淆代理)漏洞的可能性。 Atlas 使用通用主体来访问权限所有客户密钥,这是Amazon推荐的访问权限模式,如此处所述。

    注意

    用第 1 步中的 API 调用返回的值替换突出显示的行。

    {
    "Version": "2020-03-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "AWS": "<atlasAWSAccountArn>"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
    "StringEquals": {
    "sts:ExternalId": "<atlasAssumedRoleExternalId>"
    }
    }
    }
    ]
    }
  8. 单击 Update Trust Policy 按钮。

3

使用API端点授权和配置新的 IAM 假定角色 ARN。如果API调用成功,则可以在配置使用 AWS 的Atlas服务时使用 roleId 值。

4

向 encryptionAtRest API 端点发送 PATCH 请求,用您的授权 AWS IAM 角色 ID 更新 awsKms.roleId 字段。

例子

curl --header "Authorization: Bearer {ACCESS-TOKEN}" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--include \
--request PATCH \
"https://cloud.mongodb.com/api/atlas/v1.0/groups/{groupId}/encryptionAtRest?pretty=true&envelope=true" \
--data '
{
"awsKms": {
"enabled": true,
"roleId": "<roleId>",
"customerMasterKeyID": "<master-key-id>",
"region": "<aws-region>"
}
}'

为项目的加密密钥启用基于角色的访问权限后,请按照为Atlas 集群启用客户密钥管理为项目中的每个Atlas集群启用客户数管理的密钥。

自一月 26,2021,Amazon Web Services要求使用IAM角色而不是IAM用户来管理对Amazon Web ServicesKMS加密密钥的访问权限。如果您最初将项目配置为使用 IAM 用户 凭证访问 Amazon Web Services KMS 密钥,请使用以下过程切换到基于角色的访问权限,以满足这一新要求。

重要

如果将加密密钥切换为基于角色的访问权限,就无法撤销基于角色的访问权限配置,也无法恢复该项目上基于档案的加密密钥访问权限。

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

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Security 标题下的 Database & Network Access。

  4. 在侧边栏中,单击 Advanced。

    显示“高级”页面。

2
3
4

要创建新的 AWS IAM 角色用于访问 AWS KMS 密钥进行静态加密,请按照使用 AWS CLI 创建新角色步骤进行操作。如果您要授权现有 AWS IAM 角色,请按照为现有角色添加信任关系步骤进行操作。

要使用 Atlas Administration API 更新加密密钥管理,请使用上述程序所述的相同步骤。

为项目的加密密钥启用基于角色的访问权限后,必须为包含要加密的数据的每个Atlas 集群启用客户密钥管理。

注意

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

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

对于现有群组:

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

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

  3. 在侧边栏中,单击 Database 标题下的 Clusters。

会显示集群页面。

2

对于包含要加密的数据的集群,请单击 ,然后选择 Edit Configuration。

3
  1. 展开 Additional Settings 面板。

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

  3. 验证您的集群的 Require Private Networking 设置的状态。

    如果您在项目级别为Atlas配置了使用集合扫描 (通过专用网络)进行静态加密,则状态为 Active。如果您尚未为项目配置任何私有端点连接,则状态为 Inactive。

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

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

默认下, MongoDB和搜索进程在同一节点上运行。在这种架构中,客户管理的加密适用于数据库数据,但不适应用搜索索引。

启用专用搜索节点后,搜索进程将在单独的节点上运行。这允许您启用搜索节点数据加密,以便您可以使用相同的客户托管密钥对数据库数据和搜索索引进行加密,以实现全面的加密覆盖范围。

在公开预览期间, Atlas Infinite 集群不支持专用搜索节点。

注意

数据库节点和搜索节点使用不同的加密方法以及相同的客户托管密钥。数据库节点使用WiredTiger加密存储引擎,而搜索节点则在磁盘级别使用加密。