Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
用于 Amazon DocumentDB 弹性集群的静态数据加密
以下主题可帮助您了解、创建和监控亚马逊 DocumentDB 弹性集群的 Amazon Key Management Service 加密密钥:
Amazon DocumentDB 弹性集群会自动与 Amazon Key Management Service (Amazon KMS) 集成以进行密钥管理,并使用一种称为信封加密的方法来保护您的数据。有关信封加密的更多信息,请参阅 Amazon Key Management Service 开发人员指南中的信封加密。
A Amazon KMS key 是密钥的逻辑表示形式。KMS 密钥包含元数据,如密钥 ID、创建日期、描述和密钥状态。KMS 密钥还包含用于加密和解密数据的密钥材料。有关 KMS 密钥的更多信息,请参阅 Amazon Key Management Service 开发人员指南中的 Amazon KMS keys。
Amazon DocumentDB 弹性集群支持采用两种类型的密钥加密:
Amazon 自有密钥 — Amazon DocumentDB 弹性集群默认使用这些密钥来自动加密个人身份数据。您无法查看、管理或使用 Amazon自有密钥,也无法审核其使用情况。但是,无需采取任何措施或更改任何计划即可保护用于加密数据的密钥。有关更多信息,请参阅 Amazon Key Management Service 开发人员指南中的 Amazon 自有密钥。
客户管理的密钥 — 由您创建、拥有和管理 Amazon KMS keys 的 Symmetric 密钥。由于您可以完全控制这层加密,因此可以执行以下任务:
制定和维护关键策略
建立和维护 IAM 策略和授权
启用和禁用密钥策略
轮换加密材料
添加标签
创建密钥别名
安排密钥删除
有关更多信息,请参阅 Amazon Key Management Service 开发人员指南中的客户托管密钥。
您必须使用对称加密 KMS 密钥加密您的集群,因为 Amazon DocumentDB 仅支持对称加密 KMS 密钥。请勿使用非对称 KMS 密钥尝试对 Amazon DocumentDB elastic 集群中的数据进行加密。有关更多信息,请参阅Amazon Key Management Service 开发人员指南中的非对称密钥 Amazon KMS。
如果 Amazon DocumentDB 不再能够有权访问集群的加密密钥 — 例如,在撤销密钥访问权限时 — 加密的集群将进入终末状态。在此情况下,您只能从备份还原集群。对于 Amazon DocumentDB,备份始终启用 1 天。此外,如果您禁用已加密 Amazon DocumentDB 集群的密钥,您最终将失去对该集群的读写访问权限。如果 Amazon DocumentDB 遇到用它无法访问的密钥加密的集群,则它会使该集群进入最终状态。在此状态下,集群不再可用,并且数据库的当前状态无法恢复。若要还原集群,您必须重新启用对 Amazon DocumentDB 的加密密钥的访问,然后从备份还原集群。
在已创建加密集群的 KMS 密钥后,您无法更改它。请确保先确定您的加密密钥要求,然后再创建加密的弹性集群。
Amazon DocumentDB 弹性集群如何在中使用授权 Amazon KMS
Amazon DocumentDB 弹性集群需要 授权 来使用客户托管密钥。
当您创建使用客户托管密钥加密的集群时,Amazon DocumentDB 弹性集群会通过向发送CreateGrant
请求来代表您创建授权。 Amazon KMS中的授权 Amazon KMS 用于向 Amazon DocumentDB 弹性集群提供访问客户账户中的 KMS 密钥的权限。
Amazon DocumentDB 弹性集群要求该授权对以下内部操作使用您的客户托管密钥:
向发送DescribeKey
请求, Amazon KMS 以验证在创建跟踪器或地理围栏集合时输入的对称客户管理的 KMS 密钥 ID 是否有效。
向发送GenerateDataKey
请求 Amazon KMS 以生成由您的客户托管密钥加密的数据密钥。
向发送解密加密数据密钥的Decrypt
请求,以便这些密钥可用于加密您的数据。 Amazon KMS
您可以随时撤销授予访问权限,或删除服务对客户托管密钥的访问权限。如果您这样做,Amazon DocumentDB 弹性集群将不能访问由客户托管密钥加密的任何数据,这影响依赖于该数据的操作。
创建客户托管密钥
您可以使用 Amazon Web Services Management Console 或 Amazon KMS API 创建对称的客户托管密钥。
对称客户托管密钥创建
遵循 Amazon Key Management Service 开发人员指南中创建对称性客户托管密钥的步骤。
密钥策略
密钥策略控制对客户自主管理型密钥的访问。每个客户托管式密钥必须只有一个密钥策略,其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时,可以指定密钥策略。有关更多信息,请参阅位于Amazon Key Management Service 开发人员指南Amazon Key Management Service 的概述中的 KMS 密钥访问信息。
要将您的客户托管密钥配合 Amazon DocumentDB 弹性集群资源一起使用,则必须在密钥策略中允许以下 API 操作:
有关更多信息,请参阅Amazon Key Management Service 开发人员指南中的密钥策略中的 Amazon 服务权限和密钥访问疑难解答。
通过 IAM 策略限制客户访问托管密钥
除了 KMS 密钥策略外,您还可以在 IAM policy 略中限制 KMS 密钥权限。
您可以通过各种方式使 IAM 策略更严格。例如,要允许客户管理密钥仅用于源自 Amazon DocumentDB 弹性集群的请求,您可以将 kms:ViaService
条件键 与 docdb-elastic.<region-name>.amazonaws.com
值结合使用。
有关更多信息,请参阅 Amazon Key Management Service 开发人员指南中的允许其他账户中的用户使用 KMS 密钥。
监控您的 Amazon DocumentDB 弹性集群加密密钥
当您将 Amazon KMS key 客户托管密钥与 Docdb Elastic 资源一起使用时,您可以使用 Amazon CloudTrail 或 Amazon CloudWatch Logs 来跟踪 Docdb Elastic 发送到的请求。 Amazon KMS
以下示例是CreateGrant
、GenerateDataKeyWithoutPlainText
Decrypt
、和DescribeKey
监控 Amazon DocumentDB 弹性集群为访问由您的客户托管密钥加密的数据而调用的 Amazon KMS key 操作 Amazon CloudTrail 的事件:
- CreateGrant
-
{
"eventVersion": "1.08",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
"arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE3",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AROAIGDTESTANDEXAMPLE",
"arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01",
"accountId": "111122223333",
"userName": "Sampleuser01"
},
"webIdFederationData": {},
"attributes": {
"creationDate": "2023-05-09T23:04:20Z",
"mfaAuthenticated": "false"
}
},
"invokedBy": "docdb-elastic.amazonaws.com"
},
"eventTime": "2023-05-09T23:55:48Z",
"eventSource": "kms.amazonaws.com",
"eventName": "CreateGrant",
"awsRegion": "us-east-1",
"sourceIPAddress": "docdb-elastic.amazonaws.com",
"userAgent": "docdb-elastic.amazonaws.com",
"requestParameters": {
"retiringPrincipal": "docdb-elastic.us-east-1.amazonaws.com",
"granteePrincipal": "docdb-elastic.us-east-1.amazonaws.com",
"operations": [
"Decrypt",
"Encrypt",
"GenerateDataKey",
"GenerateDataKeyWithoutPlaintext",
"ReEncryptFrom",
"ReEncryptTo",
"CreateGrant",
"RetireGrant",
"DescribeKey"
],
"keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
},
"responseElements": {
"grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE",
"keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
},
"requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
"eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
"readOnly": false,
"resources": [
{
"accountId": "AWS Internal",
"type": "AWS::KMS::Key",
"ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
}
],
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "111122223333",
"eventCategory": "Management"
}
- GenerateDataKey
-
{
"eventVersion": "1.08",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
"arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE3",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AROAIGDTESTANDEXAMPLE",
"arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01",
"accountId": "111122223333",
"userName": "Sampleuser01"
},
"webIdFederationData": {},
"attributes": {
"creationDate": "2023-05-10T18:02:59Z",
"mfaAuthenticated": "false"
}
},
"invokedBy": "docdb-elastic.amazonaws.com"
},
"eventTime": "2023-05-10T18:03:25Z",
"eventSource": "kms.amazonaws.com",
"eventName": "GenerateDataKey",
"awsRegion": "us-east-1",
"sourceIPAddress": "docdb-elastic.amazonaws.com",
"userAgent": "docdb-elastic.amazonaws.com",
"requestParameters": {
"keySpec": "AES_256",
"keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
},
"responseElements": null,
"requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
"eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
"readOnly": true,
"resources": [
{
"accountId": "AWS Internal",
"type": "AWS::KMS::Key",
"ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
}
],
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "111122223333",
"eventCategory": "Management"
}
- Decrypt
-
{
"eventVersion": "1.08",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
"arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE3",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AROAIGDTESTANDEXAMPLE",
"arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01",
"accountId": "111122223333",
"userName": "Sampleuser01"
},
"webIdFederationData": {},
"attributes": {
"creationDate": "2023-05-10T18:05:49Z",
"mfaAuthenticated": "false"
}
},
"invokedBy": "docdb-elastic.amazonaws.com"
},
"eventTime": "2023-05-10T18:06:19Z",
"eventSource": "kms.amazonaws.com",
"eventName": "Decrypt",
"awsRegion": "us-east-1",
"sourceIPAddress": "docdb-elastic.amazonaws.com",
"userAgent": "docdb-elastic.amazonaws.com",
"requestParameters": {
"encryptionAlgorithm": "SYMMETRIC_DEFAULT"
},
"responseElements": null,
"requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
"eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
"readOnly": true,
"resources": [
{
"accountId": "AWS Internal",
"type": "AWS::KMS::Key",
"ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
}
],
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "111122223333",
"eventCategory": "Management"
}
- DescribeKey
-
{
"eventVersion": "1.08",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
"arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE3",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AROAIGDTESTANDEXAMPLE",
"arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01",
"accountId": "111122223333",
"userName": "Sampleuser01"
},
"webIdFederationData": {},
"attributes": {
"creationDate": "2023-05-09T23:04:20Z",
"mfaAuthenticated": "false"
}
},
"invokedBy": "docdb-elastic.amazonaws.com"
},
"eventTime": "2023-05-09T23:55:48Z",
"eventSource": "kms.amazonaws.com",
"eventName": "DescribeKey",
"awsRegion": "us-east-1",
"sourceIPAddress": "docdb-elastic.amazonaws.com",
"userAgent": "docdb-elastic.amazonaws.com",
"requestParameters": {
"keyId": "alias/SampleKmsKey"
},
"responseElements": null,
"requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
"eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
"readOnly": true,
"resources": [
{
"accountId": "AWS Internal",
"type": "AWS::KMS::Key",
"ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
}
],
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "111122223333",
"eventCategory": "Management"
}
了解更多
以下资源提供有关静态数据加密的更多信息:
有关 Amazon KMS 概念的更多信息,请参阅《Amazon Key Management Service 开发者指南》中的Amazon Key Management Service 基本概念。
有关 Amazon KMS 安全的更多信息,请参阅《Amazon Key Management Service 开发人员指南》 Amazon Key Management Service中的安全最佳实践。