如何加密数据
- 传输加密
ALB
为您的 Application Load Balancer 创建 HTTPS 侦听器
EC2
Windows系统使用OpenSSH 连接到您的 Linux 实例
如果您运行的是 Windows Server 2019 或更高版本,我们建议使用 OpenSSH,这是一款使用 SSH 协议进行远程登录的开源连接工具。
通过 Amazon PrivateLink 访问 Amazon Web Services
在 Amazon Linux 2023 上配置 SSL/TLS;
物理层加密/Amazon VPC 和 Transit Gateway 跨区域对等连接提供的加密/实例之间的加密/远程访问加密 的情况说明
S3
数据库
API接口
API接口采用 SigV4 签名实现传输数据保密性验证;
其余需要保证传输过程中保密性的数据都可以使用Amazon KMS做数据加密。
CloudFront
注意使用的限制条件,Requirements for using SSL/TLS certificates with CloudFront
Configuring alternate domain names and HTTPS
Amazon ECS
实现客户端到ECS的传输加密:Maintaining Transport Layer Security All the Way to Your Container: Using the Network Load Balancer with Amazon ECS
- 静态加密
S3静态加密
S3存储桶使用加密保护数据;
https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html
默认S3里的文件会通过SSE-S3进行加密,也可以使用AWS Key Management Service (AWS KMS) keys (SSE-KMS)替代SSE-S3进行加密。
以下是三种可选的加密方式:
Amazon S3-Managed Keys (SSE-S3)
默认的情况下,亚马逊S3对新上传的对象自动启用使用亚马逊S3管理的密钥(SSE-S3)的服务器端加密。不需要额外的权限,跟没有做加密时使用是一样的。
AWS KMS-Managed Keys (SSE-KMS)
你可以使用AWS Key Management Service (AWS KMS) keys (SSE-KMS)替代SSE-S3进行加密。此时获取S3的对象必须要有KMS的解密权限,否则会拒绝访问。
如果你没有指定的customer managed key客户管理密钥,Amazon S3会自动创建一个,之后会默认使用这么密钥完成加密。你也可以在SSE-KMS中使用创建一个客户管理的钥匙。这样,你能有更多的灵活性和控制。例如,你可以创建、轮换和禁用客户管理钥匙。你也可以定义访问控制和审计这个客户管理密钥。
Amazon S3 Bucket Keys
你可以配置S3 Bucket Keys for SSE-KMS来加密你的S3存储桶,使用桶级别的密钥可以节省成本最高达99%。参见 Reducing the cost of SSE-KMS with Amazon S3 Bucket Keys.
注意
Amazon S3 只支持对称加密KMS密钥。
当你使用 SSE-KMS 加密S3 存储桶时,这个AWS KMS keys 必须和桶在同一个区域。
要上传用AWS KMS密钥加密的对象到Amazon S3,你需要密钥的
kms:GenerateDataKey
的权限。要下载一个用AWS KMS密钥加密的对象,你需要kms:Decrypt
权限。有关多部分上传所需的AWS KMS权限的信息,请参阅Multipart upload API and permissions。
Server-side encryption with customer-provided keys (SSE-C)
在这种加密方案中,你在上传对象时提供加密密钥,AWS承诺立即忘记它。因此,当你检索对象时,你需要发送相同的密钥。
这改变了上传对象的命令。除了桶和密钥外,你还需要定义算法、密钥和密钥的MD5。假设你使用gL6RsUG2fPElqDyMghs1yCrRJMJFLgR9MN
密钥进行加密的请求实例:
配置完成以后,你再获取对象的时候需要加密密钥。如果你不这样做,S3服务会报告一个错误:
An error occurred (InvalidRequest) when calling the GetObject operation: The object was stored using a form of Server Side Encryption. The correct parameters must be provided to retrieve the object.
正确的获取方式如下:
Client-side encryption with an AWS KMS-managed CMK
确保上传的文件都经过了加密
如果制定了规范,用于存储敏感数据的Amazon S3桶中的所有对象进行服务器端加密,可以使用桶策略。例如,如果请求没有x-amz-server-side-encryption头,也就是要求用SSE-KMS进行服务器端加密。下面的桶策略Bucket policy将拒绝每个人的上传对象(s3:PutObject)的权限,
当你上传一个对象时,你可以通过使用x-amz-server-side-encryption-aws-kms-key-id
头来指定KMS密钥。这样如果上传文件的时候没有使用SSE-KMS的方式加密,Amazon S3将拒绝该请求。其中 "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*",替换成你需要管理的S3存储桶。
你还可以通过使用加密密钥的Amazon Resource Name (ARN) 比如 arn:aws:kms:region:acct-id:key/key-id
来指定用于加密的密钥必须是哪一个。其中 "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*",替换成你需要管理的S3存储桶。加密密钥的ARN也注意需要进行替换。
更多的存储桶管理策略样例参见:https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html?icmpid=docs_amazons3_console
https://repost.aws/knowledge-center/s3-bucket-store-kms-encrypted-objects
Amazon EBS加密
Amazon RDS加密
[blog]Securing data in Amazon RDS using AWS KMS encryption
How can I encrypt an unencrypted Amazon RDS DB instance for MySQL or MariaDB with minimal downtime?
其他资源加密
[workshop] Encryption at Rest Workshop
This workshop aims to prepare you for working with KMS and CloudHSM with hands-on capabilities. Go through each section within your own AWS accounts, and use the newly deployed EC2 instance as a disposable environment.
- 加密密钥选择
AWS KMS keys
AWS KMS keys (KMS keys)是AWS托管的加密密钥,你可以用加密密钥完成对数据的加密和解密操作。
对称KMS密钥的密钥材料和非对称KMS密钥的私钥永远不会离开AWS KMS,因此你不能提取、导出、查看或管理KMS keys的私钥。如果需要完全自定义管理密钥,则可以考虑CloudHSM这个产品。你可以将你自己的密钥材料导入KMS key,或使用自定义密钥存储来创建KMS密钥,这些密钥使用你的AWS CloudHSM集群中的密钥材料,或你在AWS之外拥有和管理的外部密钥管理器中的密钥材料。
AWS KMS还支持多区域密钥 multi-Region keys,让你在一个AWS区域加密数据,在另一个AWS区域解密。
关于如何使用AWS KMS keys可以参考此文档:AWS Key Management Service API Reference.
参考资料
How can I secure the files in my Amazon S3 bucket?
How to Use Bucket Policies and Apply Defense-in-Depth to Help Secure Your Amazon S3 Data
最后更新于