本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
用于 Amazon DocumentDB 弹性集群的静态数据加密
以下主题帮助您了解、创建及监控 AWS Key Management Service 用于 Amazon DocumentDB 弹性集群的加密密钥:
Amazon DocumentDB 弹性集群自动与 AWS Key Management Service (AWS KMS) 集成以管理密钥,并且使用一种称作信封加密的方法保护您的数据。有关信封加密的更多信息,请参阅 AWS Key Management Service 开发人员指南中的信封加密。
AWS KMS key 是密钥的逻辑表示。KMS 密钥包含元数据,如密钥 ID、创建日期、描述和密钥状态。KMS 密钥还包含用于加密和解密数据的密钥材料。有关 KMS 密钥的更多信息,请参阅 AWS Key Management Service 开发人员指南中的 AWS KMS keys。
Amazon DocumentDB 弹性集群支持采用两种类型的密钥加密:
AWS自有密钥 — Amazon DocumentDB 弹性集群默认使用这些密钥来自动加密个人身份数据。您无法查看、管理或使用 AWS 拥有的密钥,或者审计其使用情况。但是无需执行任何操作或更改任何计划即可保护用于加密数据的密钥。。有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的 AWS 自有密钥。
客户托管密钥 — 您创建、拥有和管理的对称性 AWS KMS keys。由于您完全控制这一层加密,故因此可以执行此类任务如:
制定和维护关键策略
建立和维护 IAM 策略和授权
启用和禁用密钥策略
轮换加密材料
添加标签
创建密钥别名
安排密钥删除
有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的客户托管密钥。
您必须使用对称加密 KMS 密钥加密您的集群,因为 Amazon DocumentDB 仅支持对称加密 KMS 密钥。请勿使用非对称 KMS 密钥尝试对 Amazon DocumentDB elastic 集群中的数据进行加密。有关更多信息,请参阅AWS Key Management Service开发人员指南中的非对称密钥AWS KMS。
如果 Amazon DocumentDB 不再能够有权访问集群的加密密钥 — 例如,在撤销密钥访问权限时 — 加密的集群将进入终末状态。在此情况下,您只能从备份还原集群。对于 Amazon DocumentDB,备份始终启用 1 天。此外,如果您禁用已加密 Amazon DocumentDB 集群的密钥,您最终将失去对该集群的读写访问权限。如果 Amazon DocumentDB 遇到用它无法访问的密钥加密的集群,则它会使该集群进入最终状态。在此状态下,集群不再可用,并且数据库的当前状态无法恢复。若要还原集群,您必须重新启用对 Amazon DocumentDB 的加密密钥的访问,然后从备份还原集群。
在已创建加密集群的 KMS 密钥后,您无法更改它。请确保先确定您的加密密钥要求,然后再创建加密的弹性集群。
Amazon DocumentDB 弹性集群如何使用 AWS KMS 中的授权
Amazon DocumentDB 弹性集群需要 授权 来使用客户托管密钥。
当您创建经客户托管密钥加密的集群时,Amazon DocumentDB 弹性集群将通过向 AWS KMS 发送 CreateGrant
请求来代表您创建授权。使用 AWS KMS 中授权给予 Amazon DocumentDB 弹性集群 访问客户账户中 KMS 密钥的权限。
Amazon DocumentDB 弹性集群要求该授权对以下内部操作使用您的客户托管密钥:
向 AWS KMS 发送 DescribeKey
请求,以验证在创建跟踪器或地理围栏集合时输入的对称性客户托管 KMS 密钥 ID 是否有效。
向 AWS KMS 发送 GenerateDataKey
请求,以生成由您的客户托管密钥加密的数据密钥。
将 Decrypt
请求发送到 AWS KMS ,以解密加密的数据密钥,以使它们能够用于加密您的数据。
您可以随时撤消针对授权的访问权限,也可以移除服务访问客户托管密钥的权限。如果您这样做,Amazon DocumentDB 弹性集群将不能访问由客户托管密钥加密的任何数据,这影响依赖于该数据的操作。
创建客户托管密钥
您可以使用 AWS Management Console 或 AWS KMS API 创建对称客户托管密钥。
对称客户托管密钥创建
遵循 AWS Key Management Service开发人员指南中创建对称性客户托管密钥的步骤。
密钥策略
密钥策略控制对客户托管式密钥的访问。每个客户托管式密钥必须只有一个密钥策略,其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时,可以指定密钥策略。有关更多信息,请参阅位于AWS Key Management Service开发人员指南AWS Key Management Service的概述中的 KMS 密钥访问信息。
要将您的客户托管密钥配合 Amazon DocumentDB 弹性集群资源一起使用,则必须在密钥策略中允许以下 API 操作:
有关更多信息,请参阅AWS Key Management Service开发人员指南中的密钥策略中AWS 服务权限和密钥访问故障排除。
通过 IAM 策略限制客户访问托管密钥
除了 KMS 密钥策略外,您还可以在 IAM policy 略中限制 KMS 密钥权限。
您可以通过各种方式使 IAM 策略更严格。例如,要允许客户管理密钥仅用于源自 Amazon DocumentDB 弹性集群的请求,您可以将 kms:ViaService
条件键 与 docdb-elastic.<region-name>.amazonaws.com
值结合使用。
有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的允许其他账户中的用户使用 KMS 密钥。
监控您的 Amazon DocumentDB 弹性集群加密密钥
当您配合 Docdb Elastic 资源使用 AWS KMS key 客户托管密钥时,您可以使用 AWS CloudTrail 或 Amazon CloudWatch Logs 来跟踪 Docdb Elastic 发送到 AWS KMS 的请求。
以下示例是CreateGrant
、GenerateDataKeyWithoutPlainText
、Decrypt
和DescribeKey
的事件,旨在监控由 Amazon DocumentDB 弹性集群调用的事件以访问由您的客户托管密钥加密的数据AWS KMS keyAWS 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"
}
了解更多信息
以下资源提供有关静态数据加密的更多信息: