加密 Amazon Neptune 数据库中的静态数据 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

加密 Amazon Neptune 数据库中的静态数据

Neptune 加密的实例通过防止对基础存储进行未经授权的访问来帮助保护您的数据,提供了额外的一层数据保护。您可以使用 Neptune 加密来增强部署在云中的应用程序的数据保护。您还可以使用它来满足静态数据加密的合规性要求。

要管理用于加密和解密 Neptune 资源的密钥,您可以使用 Amazon Key Management Service (Amazon KMS)。Amazon KMS 将安全、高度可用的硬件和软件结合起来,提供可扩展到云的密钥管理系统。利用 Amazon KMS,您可创建加密密钥并定义控制这些密钥的使用方式的策略。Amazon KMS 支持 Amazon CloudTrail,因此,您可审核密钥使用情况以验证密钥是否使用得当。您可以将 Amazon KMS 密钥与 Neptune 和支持的 Amazon 服务结合使用,如 Amazon Simple Storage Service (Amazon S3)、Amazon Elastic Block Store (Amazon EBS) 和 Amazon Redshift。有关支持 Amazon KMS 的服务的列表,请参阅《Amazon Key Management Service 开发人员指南》中的 Amazon 服务如何使用 Amazon KMS

可为 Neptune 加密的实例加密所有日志、备份和快照。

为 Neptune 数据库实例启用加密

要为新的 Neptune 数据库实例启用加密,请在 Neptune 控制台的启用加密部分选择。有关创建 Neptune 数据库实例的信息,请参阅创建 Amazon Neptune 集群

在创建加密的 Neptune 数据库实例时,还可为加密密钥提供 Amazon KMS 密钥标识符。如果您没有指定 Amazon KMS 密钥标识符,Neptune 将对您的新 Neptune 数据库实例使用您的默认 Amazon RDS 加密密钥 (aws/rds)。Amazon KMS 为您的 Amazon 账户创建 Neptune 的默认加密密钥。您的 Amazon 账户对每个 Amazon 区域具有不同的默认加密密钥。

创建加密的 Neptune 数据库实例后,您无法更改该实例的加密密钥。因此,请确保先确定您的加密密钥要求,然后再创建加密的 Neptune 数据库实例。

可使用另一账户中的密钥的 Amazon 资源名称 (ARN) 来加密 Neptune 数据库实例。如果使用拥有用于加密新 Neptune 数据库实例的 Amazon KMS 加密密钥的同一 Amazon 账户创建 Neptune 数据库实例,则您传递的 Amazon KMS 密钥 ID 可以是 Amazon KMS 密钥别名,而不是该密钥的 ARN。

重要

如果 Neptune 失去对 Neptune 数据库实例的加密密钥的访问权限(例如,在撤销对密钥的 Neptune 访问权限时),该加密的数据库实例将被置于最终状态且只能从备份进行还原。我们强烈建议您始终对加密的 Neptune 数据库实例启用备份,以防止数据库中的加密数据丢失。

启用加密时所需的密钥权限

创建加密 Neptune 数据库实例的 IAM 用户或角色必须至少拥有 KMS 密钥的以下权限:

  • "kms:Encrypt"

  • "kms:Decrypt"

  • "kms:GenerateDataKey"

  • "kms:ReEncryptTo"

  • "kms:GenerateDataKeyWithoutPlaintext"

  • "kms:CreateGrant"

  • "kms:ReEncryptFrom"

  • "kms:DescribeKey"

以下是包含必要权限的密钥策略示例:

JSON
{ "Version":"2012-10-17", "Id": "key-consolepolicy-3", "Statement": [ { "Sid": "Allow use of the key for Neptune", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/NeptuneFullAccess" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:ReEncryptTo", "kms:GenerateDataKeyWithoutPlaintext", "kms:CreateGrant", "kms:ReEncryptFrom", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "rds.us-east-1.amazonaws.com" } } }, { "Sid": "Deny use of the key for non Neptune", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:role/NeptuneFullAccess" }, "Action": [ "kms:*" ], "Resource": "*", "Condition": { "StringNotEquals": { "kms:ViaService": "rds.us-east-1.amazonaws.com" } } } ] }
  • 第一条语句提供对该角色所有必需 Amazon KMS API 的访问权限,其范围仅限于 RDS 服务主体。

  • 第二条语句通过强制该角色不能将该密钥用于任何其它 Amazon 服务来进一步加强安全性。

也可以通过添加以下内容来进一步缩小 createGrant 权限范围:

"Condition": { "Bool": { "kms:GrantIsForAWSResource": true } }

Neptune 加密的限制

加密 Neptune 集群存在以下限制:

  • 您无法将未加密的数据库集群转换为加密的数据库集群。

    但是,您可以将未加密的数据库集群快照还原为加密的数据库集群。为此,请在从未加密的数据库集群快照还原时指定 KMS 加密密钥。

  • 您无法将未加密的数据库实例转换为加密的数据库实例。您只能在创建数据库实例时为其启用加密。

  • 此外,不能将已加密的数据库实例修改为禁用加密。

  • 您无法拥有未加密数据库实例的加密只读副本或加密数据库实例的未加密只读副本。

  • 加密的只读副本的加密密钥必须用与源数据库实例的相同。