Amazon Aurora DSQL 的数据加密
Amazon Aurora DSQL 可对所有用户静态数据进行加密。为了增强安全性,此加密使用 AWS Key Management Service(AWS KMS)。此功能减少保护敏感数据时涉及的操作负担和复杂性。静态加密有助于:
-
减少保护敏感数据的运营负担
-
构建符合严格的加密合规性和法规要求的安全敏感型应用程序
-
通过始终在加密集群中保护数据,增加额外的一层数据保护
-
遵守组织策略、行业或政府法规以及合规性要求
使用 Aurora DSQL,可以构建符合严格的加密合规性和法规要求的安全敏感型应用程序。以下各节说明如何为新的和现有 Aurora DSQL 数据库配置加密以及如何管理加密密钥。
主题
Aurora DSQL 的 KMS 密钥类型
Aurora DSQL 与 AWS KMS 集成,以管理集群的加密密钥。要了解有关密钥类型和状态的更多信息,请参阅《AWS Key Management Service Developer Guide》中的 AWS Key Management Service concepts。创建新集群时,可以从以下 KMS 密钥类型中进行选择来对集群进行加密:
- AWS 拥有的密钥
-
默认加密类型。Aurora DSQL 拥有密钥,不向您收取额外费用。当您访问加密集群时,Amazon Aurora DSQL 会透明地解密集群数据。您无需更改代码或应用程序即可使用或管理加密集群,并且所有 Aurora DSQL 查询都将处理加密的数据。
- 客户自主管理型密钥
-
您可以在 AWS 账户中创建、拥有和管理密钥。您对 KMS 密钥拥有完全控制权。将收取 AWS KMS 费用。
使用 AWS 拥有的密钥进行静态加密不另行收费。但是,使用客户自主管理型密钥需支付 AWS KMS 费用。有关更多信息,请参阅 AWS KMS 定价
您可以随时在这些密钥类型之间切换。有关密钥类型的更多信息,请参阅《AWS Key Management Service Developer Guide》中的 Customer managed keys 和 AWS 拥有的密钥。
注意
Aurora DSQL 静态加密可在所有提供 Aurora DSQL 的 AWS 区域中使用。
Aurora DSQL 中的静态加密
Amazon Aurora 使用 256 位高级加密标准(AES-256)对静态数据进行加密。这种加密功能有助于保护您的数据,来防止对底层存储进行未经授权的访问。AWS KMS 管理集群的加密密钥。您可以使用默认 AWS 拥有的密钥,也可以选择使用您自己的 AWS KMS 客户托管密钥。要了解有关为 Aurora DSQL 集群指定和管理密钥的更多信息,请参阅创建加密的 Aurora DSQL 集群和移除或更新 Aurora DSQL 集群的密钥。
AWS 拥有的密钥
默认情况下,Aurora DSQL 使用 AWS 拥有的密钥对所有集群进行加密。这些密钥可免费使用,并且每年轮换,以保护您的账户资源。您无需查看、管理、使用或审计这些密钥,因此无需采取任何措施来保护数据。有关 AWS 拥有的密钥 的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的 AWS 拥有的密钥。
客户托管密钥
您可以在 AWS 账户中创建、拥有和管理客户自主管理型密钥。您完全控制这些 KMS 密钥,包括其策略、加密材料、标签和别名。有关管理权限的更多信息,请参阅《AWS Key Management Service Developer Guide》中的 Customer managed keys。
当您指定客户自主管理型密钥来进行集群级加密时,Aurora DSQL 使用该密钥对集群及其所有区域数据进行加密。为了防止数据丢失和维护集群访问权限,Aurora DSQL 需要访问您的加密密钥。如果您禁用客户自主管理型密钥、计划删除密钥或具有限制服务访问权限的策略,则集群的加密状态将更改为 KMS_KEY_INACCESSIBLE
。当 Aurora DSQL 无法访问密钥时,用户无法连接到集群,集群的加密状态更改为 KMS_KEY_INACCESSIBLE
,而服务将无法访问集群数据。
对于多区域集群,客户可以单独配置每个区域的 AWS KMS 加密密钥,而每个区域集群均使用自己的集群级加密密钥。如果 Aurora DSQL 无法访问多区域集群中某个对等集群的加密密钥,则该对等集群的状态将变为 KMS_KEY_INACCESSIBLE
,而不可用于读取和写入操作。其它对等集群继续正常运行。
注意
如果 Aurora DSQL 无法访问客户自主管理型密钥,则集群加密状态将变为 KMS_KEY_INACCESSIBLE
。还原密钥访问权限后,服务将在 15 分钟内自动检测到还原情况。有关更多信息,请参阅“集群闲置”。
对于多区域集群,如果长时间丢失密钥访问权限,则集群还原时间取决于当密钥无法访问时写入了多少数据。
将 AWS KMS 和数据密钥与 Aurora DSQL 结合使用
Aurora DSQL 静态加密功能使用 AWS KMS key和数据密钥的层次结构来保护集群数据。
建议您在 Aurora DSQL 中实施集群之前先制定加密策略计划。如果您要在 Aurora DSQL 中存储敏感或机密数据,请考虑在计划中包括客户端加密。这样,您就可以尽量靠近数据源来加密数据,确保其在整个生命周期中受到保护。
将 AWS KMS key与 Aurora DSQL 结合使用
静态加密使用 AWS KMS key保护 Aurora DSQL 集群。默认情况下,Aurora DSQL 使用 AWS 拥有的密钥,即在 Aurora DSQL 服务账户中创建并管理的多租户加密密钥。但是,您可以使用 AWS 账户中的客户自主管理型密钥对 Aurora DSQL 集群进行加密。您可以为每个集群选择不同的 KMS 密钥,即使集群参与多区域设置。
您可以在创建或更新集群时为集群选择 KMS 密钥。您可以通过以下方式随时更改集群的 KMS 密钥:在 Aurora DSQL 控制台中或使用 UpdateCluster
操作。切换密钥的过程不需要停机或降低服务质量。
重要
Aurora DSQL 仅支持对称 KMS 密钥。不能使用非对称 KMS 密钥来加密 Aurora DSQL 集群。
客户自主管理型密钥提供以下优势。
-
您可以创建和管理 KMS 密钥,包括设置密钥策略和 IAM 策略来控制对 KMS 密钥的访问。您可以启用和禁用 KMS 密钥、启用和禁用自动密钥轮换,以及当 KMS 密钥不再使用时删除 KMS 密钥。
-
您可以使用具有导入的密钥材料的客户托管密钥,或者您拥有和管理的自定义密钥存储中的客户托管密钥。
-
您可以通过检查 AWS CloudTrail 日志中对 AWS KMS 的 Aurora DSQL API 调用来审计 Aurora DSQL 集群的加密和解密。
但是,AWS 拥有的密钥是免费的,其使用不会计入 AWS KMS 资源或请求配额。客户自主管理型密钥会针对每次 API 调用产生费用,并且对于此类密钥具有 AWS KMS 配额。
将集群密钥与 Aurora DSQL 结合使用
Aurora DSQL 对集群使用 AWS KMS key来为集群生成并加密一个唯一的数据密钥,称为集群密钥。
该集群密钥用作密钥加密密钥。Aurora DSQL 使用此集群密钥来保护用于加密集群数据的数据加密密钥。Aurora DSQL 为集群中的每个底层结构生成唯一的数据加密密钥,但多个集群项目可能受相同的数据加密密钥保护。
为了解密集群密钥,Aurora DSQL 会在您首次访问加密集群时向 AWS KMS 发送请求。为保持集群可用,Aurora DSQL 会定期验证对 KMS 密钥的解密访问权限,即使您没有积极地访问集群也是如此。
Aurora DSQL 在 AWS KMS 外部存储和使用集群密钥与数据加密密钥。它会借助高级加密标准 (AES) 加密和 256 位加密密钥保护所有密钥。然后,它存储加密密钥及加密数据,以便它们可根据需要用于解密集群数据。
如果您更改集群的 KMS 密钥,Aurora DSQL 会使用新的 KMS 密钥重新加密现有集群密钥。
集群密钥缓存
为了避免针对每个 Aurora DSQL 操作调用 AWS KMS,Aurora DSQL 会针对每个调用方将明文集群密钥缓存在内存中。如果 Aurora DSQL 在处于不活动状态 15 分钟后获取对缓存集群密钥的请求,它会向 AWS KMS 发送新请求来解密集群密钥。此调用将捕获在上次请求解密集群密钥之后对 AWS KMS 或 AWS Identity and Access Management(IAM)中 AWS KMS key的访问策略所做的任何更改。
授权将 AWS KMS key用于 Aurora DSQL
如果您使用您账户中的客户自主管理型密钥来保护 Aurora DSQL 集群,则该密钥的策略必须向 Aurora DSQL 授予代表您使用该密钥的权限。
您可以全面控制有关客户自主管理型密钥的策略。Aurora DSQL 无需额外授权,即可使用默认 AWS 拥有的密钥来保护您 AWS 账户中的 Aurora DSQL 集群。
客户托管密钥的密钥策略
当您选择客户自主管理型密钥来保护 Aurora DSQL 集群时,Aurora DSQL 需要相应的权限,以便代表做出选择的主体使用 AWS KMS key。该主体(用户或角色)必须对 Aurora DSQL 所需的 AWS KMS key拥有权限。您可以在密钥策略或 IAM 策略中提供这些权限。
Aurora DSQL 对客户自主管理型密钥至少需要具备以下权限:
-
kms:Encrypt
-
kms:Decrypt
-
kms:ReEncrypt*
(适用于 kms:ReEncryptFrom 和 kms:ReEncryptTo) -
kms:GenerateDataKey
-
kms:DescribeKey
例如,以下示例密钥策略仅提供所需的权限。该策略具有以下效果:
-
支持 Aurora DSQL 在加密操作中使用 AWS KMS key,但仅当它代表账户中有权使用 Aurora DSQL 的主体行事时才可如此。如果在策略语句中指定的主体无权使用 Aurora DSQL,调用将失败,即使调用来自 Aurora DSQL 服务也是如此。
-
kms:ViaService
条件密钥仅当 Aurora DSQL 代表策略语句中所列主体发出请求时,才支持此类权限。这些主体不能直接调用这些操作。 -
向 AWS KMS key管理员(可以代入
db-team
角色的用户)授予对 AWS KMS key的只读访问权限
在使用示例密钥策略之前,请将示例委托人替换为 AWS 账户 中的实际委托人。
{ "Sid": "Enable dsql IAM User Permissions", "Effect": "Allow", "Principal": { "Service": "dsql.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:Encrypt", "kms:ReEncryptFrom", "kms:ReEncryptTo" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:dsql:ClusterId": "w4abucpbwuxx", "aws:SourceArn": "arn:aws:dsql:us-east-2:111122223333:cluster/w4abucpbwuxx" } } }, { "Sid": "Enable dsql IAM User Describe Permissions", "Effect": "Allow", "Principal": { "Service": "dsql.amazonaws.com" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:dsql:us-east-2:111122223333:cluster/w4abucpbwuxx" } } }
Aurora DSQL 加密上下文
加密上下文 是一组包含任意非机密数据的键值对。在请求中包含加密上下文以加密数据时,AWS KMS 以加密方式将加密上下文绑定到加密的数据。要解密数据,您必须传入相同的加密上下文。
Aurora DSQL 在所有 AWS KMS 加密操作中使用相同的加密上下文。如果您使用客户自主管理型密钥来保护 Aurora DSQL 集群,则可使用加密上下文在审计记录和日志中确定 AWS KMS key的使用情况。它也以明文形式显示在日志中,例如 AWS CloudTrail 中的那些日志。
加密上下文还可用作在策略中进行授权的条件。
在向 AWS KMS 发出的请求中,Aurora DSQL 使用具有密钥/值对的加密上下文:
"encryptionContext": { "aws:dsql:ClusterId": "w4abucpbwuxx" },
密钥/值对标识 Aurora DSQL 要加密的集群。键是 aws:dsql:ClusterId
。值是集群的标识符。
监控 Aurora DSQL 与 AWS KMS 的交互
如果您使用客户自主管理型密钥来保护 Aurora DSQL 集群,则可以使用 AWS CloudTrail 日志来跟踪 Aurora DSQL 代表您发送到 AWS KMS 的请求。
展开以下各节,了解 Aurora DSQL 如何使用 AWS KMS 操作 GenerateDataKey
和 Decrypt
。
当您对集群启用静态加密时,Aurora DSQL 会创建一个唯一的集群密钥。它向 AWS KMS 发送 GenerateDataKey
请求,以便为集群指定 AWS KMS key。
记录 GenerateDataKey
操作的事件与以下示例事件类似。该用户是 Aurora DSQL 服务账户。参数包括 AWS KMS key的 Amazon 资源名称(ARN)、需要 256 位密钥的密钥说明符以及标识集群的加密上下文。
{ "eventVersion": "1.11", "userIdentity": { "type": "AWSService", "invokedBy": "dsql.amazonaws.com" }, "eventTime": "2025-05-16T18:41:24Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-1", "sourceIPAddress": "dsql.amazonaws.com", "userAgent": "dsql.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:dsql:ClusterId": "w4abucpbwuxx" }, "keySpec": "AES_256", "keyId": "arn:aws:kms:us-east-1:982127530226:key/8b60dd9f-2ff8-4b1f-8a9c-bf570cbfdb5e" }, "responseElements": null, "requestID": "2da2dc32-d3f4-4d6c-8a41-aff27cd9a733", "eventID": "426df0a6-ba56-3244-9337-438411f826f4", "readOnly": true, "resources": [ { "accountId": "AWS Internal", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:982127530226:key/8b60dd9f-2ff8-4b1f-8a9c-bf570cbfdb5e" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "sharedEventID": "f88e0dd8-6057-4ce0-b77d-800448426d4e", "vpcEndpointId": "AWS Internal", "vpcEndpointAccountId": "vpce-1a2b3c4d5e6f1a2b3", "eventCategory": "Management" }
当您访问加密的 Aurora DSQL 集群时,Aurora DSQL 需要解密集群密钥,以便它可以解密层次结构中位于其下方的密钥。然后,它解密集群中的数据。为了解密集群密钥,Aurora DSQL 向 AWS KMS 发送 Decrypt
请求,以便为集群指定 AWS KMS key。
记录 Decrypt
操作的事件与以下示例事件类似。用户是您的 AWS 账户中正在访问集群的主体。参数包括加密的集群密钥(作为加密文字 blob)以及标识集群的加密上下文。AWS KMS 从加密文字中得出 AWS KMS key的 ID。
{ "eventVersion": "1.05", "userIdentity": { "type": "AWSService", "invokedBy": "dsql.amazonaws.com" }, "eventTime": "2018-02-14T16:42:39Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-1", "sourceIPAddress": "dsql.amazonaws.com", "userAgent": "dsql.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "encryptionContext": { "aws:dsql:ClusterId": "w4abucpbwuxx" }, "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "11cab293-11a6-11e8-8386-13160d3e5db5", "eventID": "b7d16574-e887-4b5b-a064-bf92f8ec9ad3", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "AWS Internal", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "sharedEventID": "d99f2dc5-b576-45b6-aa1d-3a3822edbeeb", "vpcEndpointId": "AWS Internal", "vpcEndpointAccountId": "vpce-1a2b3c4d5e6f1a2b3", "eventCategory": "Management" }
创建加密的 Aurora DSQL 集群
所有 Aurora DSQL 集群都已静态加密。默认情况下,集群免费使用 AWS 拥有的密钥,您也可以指定自定义 AWS KMS 密钥。按照以下步骤从 AWS Management Console或 AWS CLI 创建加密集群。
移除或更新 Aurora DSQL 集群的密钥
可以使用 AWS Management Console或 AWS CLI 在 Amazon Aurora DSQL 中更新或移除现有集群上的加密密钥。如果您移除密钥而不替换它,Aurora DSQL 将使用默认的 AWS 拥有的密钥。按照以下步骤从 Aurora DSQL 控制台或 AWS CLI 更新现有集群的加密密钥。
注意
如果您选择拥有和管理您自己的密钥,请确保适当地设置 KMS 密钥策略。有关示例和更多信息,请参阅 客户托管密钥的密钥策略。
使用 Aurora DSQL 进行加密的注意事项
-
Aurora DSQL 对所有集群静态数据进行加密。您不能禁用此加密,也不能仅加密集群中的某些项目。
-
AWS Backup 对您的备份以及从这些备份中还原的任何集群进行加密。您可以在 AWS Backup 中使用 AWS 拥有的密钥或客户自主管理型密钥加密备份数据。
-
Aurora DSQL 已启用以下数据保护状态:
-
静态数据:Aurora DSQL 对持久存储介质上的所有静态数据进行加密
-
传输中数据:Aurora DSQL 默认情况下使用传输层安全性协议(TLS)对所有通信进行加密
-
-
当您转换为其它密钥时,我们建议您保持原始密钥处于启用状态,直到转换过程完成。AWS 在使用新密钥加密数据之前,需要使用原始密钥来解密数据。当集群的
encryptionStatus
为ENABLED
并且您看到新的客户自主管理型密钥的kmsKeyArn
时,该过程就完成了。 -
当您禁用客户自主管理型密钥或撤销 Aurora DSQL 使用您的密钥的访问权限时,集群将进入
IDLE
状态。 -
AWS Management Console和 Amazon Aurora DSQL API 对加密类型使用不同的术语:
-
AWS 管理控制台:在控制台中,当使用客户自主管理型密钥时,您将看到
KMS
;当使用 AWS 拥有的密钥时,您将看到DEFAULT
。 -
API:Amazon Aurora DSQL API 使用
CUSTOMER_MANAGED_KMS_KEY
来表示客户自主管理型密钥,而使用AWS_OWNED_KMS_KEY
来表示 AWS 拥有的密钥。
-
-
如果您在创建集群期间未指定加密密钥,Aurora DSQL 会自动使用 AWS 拥有的密钥加密数据。
-
您可以随时在 AWS 拥有的密钥和客户自主管理型密钥之间切换。使用 AWS Management Console、AWS CLI 或 Amazon Aurora DSQL API 进行此更改。