在 Amazon RDS Custom for SQL Server 上通过透明数据加密 (TDE)
Amazon RDS Custom for SQL Server 数据加密安全指南
关键要点
对于运行在 AWS 云上的 SQL Server 数据库,支持透明数据加密TDE和列级加密CLE。TDE 可加密整个数据库,确保存储的物理数据和日志文件安全。CLE 提供更细粒度的加密,可以针对特定的列,如敏感信息进行加密从而提高安全性。文章提供了详细的步骤和最佳实践以实施 TDE 和 CLE,确保数据安全。在医疗和金融等行业,客户充分利用 SQL Server 内置的安全功能来满足其合规性要求。在将数据库迁移到 AWS 云时,客户通常会询问关于 SQL Server 安全功能的支持,例如在 Amazon RDS Custom for SQL Server 上启用 TDE 和列级加密来保护数据库免受未授权访问或外部威胁。目前,Amazon RDS Custom for SQL Server 支持 透明数据加密TDE和 [列级加密](https//learnmicrosoftcom/enus/sql/relationaldatabases/security/encryption/encryptacolumnofdataview=sqlserverver16(CLE) 以确保数据在静态存储时的安全性。默认情况下,RDS Custom 需要创建 客户管理密钥CMK,利用 AWS 密钥管理服务KMS对数据进行加密。这一加密层可以帮助客户保护数据免受未授权访问底层存储的威胁。通过支持 TDE 和 CLE,客户现在可以利用 SQL Server 的原生安全特性,为其关键工作负载增加额外的安全层。
本文将指导您如何在 RDS Custom DB 实例上实现 TDE 和 CLE 来保护用户数据库。此外,我们将介绍将 TDE 和 CLE 加密数据库迁移到 RDS Custom DB 实例的最佳实践。
数据静态加密
以下选项用于在静态状态下加密数据:
启用透明数据加密TDE 使用此选项可加密整个数据库。
TDE 加密 SQL Server 数据库的物理数据mdf和日志ldf文件,这些文件存储于磁盘上,使用证书和密钥。TDE 会在将数据写入磁盘之前自动加密数据,并在从磁盘读取时解密数据。它还会加密在 TDE 启用的数据库上执行的原生 SQL Server 数据库备份。如果未授权人员获取了数据库备份,则启用 TDE 的备份将阻止他们在没有适当证书、密钥和密码的情况下恢复数据库。
启用列级加密CLE 使用此选项可以在列级别进行加密。
列级加密提供了更细粒度的数据加密,可以应用于所有或特定列,而不是整个数据库。当需要加密存储有敏感数据如信用卡号、社会安全号、个人健康信息或个人身份信息的特定列时,CLE 是一个很好的选择。
先决条件
在开始之前,请确保您具备以下基本条件:
设置 RDS Custom for SQL Server 的先决条件一个 RDS Custom for SQL Server DB 实例一个安装有 SQL Server 管理工作室SSMS的 Amazon Elastic Compute CloudAmazon EC2Windows 实例在测试数据库上启用透明数据加密TDE
要启用 TDE,连接到您的 RDS Custom 实例并按照以下步骤完成任务:
创建数据库主密钥创建证书备份证书为 RDS Custom 实例创建手动 DB 快照创建测试数据库并填充测试数据创建数据库加密密钥在数据库上启用透明数据加密TDE验证加密状态1 创建数据库主密钥
数据库主密钥保护在数据库中创建的其他密钥,必须在主数据库中创建主密钥。创建数据库主密钥的步骤如下:
sqlUSE masterGOCREATE MASTER KEY ENCRYPTION BY PASSWORD = ltYourPasswordHeregtGO
有关创建数据库主密钥的更多信息,请参见 创建主密钥TransactSQL。
2 创建证书
接下来,使用以下 TransactSQL 语句创建证书。
sqlCREATE CERTIFICATE MyRDSCustomCert WITH SUBJECT = My RDS Custom CertificateGO
有关创建证书的更多信息,请参见 创建证书TransactSQL。
3 备份证书
创建证书后,您应立即将其备份到安全位置。此证书至关重要,如果您选择将数据库恢复到另一个服务器,则将需要此证书。使用以下 TransactSQL 语句备份证书。
sqlBACKUP CERTIFICATE MyRDSCustomCertTO FILE = DrdsdbdataBackupMyRDSCustomCert WITH PRIVATE KEY ( FILE = DrdsdbdataBackupMyRDSCustomCertPrivateKeyFile ENCRYPTION BY PASSWORD = YourStrongPasswordHere )
有关备份证书的更多信息,请参见 备份证书TransactSQL。
4 创建 RDS Custom 实例的手动 DB 快照
建议在创建证书后,对您的 RDS Custom for SQL Server 实例进行手动 DB 快照,以确保备份了证书。您可以使用控制台或 AWS CLI 创建 DB 快照。
以下是使用 AWS CLI 创建 DB 快照的示例,请替换实例名称和快照名称以匹配您的实例。
bashaws rds createdbsnapshot dbinstanceidentifier ltmyrdscustommssqlinstancegt dbsnapshotidentifier ltmyrdscustommssqlsnapshotgt
5 创建测试数据库并填充测试数据
在 RDS Custom DB 实例上创建一个测试数据库,以启用加密。
sql 创建测试数据库CREATE DATABASE testdbGOUSE testdbGO 创建表CREATE TABLE patientinfo(FirstName VARCHAR(100)LastName VARCHAR (100)State VARCHAR (2)SSN VARCHAR (10)DOB DATETIME)GO
向表中插入记录INSERT INTO patientinfo VALUES (Tom Davis NJ 5641434802 20090701)INSERT INTO patientinfo VALUES (Shelly Wilson NY 3701179724 19880630)INSERT INTO patientinfo VALUES (Steph Williams CT 7927828402 19981029)INSERT INTO patientinfo VALUES (Steph Williams OH 5699867456 19951103)INSERT INTO patientinfo VALUES (Kevin Brown NH 4807085926 19910419)
查看表中的记录SELECT FROM patientinfo
6 创建数据库加密密钥
接下来,在用户数据库中创建数据库加密密钥,指明要使用的加密算法类型和在前一步创建的证书。
sqlUSE [testdb]GOCREATE DATABASE ENCRYPTION KEYWITH ALGORITHM = AES256ENCRYPTION BY SERVER CERTIFICATE [MyRDSCustomCert]GO
有关创建数据库加密密钥的更多信息,请参见 创建数据库加密密钥TransactSQL。
7 在数据库上启用透明数据加密TDE
在证书和数据库加密配置好后,通过以下 TransactSQL 语句启用用户数据库的加密:
sqlUSE masterGOALTER DATABASE testdbSET ENCRYPTION ONGO
8 验证加密状态

最后,通过运行以下查询验证加密状态。加密状态应显示 TempDB 和 testdb 数据库为 3:
sqlSELECT DBNAME(databaseid) AS DatabaseName EncryptionState CreateDate KeyAlgorithm FROM sysdmdatabaseencryptionkeys
有关检查加密状态的更多信息,请参见 TDE 和事务日志。
启用列级加密CLE
要启用列级加密CLE,连接到您的 RDS Custom 实例并按照以下步骤完成:
创建数据库主密钥创建证书备份证书创建对称密钥审查证书和对称密钥添加新列 SSNENC以启用列级加密将数据从未加密的列 SSN 移动到加密列 SSNENC解密并读取列数据1 创建数据库主密钥数据库主密钥保护在数据库中创建的其他密钥,必须在主数据库中创建主密钥。创建数据库主密钥的步骤如下:
sqlUSE testdbGOCREATE MASTER KEY ENCRYPTION BY PASSWORD = ltstrong passwordgtGO
2 创建证书接下来,使用以下 TransactSQL 语句创建证书。
sqlUSE testdbGOCREATE CERTIFICATE SSNCert WITH SUBJECT = This certificate will be used for CLEGO
3 备份证书如前所述,在创建证书后,您应将其备份到安全位置。这张证书至关重要,如果您选择将数据库恢复到另一个服务器,则将需要此证书。使用以下 TransactSQL 语句备份证书。
sqlBACKUP CERTIFICATE MyRDSCustomCertTO FILE = DrdsdbdataBackupMyRDSCustomCert WITH PRIVATE KEY ( FILE = DrdsdbdataBackupMyRDSCustomCertPrivateKeyFile ENCRYPTION BY PASSWORD = YourStrongPasswordHere )
有关备份证书的更多信息,请参见 备份证书TransactSQL。
4 创建对称密钥现在,通过以下 TransactSQL 语句生成对称密钥。
加速器网页版sqlUSE testdbGOCREATE SYMMETRIC KEY SSNKey WITH ALGORITHM = AES256 ENCRYPTION BY CERTIFICATE SSNCertGO
有关创建对称密钥的更多信息,请参见 创建对称密钥TransactSQL。
5 审查证书和对称密钥接下来,您可以使用以下 TransactSQL 语句查看证书和对称密钥。
sqlSELECT name CertName certificateid CertID pvtkeyencryptiontypedesc EncryptType issuername IssuerFROM syscertificates
SELECT name KeyName symmetrickeyid KeyID keylength KeyLength algorithmdesc KeyAlgorithmFROM syssymmetrickeys
6 添加新列 SSNENC 以启用列级加密现在,使用 TransactSQL 语句修改表,以添加一个新列 SSNENC。
sqlALTER TABLE patientinfoADD SSNENC varbinary(MAX)
sqlSELECT FROM patientinfo
7 将数据从未加密的列 SSN 移动到加密列 SSNENC通过以下步骤,使用新列 SSNENC 来存储来自列 SSN 的加密数据。
sql 打开用于加密数据的对称密钥。OPEN SYMMETRIC KEY SSNKey DECRYPTION BY CERTIFICATE SSNCert
使用对称密钥 SSNKey 加密列 SSN 中的值 并将结果保存到列 SSNENC 中。UPDATE patientinfo SET SSNENC = EncryptByKey (KeyGUID(SSNKey) SSN) FROM patientinfoGO
CLOSE SYMMETRIC KEY SSNKeyGO
8 解密并读取列数据最后,解密并尝试读取列数据,以验证未加密的 SSN、加密的 SSNENC 列和解密的 SSN 列。
sql 验证加密。 首先,打开用于解密数据的对称密钥。 OPEN SYMMETRIC KEY SSNKey DECRYPTION BY CERTIFICATE SSNCert
现在列出原始 SSN、加密的 SSNENC 列 和解密的密文。如果解密成功, 原始 SSN 和 SSNENC 将与解密后的数字匹配。 SELECT FirstName LastName SSN SSNENC AS Encrypted SSN CONVERT(varchar DecryptByKey(SSNENC)) AS Decrypted SSN FROM patientinfo
CLOSE SYMMETRIC KEY SSNKeyGO
将 TDE/CLE 加密数据库迁移到 RDS Custom
将启用 TDE/CLE 的数据库从本地或自管理环境迁移到 RDS Custom DB 实例时,您必须同时复制用于加密源数据库的证书文件的备份和私钥文件。复制证书和私钥文件到 RDS Custom DB 实例后,请执行以下操作:
在 RDS Custom DB 实例上创建数据库主密钥。将带有私钥的证书导入 RDS DB 实例。创建 RDS Custom 实例的手动 DB 快照。从源本地执行备份并还原到 RDS Custom DB 实例。如果您尚未创建 RDS Custom 实例的数据库主密钥,可以通过以下步骤创建它:
sqlUSE masterGOCREATE MASTER KEY ENCRYPTION BY PASSWORD = ltYourNewOROLDPasswordHeregtGO
从原服务器证书备份文件和私钥文件导入服务器证书,示例如下:
sqlCREATE CERTIFICATE MyRestoredRDSCustomCertFROM FILE = DrdsdbdataBackupSourceSQLServercertificatecer WITH PRIVATE KEY ( FILE = DrdsdbdataBackupSourceSQLServerprivatekeypvk DECRYPTION BY PASSWORD = YourStrongPasswordHere )
创建 RDS Custom 实例的手动 DB 快照。以下是使用 AWS CLI 创建 DB 快照的命令示例:
bashaws rds createdbsnapshot dbinstanceidentifier ltmyrdscustommssqlinstancegt dbsnapshotidentifier ltmyrdscustommssqlsnapshotgt
使用从源服务器复制的备份文件恢复数据库。如果您在未先恢复证书和私钥文件的