如何将Amazon EC2 Oracle透明数据加密数据库加密密钥库迁移到AWS CloudHSM
加密数据库对于保护敏感数据至关重要,有助于符合安全法规并防止数据丢失。Oracle透明数据加密(TDE)是一项功能,可用于加密Oracle数据库中的静态数据。TDE使用信封加密。信封加密是指用于加密数据库表的加密密钥由主密钥加密,该主密钥驻留在软件密钥库或硬件密钥库(如硬件安全模块(HSM))中。该主密钥设计为不可导出,以保护数据库操作的机密性和完整性。这为您提供了更细粒度的数据加密方案。因此,Oracle TDE是HSM设备(如AWS CloudHSM)的常见用例。
Oracle TDE支持密钥库安全存储TDE主加密密钥。您可以使用TDE钱包(软件密钥库)或外部密钥管理器(如HSM设备)。在本解决方案中,我们将展示如何将安装在Amazon Elastic Compute Cloud(Amazon EC2)上的Oracle 19c数据库的TDE密钥库从基于软件的TDE钱包迁移到AWS CloudHSM。
使用外部密钥管理器(如CloudHSM)相对于将密钥保留在主机上的Oracle钱包具有多个优势:
- 增强的安全性:CloudHSM提供FIPS 140验证的硬件安全,将加密密钥保存在防篡改模块中。
- 集中式密钥管理:CloudHSM支持集中管理加密密钥,使密钥轮换、备份和审计变得简单。
- 合规性:您的监管要求可能包括加密,使用CloudHSM可以帮助您满足这些合规需求。
当您从一种类型的密钥库迁移到另一种时,新密钥库中会创建新的TDE主密钥。为确保您可以访问依赖于过去加密密钥的备份,请考虑在正常恢复窗口期间保留密钥库运行,或将现有密钥以完全相同的密钥标签复制到新密钥库。能够访问先前的主密钥有助于避免数据重新加密。
您可以使用TDE在线或离线加密数据。在线加密TDE表空间可以最小化对数据库操作的中断;但是,它需要两倍于被加密表空间的存储空间,因为加密过程发生在原始表空间的副本上。
解决方案概述
在本解决方案中,您将使用图1所示的步骤将Oracle 19c数据库的TDE密钥库从基于软件的TDE钱包迁移到CloudHSM。首先,通过将原始HSM的PKCS#11提供程序替换为CloudHSM PKCS#11软件库(步骤1-2),将当前加密密钥库(即原始TDE钱包)移动到软件钱包。接下来,您反向迁移到本地钱包(步骤3-5)。第三步是将数据库的加密钱包切换到CloudHSM集群(步骤6和7)。此过程完成后,您的数据库将自动使用新的主密钥重新加密数据密钥。
图1:将EC2 Oracle TDE数据库加密钱包迁移到CloudHSM的步骤
注意:以下说明已使用Oracle 19c版本进行测试。
先决条件
您必须满足以下先决条件才能完成本文中的解决方案。
- AWS CloudHSM集群:您需要设置一个CloudHSM集群,并配置一个管理EC2实例用于与CloudHSM交互,遵循开始使用AWS CloudHSM中的步骤和最佳实践。
- Oracle数据库:确保您的Oracle数据库正在运行。本文假设您有一个在EC2 Linux实例上运行的Oracle Database 19c数据库,并且已按照为AWS CloudHSM配置客户端Amazon EC2实例安全组中的说明设置了到CloudHSM的网络连接。
将Oracle数据库密钥库迁移到CloudHSM外部密钥库
作为迁移的第一步,您需要将Oracle数据库密钥库迁移到CloudHSM外部密钥库。您可以通过安装CloudHSM客户端和PKCS#11库,然后配置PKCS#11库连接到HSM集群来实现。
安装CloudHSM客户端:
- 在您的EC2实例上安装最新的CloudHSM客户端软件。
- 配置客户端以连接到集群中的HSM。对于Linux EC2,使用以下命令:
1
sudo /opt/cloudhsm/bin/configure-cli -a <HSM的ENI IPv4 / IPv6地址>
- 将初始化集群时创建的CloudHSM颁发证书(customerCA.crt)复制到
/opt/cloudhsm/etc
文件夹。有关更多信息,请参阅AWS CloudHSM中的激活集群。 - 验证到CloudHSM集群的连接性:
1
/opt/cloudhsm/bin/cloudhsm-cli interactive
- 以管理员身份登录集群并创建一个加密用户(例如hsm-crypto-user),并为其分配crypto-user角色:
1 2
aws-cloudhsm > login --username hsm-crypto-user --role admin aws-cloudhsm > user create --username hsm-crypto-user --role crypto-user
- 以hsm-crypto-user身份登录并验证配置。
安装PKCS#11库
- 安装AWS CloudHSM Client SDK 5的PKCS #11库。
- 配置Oracle使用PKCS库:
- 将PKCS#11库复制到适当的Oracle文件夹。通常,这是:
1
cp /opt/cloudhsm/libcloudhsm_pkcs11.so /opt/oracle/extapi/[32,64]/hsm/aws/{VERSION}/libcloudhsm_pkcs11.so
- 确保
/opt/oracle
文件夹具有正确的所有权,通常是oracle:dba作为所有者:组。
- 将PKCS#11库复制到适当的Oracle文件夹。通常,这是:
配置PKCS#11库连接到HSM集群
使用以下命令:
|
|
配置Oracle钱包位置
在本节中,您将使用sqlnet.ora文件配置Oracle指向CloudHSM。
要配置Oracle钱包位置:
- 编辑sqlnet.ora参数
ENCRYPTION_WALLET_LOCATION
以指向HSM:1 2 3
ENCRYPTION_WALLET_LOCATION= (SOURCE=(METHOD=HSM) )
- 验证
WALLET_ROOT
参数是否指向当前基于文件的TDE钱包位置。此参数定义TDE钱包(和其他相关文件)的存储位置。您可以将其设置为现有目录, preferably one in your$ORACLE_BASE
or$ORACLE_HOME
directory, but other locations are also possible.1 2
show parameter wallet_root show parameter tde_configuration
- 如果尚未设置
WALLET_ROOT
,使用以下命令设置:1 2
ALTER SYSTEM SET WALLET_ROOT = '/u01/app/oracle/admin/orcl/wallet' SCOPE=BOTH SID='*'; ALTER SYSTEM SET TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=FILE" SCOPE=BOTH SID="*"
注意:
- 在Oracle Database 19c及更高版本中,sqlnet.ora中的
ENCRYPTION_WALLET_LOCATION
参数已弃用,转而使用WALLET_ROOT
和TDE_CONFIGURATION
。- 您还可以使用
V$ENCRYPTION_WALLET
视图检查当前密钥库位置和状态。
将Oracle数据库指向使用本地基于文件的密钥库和CloudHSM
TDE_CONFIGURATION
中的KEYSTORE_CONFIGURATION
属性决定了密钥库类型。
要将Oracle数据库指向:
- 使用以下代码将数据库指向本地密钥库和CloudHSM:
1
ALTER SYSTEM SET TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=HSM|FILE" SCOPE = BOTH SID = '*';
- 重新启动数据库以获得一致的结果。
验证基于文件的密钥库钱包是否打开
要继续进行加密密钥迁移,您需要检查当前密钥库状态并确保基于文件的钱包已打开。
要验证钱包是否打开:
- 检查基于文件的钱包是否打开:
图2:验证钱包状态为OPEN
1
Select * from V$encryption_wallet;
- 如果钱包状态不是OPEN,使用以下命令打开它:
1
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "wallet_password";
将加密密钥迁移到CloudHSM
使用ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY
命令启动TDE主加密密钥迁移。
要迁移加密密钥:
使用以下命令迁移加密密钥:
|
|
用于迁移加密密钥的参数是:
SET ENCRYPTION KEY
:指定该命令与TDE主加密密钥相关IDENTIFIED BY
:指定迁移密钥库的详细信息,包括外部密钥库用户和密码MIGRATE USING
:指定包含主加密密钥的基于文件的钱包的密码WITH BACKUP
:在迁移前创建密钥库的备份
验证迁移是否完成
此时,从Oracle到Cloud HSM的迁移应该已完成。使用以下步骤进行验证。
要验证迁移:
- 再次检查钱包状态。如果迁移成功,
WALLET_TYPE
将为HSM,WALLET_OR
将为PRIMARY。图3:验证WALLET_TYPE和WALLET_OR是否正确1
Select * from V$encryption_wallet;
- 如果钱包未打开,使用:
1
SQL>administer key management set keystore open identified by "hsm-crypto-user:password"
- 验证数据库是否可以无问题地访问加密数据,确认迁移成功。
设置自动登录
创建自动登录以在数据库重新启动期间打开钱包连接到AWS CloudHSM。
要设置自动登录:
- 创建一个新的基于文件的密钥库,使用与CloudHSM加密用户相同的用户名和密码:
1
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/etc/oracle/wallets/<path>/tde' IDENTIFIED BY "hsm-crypto-user:password";
- 将CloudHSM加密用户密码添加到密钥库(TDE钱包):
1
ADMINISTER KEY MANAGEMENT ADD SECRET 'hsm-crypto-user:password' FOR CLIENT 'HSM_PASSWORD' TO KEYSTORE '/etc/oracle/wallets/<path>/tde' IDENTIFIED BY "hsm-crypto-user:password" WITH BACKUP;
- 以下命令创建一个新的自动登录密钥库。这对于需要无需人工干预即可访问密钥库的场景非常有用:
1
ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/etc/oracle/wallets/<path>/tde' IDENTIFIED BY "<hsm-crypto-user:password>";
- 打开新创建的基于文件的密钥库:
1
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "<hsm-crypto-user:password>"
密钥轮换
密钥轮换通过提供多种数据安全优势,帮助您遵守安全最佳实践。定期轮换TDE密钥减少了可能获得密钥的不良行为者的机会窗口,从而最小化潜在泄露的影响。
许多已建立的安全框架和合规标准(如PCI DSS和HIPAA)建议或要求定期轮换密钥以维护加密数据的完整性和机密性。通过确保密钥不会无限期使用,您可以帮助减少暴露或泄露的风险,从而增强整体安全性。
由于计算能力的进步或新发现的漏洞,加密算法可能会随着时间的推移变得不那么安全。通过定期轮换密钥,您可以根据需要过渡到更强的加密方法,从而提高对新兴风险的防护。
何时轮换TDE密钥
密钥轮换的频率取决于多个因素,包括组织策略、监管要求和受保护数据的敏感性。以下是一些常见做法:
- 每年:许多组织每年轮换一次TDE密钥,以符合常见的合规要求。
- 每季度:对于更高安全性的环境或更敏感的数据,每季度轮换密钥可以提供额外的安全层。
- 如果密钥被泄露或怀疑被泄露:如果您认为密钥被泄露,建议尽快轮换该密钥以减少影响窗口。
使用HSM密钥进行Oracle TDE主密钥轮换
在本节中,您选择一个32位十六进制值作为生成密钥时使用的前缀,然后使用该密钥更新Oracle数据库以使用新的主密钥。
- 以具有
ADMINISTER KEY MANAGEMENT
或SYSKM
权限的用户身份登录数据库实例,并执行以下命令:1
ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY IDENTIFIED BY "<hsm-crypto-user:password>"
- 决定要使用的32位十六进制值模式。我们在本示例中使用了
15A5142C9E2D3C2F18FD435814257DFD
。 - 将前缀
ORACLE.TDE.HSM.MK
添加到十六进制模式:1
ORACLE.TDE.HSM.MK.0615A5142C9E2D3C2F18FD435814257DFD
- 登录CloudHSM并使用上一步生成的标签生成密钥:
1
key generate-symmetric aes --label 'ORACLE.TDE.HSM.MK.0615A5142C9E2D3C2F18FD435814257DFD' --key-length-bytes 32 —attributes encrypt=true decrypt=true
- 如果原始密钥是通过另一个用户生成的,请与Oracle hsm-crypto-user共享该密钥:
1
key share --filter attr.label="ORACLE.TDE.HSM.MK.0615A5142C9E2D3C2F18FD435814257DFD" attr.class=secret-key --username hsm_crypto_user --role crypto-user
- 更新Oracle数据库以使用新的主TDE密钥:
1
ADMINISTER KEY MANAGEMENT USE KEY '0615A5142C9E2D3C2F18FD435814257DFD' FORCE KEYSTORE IDENTIFIED BY "hsm-crypto-user:password"
通过遵循这些指南,您可以增强加密数据的安全性,符合监管要求,并维护强大的密钥管理实践。
结论
在本文中,我们向您展示了透明数据加密(TDE)的重要性以及使用外部密钥管理器(如AWS CloudHSM)存储TDE加密密钥的好处。我们讨论了TDE相对于加密底层存储的优势,以及为什么使用外部密钥管理器优于将密钥保留在主机上的Oracle钱包。遵循这些指南可以帮助您增强加密数据的安全性,符合监管要求,并维护强大的密钥管理实践。
本文的关键要点是:
- TDE提供细粒度加密、合规性优势和强大的密钥管理。
- 外部密钥管理器提供增强的安全性、集中管理、改进的可审计性和可扩展性。
- 定期轮换TDE密钥对于维护安全、符合法规和遵循密钥管理中的推荐实践至关重要。
要开始使用TDE和AWS CloudHSM保护您的Oracle数据库,请访问AWS管理控制台。遵循本指南中概述的步骤将您的TDE加密密钥库迁移到AWS CloudHSM,并开始定期轮换密钥以增强数据安全态势。通过采取这些行动,您可以确保您的敏感数据受到保护,您的组织符合法规,并且您遵循数据加密和密钥管理的最佳实践。
有关更多信息,请参阅: