AWS S3在上传和下载的时候,默认会使用TLS的方式进行加密和解密。这个具体是在哪里配置的呢?

最简单的方式是在S3里面,当我们创建一个新的Bucket的时候,我们可以在console上选择默认加密,如下面所示

AWS S3 设置 Bucket Policy 强制加密

默认可以选择SSE-S3或者SSE-KMS服务加密。后者安全性更高 不过会有一些额外费用。

AWS S3 设置 Bucket Policy 强制加密

如果在创建的时候没有进行选择,我们还可以通过设置Bucket Policy来进行加密。在AWS里面,所有的服务都是API,因此所有的设定都可以转换成头文件里面对应的参数。比如说,我们可以通过禁止头文件里面没有加密参数的请求进行上传操作。

具体操作如下

在对应的bucket里面, 进入Permission - Bucket Policy - 最下面选择 Policy Generator
AWS S3 设置 Bucket Policy 强制加密

基本设置

Type of Policy:S3 Bucket Policy
Effect:Deny
Principal:

AWS Service: Amazon S3
Actions: PutObject
ARN: arn:aws:s3:::XXXXXX
Condition:stringnotequals
key:s3-x-amz-server-side-encryption
value:aws:kms

AWS S3 设置 Bucket Policy 强制加密

生成器会自动生成下列配置文档 拷贝到对应的editor里面。 咦 居然报错!

AWS S3 设置 Bucket Policy 强制加密

解决方法很简单,需要在bucket后面添加一个通配符。这个应该是aws的一个bug
AWS S3 设置 Bucket Policy 强制加密

点击保存就行了。

现在来测试一下。

首先上传一个文件,选择不加密

AWS S3 设置 Bucket Policy 强制加密

结果失败

AWS S3 设置 Bucket Policy 强制加密

重新上传一次,这次选择 AWS KMS master-key

AWS S3 设置 Bucket Policy 强制加密

上传成功!

AWS S3 设置 Bucket Policy 强制加密