如何加密数据

- 传输加密

ALB

为您的 Application Load Balancer 创建 HTTPS 侦听器arrow-up-right

EC2

使用 SSH 连接到 Linux 实例arrow-up-right

Windows系统使用OpenSSH 连接到您的 Linux 实例arrow-up-right

如果您运行的是 Windows Server 2019 或更高版本,我们建议使用 OpenSSH,这是一款使用 SSH 协议进行远程登录的开源连接工具。

通过 Amazon PrivateLink 访问 Amazon Web Servicesarrow-up-right

EC2传输中加密arrow-up-right

在 Amazon Linux 2023 上配置 SSL/TLSarrow-up-right

在 Amazon Linux 2 上配置 SSL/TLSarrow-up-right

在Amazon Linux AMI 配置 SSL/TLSarrow-up-right

物理层加密/Amazon VPC 和 Transit Gateway 跨区域对等连接提供的加密/实例之间的加密/远程访问加密 的情况说明arrow-up-right

S3

Amazon S3 如何保护从服务到其他位置的连接。arrow-up-right

数据库

使用 SSL/TLS 加密与数据库实例的连接arrow-up-right

API接口

API接口采用 SigV4arrow-up-right 签名实现传输数据保密性验证;

其余需要保证传输过程中保密性的数据都可以使用Amazon KMSarrow-up-right做数据加密。

CloudFront

如何部署ACM证书到CloudFrontarrow-up-right

注意使用的限制条件,Requirements for using SSL/TLS certificates with CloudFrontarrow-up-right

Configuring alternate domain names and HTTPSarrow-up-right

Amazon ECS

实现客户端到ECS的传输加密:Maintaining Transport Layer Security All the Way to Your Container: Using the Network Load Balancer with Amazon ECSarrow-up-right

- 静态加密

S3静态加密

S3存储桶使用加密保护数据arrow-up-right

https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.htmlarrow-up-right

默认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 Keysarrow-up-right.

circle-info

注意

  • 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 permissionsarrow-up-right

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_consolearrow-up-right

https://repost.aws/knowledge-center/s3-bucket-store-kms-encrypted-objectsarrow-up-right

Amazon EBS加密

Amazon EBS 加密arrow-up-right

Amazon RDS加密

加密 Amazon RDS 资源arrow-up-right

[blog]Securing data in Amazon RDS using AWS KMS encryptionarrow-up-right

How can I encrypt an unencrypted Amazon RDS DB instance for MySQL or MariaDB with minimal downtime?arrow-up-right

其他资源加密

[workshop] Encryption at Rest Workshoparrow-up-right

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 keysarrow-up-right,让你在一个AWS区域加密数据,在另一个AWS区域解密。

关于如何使用AWS KMS keys可以参考此文档:AWS Key Management Service API Referencearrow-up-right.

参考资料

How can I secure the files in my Amazon S3 bucket?arrow-up-right

How to Use Bucket Policies and Apply Defense-in-Depth to Help Secure Your Amazon S3 Dataarrow-up-right

Architecting for database encryption on AWSarrow-up-right

最后更新于