Docs 菜单
Docs 主页
/
Atlas
/ / /

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

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

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

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

  • 使用 M10 或更大的集群。

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

    • DescribeKey

    • 加密

    • 解密

    注意

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

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

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

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

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

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

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

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

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

1

警告: 导航改进正在进行中

我们目前正在推出改进的全新导航体验。如果以下步骤与Atlas用户界面中的视图不匹配,请参阅预览文档。

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

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

  3. 在侧边栏中,单击 Security 标题下的 Advanced

    显示“高级”页面。

2
3

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

4

注意

此策略声明允许 MongoDB 的Amazon Web Services主体使用客户的KMS密钥进行加密和解密操作。Atlas主体不是秘密,所有Atlas客户都使用该主体。这是一个受到高度限制、用途有限的Amazon Web Services帐户,除了 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 帐户进行身份验证。

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

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 的Amazon Web Services主体使用客户的KMS密钥进行加密和解密操作。Atlas主体不是秘密,所有Atlas客户都使用该主体。这是一个受到高度限制、用途有限的Amazon Web Services帐户,除了 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 --user "{public key}:{private key}" --digest \
--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 用户来管理对Atlas中Amazon Web Services KMS加密密钥的访问权限。如果您最初将项目配置为使用 IAM 用户凭证访问权限Amazon Web Services KMS密钥,请使用以下过程切换到基于角色的访问权限,以满足这一新要求。

重要

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

1

警告: 导航改进正在进行中

我们目前正在推出改进的全新导航体验。如果以下步骤与Atlas用户界面中的视图不匹配,请参阅预览文档。

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

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

  3. 在侧边栏中,单击 Security 标题下的 Advanced

    显示“高级”页面。

2
3
4

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

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

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

注意

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

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

对于现有群组:

1

警告: 导航优化正在进行中我们目前正在逐步推出改进的全新导航体验。如果以下步骤与您在 Atlas UI 中的视图不符,请参阅预览文档

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

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

  3. 如果尚未出现,请单击侧边栏中的 Clusters(集群)。

    会显示集群页面。

2

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

3
  1. 展开 Additional Settings 面板。

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

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

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

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

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

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

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

后退

AWS KMS

在此页面上