亚马逊AWS官方博客
AWS 数据纵深防御篇 – 如何配置 Aurora 整合 KMS 的静态加密
数据安全和隐私保护是云计算领域的重要课题,AWS将安全视为最高优先级,为客户提供了安全、坚固、完善的基础设施和云服务产品。这些设施和产品紧密整合,为客户提供了不同等级和场景的安全架构方案,使客户能够做到主动防御。
数据加密是数据保护的主要手段之一,AWS Key Management Service (KMS) 能够帮助客户集中管理数据的加密密钥,您可以轻松创建新密钥,并控制它的使用和管理权限策略。AWS KMS的功能特性有,
- 持久性:密钥的多个加密副本存储在设计为 99.999999999% 高持久性的系统中
- 高可用性:各个区域中跨多个可用区的高可用冗余架构
- 按需可扩展性:可以根据需要创建和管理任意数量的主密钥,还可以请求不限数量的数据密钥供本地应用程序使用
- 密钥自动轮换:可以选择让 AWS KMS 每年自动轮换一次主密钥,同时无须对已加密的数据重新加密
利用 AWS KMS 和它提供的API,客户可以通过客户端加密方法,对数据进行完全的加密解密管理。除此以外,AWS KMS 还与 Amazon S3、Amazon DynamoDB 和 Amazon Aurora 等AWS服务无缝集成,实现服务端加密。AWS KMS 支持 CloudTrail,您可审核密钥使用情况以验证密钥是否使用得当。
中国区KMS依据本地法律法规和管理条例设计实现,相关法规和条例如下,
- 《信息安全等级保护管理办法》
- 《信息系统密码应用基本要求》
- 《信息安全等级保护商用密码管理办法》
- 《商用密码管理条例》
- 《中华人民共和国网络安全法》
- 《中华人民共和国密码法(草案征求意见稿)》
AWS KMS 的严密设计使得任何人都无法从服务中检索获取主密钥明文,包括AWS服务运营商。中国区KMS服务使用密码主管部门认证的密码机,保护主密钥的机密性和完整性。
一、场景
作为数据库安全机制的主要组成部分,对数据库中静态数据的加密是数据库产品必备的功能,也是数据保护法规要求的必要条件之一。AWS的数据库产品可以与KMS无缝整合,帮助客户实现数据库静态加密的能力。
AWS KMS 提供安全、高可用的密钥管理能力。您将把AWS KMS 与 Amazon Aurora 结合,使用KMS的主密钥来对 Aurora 数据库集群中的数据进行自动加密。
本文将着重介绍利用 AWS KMS 对 Amazon Aurora 进行服务器端静态加密。Amazon Aurora 数据库的静态加密是指,对数据库集群的基础存储、自动化备份、只读副本和快照的加密,以确保AWS客户的数据不被非法访问或窃取。
二、推荐架构
AWS KMS 基本概念
客户主密钥 (CMK)
客户主密钥是 AWS KMS 中的主要资源,包含用于加密和解密数据的密钥材料,CMK 在 AWS KMS 中创建并且永远保持加密状态。您可以使用 AWS 管理控制台或 AWS KMS API 管理您的 CMK;要在加密操作中使用 CMK,您必须使用 AWS KMS API。默认情况下,AWS KMS 为 CMK 创建密钥材料,您无法提取、导出、查看或管理此密钥材料。以下是CMK的三种类型,
CMK 的类型 | 可以查看 CMK 元数据 | 可以管理 CMK | 仅适用于我的 AWS 账户 |
客户托管 CMK | 是 | 是 | 是 |
AWS 托管 CMK | 是 | 否 | 是 |
AWS 拥有的 CMK | 否 | 否 | 否 |
某些 AWS 服务使用 AWS 拥有的 CMK 或 AWS 托管的 CMK 来加密您的数据,某些 AWS 服务可以根据您选择的客户托管的 CMK 加密您的数据,还有一些其他 AWS 服务支持所有类型的 CMK。
可以选择让 AWS KMS 每年自动轮换一次主密钥,密钥轮换后,KMS 会自动保存旧版本的密钥材料,方便您解密以前加密的数据,但旧密钥不会再用来加密新数据。
数据密钥(Data Key)
数据密钥是用于加密数据的密钥,AWS KMS 使用客户指定的 CMK 来生成数据密钥。您可以使用特定的 CMK 生成、加密和解密数据密钥。创建数据密钥时,要调用 GenerateDataKey、GenerateDataKeyWithoutPlaintext API。AWS KMS 不会存储、管理或跟踪您的数据密钥,您必须在 AWS KMS 的外部使用它们。
Amazon Aurora 与 AWS KMS 的集成
Amazon Aurora 与 AWS KMS 原生深度集成,数据加密解密过程对应用透明无感知。Amazon Aurora 加密的数据库集群使用行业标准 AES-256 加密算法来对托管 Amazon Aurora 数据库集群的服务器上的数据进行加密。用来进行数据加密的数据密钥被 CMK 加密并以密文的形式存放在 Amazon Aurora 数据库系统里。在加密数据后,Amazon Aurora 将以透明方式处理访问的身份验证和数据的解密,并且将最小化对性能产生的影响。您无需修改数据库客户端应用程序来使用加密。
在新建 Amazon Aurora 数据库集群时,通过启用加密选项,并创建(或选定一个)CMK作为主密钥,您可以对 Amazon Aurora 数据库集群进行静态加密。对于启用了加密的数据库集群,所有日志、备份和快照均会被加密。您还可以对已加密的 Amazon Aurora 数据库集群的只读副本进行加密。只读副本的加密受 AWS 区域的 KMS 主密钥保护。
数据库在服务过程中,通过存储卷密钥为读写操作进行加解密,数据的静态存储将保持加密状态;AWS KMS 凭借托管的 CMK 为存储卷密钥(Volume key)提供解密服务。
数据库在创建快照过程中,通过存储卷密钥为读操作进行解密,通过数据密钥为写操作进行加密,数据的静态存储将保持加密状态;AWS KMS 凭借托管的 CMK 为存储卷密钥(Volume key)提供解密服务,为数据密钥(Data key)提供解密服务。
您可以使用 AWS KMS 管理用于 Amazon Aurora 加密数据库集群的 CMK 主密钥。如果删除或禁用CMK密钥,会导致与之关联的数据库集群不可用。
三、加密方式
密钥管理
中国区 AWS KMS 目前提供了以下两种客户主密钥(CMK),您可以创建新的客户管理的密钥,
- AWS 托管密钥
- 客户管理的密钥
在创建加密的数据库集群时,您可以指定 AWS KMS 密钥标识符。如果您没有指定 AWS KMS 密钥标识符,则 Amazon Aurora 将使用默认加密密钥。AWS KMS 将为您的 AWS 账户创建 Amazon Aurora 的默认加密密钥,您在每个 AWS 区域都有一个不同的默认加密密钥。您的 AWS KMS 主密钥不会在创建它们的 AWS 区域之外传输,并且只能在该区域内使用。
加密算法
中国区 AWS KMS 采用了国密算法,即国家密码局认证的国产密码算法,亦称商用密码(商密)。国密算法是国家密码局制定标准的一系列算法,其中包括了对称加密算法、椭圆曲线非对称加密算法、杂凑算法等等。详情如下,
- SM2:公钥算法,加密强度为256位;功能类似于RSA或ECC。
- SM3:杂凑算法,杂凑值长度为32字节;功能类似于SHA-256。
- SM4:对称加密算法,可使用软件实现,加密强度为128位;功能类似于AES。
中国区 AWS KMS 内部使用SM算法来保护和管理密钥。数据密钥同时支持AES和SM4,用户在请求产生数据密钥的时候,可以自主选择AES-128、AES-256或者16比特。
四、步骤
为 Amazon Aurora 数据库集群启用加密
创建新的 Amazon Aurora 数据库集群时,请在控制台上选择 Enable encryption (启用加密),在主密钥下拉菜单中选取一个合适的客户主密钥(CMK),该主密钥将用于保护用来加密此数据库卷的密钥。
选择 Amazon KMS 客户主密钥(CMK)
创建 Amazon Aurora 数据库集群时,可使用另一个账户中的密钥的 ARN 来加密数据库集群。您也可以使用拥有用于加密新数据库集群的 KMS 加密密钥的同一 AWS 账户创建数据库集群。在此情况下,您传递的 KMS 密钥 ID 可能是 KMS 密钥别名而不是密钥的 ARN。
创建加密的数据库集群后,您无法更改该数据库集群使用的加密密钥的类型。因此,请确保先确定您的加密密钥要求,然后再创建加密的数据库集群。
五、总结和成本
客户主密钥(CMK)的要点
- 中国区CMK目前只能在加密机里产生,暂时不支持外部密钥导入和自定义密钥库 (CloudHSM)
- CMK会被加密后以密文的形式存放在 AWS KMS 里,无法提取、导出、查看或管理此密钥材料
- 在使用时,CMK的明文只会出现在加密机的内存里
中国区 AWS KMS 与其他区域区别
- 服务集成 – 在非中国区域,KMS与50多个AWS服务集成,主要用于支持存储在这些服务中的数据的加密。 中国区域的KMS当前支持8种AWS服务的集成,他们是S3、CloudTrail、EBS、RDS、Aurora、Redshift,DynamoDB 和 CloudFormation,其他服务的集成将陆续得到支持。
- 导入密钥 – KMS客户主密钥(CMK)只能在加密机中生成,不能由客户生成并导入KMS。 因此AWS中国的两个区域的KMS不支持以下API:GetParametersForImport、ImportKeyMaterial和DeleteImportedKeyMaterial。
- 自定义密钥库 – CloudHSM服务尚未在中国的两个区域部署,无法提供自定义密钥库功能。 因此不支持以下API:CreateCustomKeyStore、DeleteCustomKeyStore、ConnectCustomKeyStore、DisconnectCustomKeyStore、DescribeCustomKeyStores和UpdateCustomKeyStore。
中国区 AWS KMS 收费模式
收费项目
- 密钥存储 – AWS KMS 每个客户主密钥 (CMK) 的成本为 ¥6.88/月;如果自动轮换 CMK,每个新轮换的版本将增加CMK ¥6.88/月的成本。
- 密钥使用 – AWS KMS 的每个 API 请求的成本为 ¥0.20/每 10000 个请求。
不收费项目
- 创建和存储 AWS 管理的 CMK,它们是当您首次尝试在另一个 AWS 服务中加密数据时代表您自动创建的。
- 计划删除的 CMK,如果您在等待期内取消删除,则该 CMK 将按照未计划删除的情况进行收费。
- 数据秘钥,由 GenerateDataKey 和 GenerateDataKeyWithoutPlaintext API 请求创建。无论是由您提出还是由集成的 AWS 服务代表您提出这些 API 请求,您都需要按照前面介绍的价格为 API 请求付费。您不需要按月为数据密钥本身付费,因为它们既不由 KMS 存储,也不由 KMS 管理。
Amazon Aurora 加密的可用性
- Amazon Aurora 加密当前可用于所有数据库引擎和存储类型。
- Amazon Aurora 加密目前在 中国(北京) 区域不可用。
- Amazon Aurora 加密不适用于 db.t2.micro 数据库实例类。