加密 Amazon RDS 资源
Amazon RDS 可以加密您的 Amazon RDS 数据库实例。静态加密的数据包括数据库实例的基础存储、其自动化备份、只读副本和快照。
Amazon RDS 加密的数据库实例使用行业标准 AES-256 加密算法来对托管 Amazon RDS 数据库实例的服务器上的数据进行加密。在加密数据后,Amazon RDS 将以透明方式处理访问的身份验证和数据的解密,并且对性能产生的影响最小。您无需修改数据库客户端应用程序来使用加密。
注意
对于加密和未加密数据库实例,将对在源与只读副本之间发送的数据进行加密,即使在 AWS 区域之间复制时也是如此。
Amazon RDS 资源加密概览
Amazon RDS 加密的数据库实例通过保护您的数据免受未经授权的访问来为基础存储提供额外一层数据保护。您可以使用 Amazon RDS 加密来增强对云中部署的应用程序的数据保护,并满足静态数据加密的合规性要求。
可为 Amazon RDS 加密的数据库实例加密所有日志、备份和快照。Amazon RDS 使用 AWS Key Management Service 密钥加密这些资源。有关 KMS 密钥的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的 AWS KMS keys 和AWS KMS key 管理。如果复制加密快照,则可以使用不同于用于加密源快照的 KMS 密钥来加密目标快照。
Amazon RDS 加密实例的只读副本必须使用与主数据库实例相同的 KMS 密钥进行加密,前提是两者在相同的 AWS 区域中。如果主数据库实例和只读副本位于不同的 AWS 区域中,则使用该 AWS 区域的 KMS 密钥对只读副本进行加密。
您可以使用 AWS 托管式密钥,也可以创建客户托管的密钥。要管理用于加密和解密 Amazon RDS 资源的客户托管密钥,您可以使用 AWS Key Management Service (AWS KMS)。AWS KMS 将安全、高度可用的硬件和软件结合起来,提供可扩展到云的密钥管理系统。利用 AWS KMS,您可创建客户托管密钥并定义控制这些客户托管密钥的使用方式的策略。AWS KMS 支持 CloudTrail,因此,您可审核 KMS 密钥使用情况以验证客户托管密钥是否使用得当。您可以将客户托管式密钥与 Amazon Aurora 和支持的 AWS 服务(例如 Amazon S3、Amazon EBS 和 Amazon Redshift)结合使用。有关与 AWS KMS 集成的服务的列表,请参阅 AWS 服务集成
Amazon RDS 还支持利用透明数据加密 (TDE) 对 Oracle 或 SQL Server 数据库实例进行加密。TDE 可以与 RDS 静态加密一起使用,但同时使用 TDE 和 RDS 静态加密可能会稍微影响数据库的性能。您必须为每种加密方法管理不同的密钥。有关 TDE 的更多信息,请参阅 Oracle 透明数据加密 或 SQL Server 中的透明数据加密支持。
加密数据库实例
要加密新数据库实例,请在 Amazon RDS 控制台上,选择 Enable encryption(启用加密)。想要了解有关创建数据库实例的信息,请参阅创建 Amazon RDS 数据库实例。
如果使用 create-db-instance AWS CLI 命令创建加密的数据库实例,请设置 --storage-encrypted
参数。如果使用 CreateDBInstance API 操作,请将 StorageEncrypted
参数设置为 true。
创建加密数据库实例时,您可以为 Amazon RDS 选择客户托管密钥或 AWS 托管式密钥 来加密您的数据库实例。如果您没有为客户托管密钥指定密钥标识符,则 Amazon RDS 会将 AWS 托管式密钥 用于您的新数据库实例。Amazon RDS 为您的 AWS 账户创建用于 Amazon RDS 的 AWS 托管式密钥。您的 AWS 账户在每个 AWS 区域都有用于 Amazon RDS 的不同 AWS 托管式密钥。
有关 KMS 密钥的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的 AWS KMS keys。
创建加密的数据库实例后,您无法更改该数据库实例使用的 KMS 密钥。因此,请确保先确定您的 KMS 密钥要求,然后再创建加密的数据库实例。
如果使用 AWS CLI create-db-instance
命令创建带有客户托管密钥的加密数据库实例,请将 --kms-key-id
参数设置为 KMS 密钥的任何密钥标识符。如果您使用 Amazon RDS API CreateDBInstance
操作,请将 KmsKeyId
参数设置为 KMS 密钥的任何密钥标识符。要在其他 AWS 账户中使用客户托管密钥,请指定密钥 ARN 或别名 ARN。
重要
禁用 KMS 密钥后,Amazon RDS 可能会失去对数据库实例的 KMS 密钥的访问权限。在这些情况下,加密的数据库实例很快会进入 inaccessible-encryption-credentials-recoverable
状态。数据库实例将保持此状态七天时间,在此期间实例停止运行。在此期间对该数据库实例进行的 API 调用可能不会成功。要恢复数据库实例,请启用 KMS 密钥并重新启动该数据库实例。从 AWS Management Console启用 KMS 密钥。使用 AWS CLI 命令 start-db-instance 或 AWS Management Console重新启动数据库实例。
如果数据库实例未在七天内恢复,则该实例会进入终端 inaccessible-encryption-credentials
状态。在此状态下,数据库实例将无法再使用,您只能从备份还原数据库实例。强烈建议您始终对加密的数据库实例启用备份以防止数据库中的加密数据丢失。
在数据库实例创建期间,Amazon RDS 会检查发出调用的主体是否有权访问 KMS 密钥,并从 KMS 密钥中生成授权,该授权将在数据库实例的整个生命周期内使用。撤消发出调用的主体对 KMS 密钥的访问权限,不会影响正在运行的数据库。在跨账户场景中使用 KMS 密钥时,例如将快照复制到其他账户,需要与其他账户共享 KMS 密钥。如果您从快照创建数据库实例但未指定不同的 KMS 密钥,则新实例将使用源账户中的 KMS 密钥。创建数据库实例后,撤消密钥访问权限不会影响实例。但是,禁用某个密钥会影响使用该密钥加密的所有数据库实例。为防止出现这种情况,请在快照复制操作期间指定不同的密钥。
确定是否为数据库实例启用加密
您可以使用 AWS Management Console、AWS CLI 或 RDS API 确定是否为数据库实例开启静态加密。
要确定是否为数据库实例开启静态加密
登录 AWS Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择 Databases(数据库)。
-
选择要检查的数据库实例的名称以显示其详细信息。
-
选择 Configuration(配置)选项卡,然后检查 Storage(存储)下的 Encryption(加密)值。
它显示 Enabled(已启用)或 Not enabled(未启用)。
要使用 AWS CLI 确定是否已为数据库实例启用静态加密,请使用以下选项调用 describe-db-instances 命令:
-
--db-instance-identifier
– 数据库实例的名称。
下面的示例使用查询就 mydb
数据库实例的静态加密返回 TRUE
或 FALSE
。
例
aws rds describe-db-instances --db-instance-identifier
mydb
--query "*[].{StorageEncrypted:StorageEncrypted}" --output text
要使用 Amazon RDS API 确定是否已为数据库实例启用静态加密,请使用以下参数调用 DescribeDBInstances 操作:
-
DBInstanceIdentifier
– 数据库实例的名称。
Amazon RDS 加密的可用性
Amazon RDS 加密当前可用于所有数据库引擎和存储类型,但 SQL Server Express 版本除外。
Amazon RDS 加密适用于大多数数据库实例类。下表列出了不支持 Amazon RDS 加密的数据库实例类:
实例类型 | 实例类 |
---|---|
通用型(M1) |
db.m1.small db.m1.medium db.m1.large db.m1.xlarge |
内存优化(M2) |
db.m2.xlarge db.m2.2xlarge db.m2.4xlarge |
突增型(T2) |
db.t2.micro |
传输中加密
AWS 在所有类型的数据库实例之间提供安全的私有连接。此外,某些实例类型使用底层 Nitro 系统硬件的卸载功能,自动加密实例之间的传输中流量。此加密使用关联数据的身份验证加密(AEAD)算法,采用 256 位加密。这对网络性能没有影响。要在实例之间支持这种额外的传输中流量加密,必须满足以下要求:
-
使用以下实例类型:
-
通用型:M6i、M6id、M6in、M6idn、M7g
-
内存优化型:R6i、R6id、R6in、R6idn、R7g、X2idn、X2iedn、X2iezn
-
-
这些实例位于同一 AWS 区域。
-
这些实例位于相同 VPC 或对等的 VPC 中,并且流量不会通过虚拟网络设备或服务(如负载均衡器或中转网关)传输。
有关底层 EC2 实例和关联加密的更多信息,请参阅《Amazon EC2 用户指南》中的传输中加密。
Amazon RDS 加密的数据库实例的限制
Amazon RDS 加密的数据库实例存在以下限制:
-
您只能在创建 Amazon RDS 数据库实例时而不是创建该数据库实例之后加密该数据库实例。
不过,由于您可以加密未加密快照的副本,因此,您可以高效地为未加密的数据库实例添加加密。也就是说,您可以创建数据库实例快照,然后创建该快照的加密副本。然后,您可以从加密快照还原数据库实例,从而获得原始数据库实例的加密副本。有关更多信息,请参阅 复制数据库快照。
-
您无法在加密的数据库实例上关闭加密。
-
您无法创建未加密数据库实例的加密快照。
-
加密数据库实例的快照必须使用与数据库实例相同的 KMS 密钥进行加密。
-
您无法拥有未加密数据库实例的加密只读副本或加密数据库实例的未加密只读副本。
-
如果加密的只读副本位于同一 AWS 区域,则它们的 KMS 密钥必须与源数据库实例的相同。
-
您不能将未加密的备份或快照还原到加密的数据库实例。
-
要将已加密快照从一个 AWS 区域复制到另一个区域,您必须指定目标 AWS 区域的 KMS 密钥。这是因为 KMS 密钥特定于在其中创建它们的 AWS 区域。
源快照在复制过程中保持加密状态。Amazon RDS 使用信封加密在复制过程中保护数据。有关信封加密的更多信息,请参阅AWS Key Management Service开发人员指南中的信封加密。
-
您无法对加密数据库实例取消加密。但是,您可以从加密的数据库实例中导出数据,然后将数据导入未加密的数据库实例。