use*_*955 1 amazon-s3 amazon-web-services
我创建了一个 AWS S3 存储桶,并在属性中启用了“默认加密”。那么我是否还需要创建类似于下面的存储桶策略?
注意我只是想让s3以一般的方式加密,没有非常特殊的要求。
"Statement": [
{
"Sid": "DenyIncorrectEncryptionHeader",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::s3_bucket_name/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
},
{
"Sid": "DenyUnEncryptedObjectUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::s3_bucket_name/*",
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption": "true"
}
}
}
]
Run Code Online (Sandbox Code Playgroud)
为了测试这一点,我创建了一个存储桶并激活了默认加密。
当我尝试通过管理控制台上传文件时,它说:
如果此存储桶设置为默认加密,S3 将根据存储桶设置加密对象。

我上传的文件确实被加密了。
然后我通过 AWS CLI 上传了一个文件:
aws s3 cp foo s3://my-bucket/
Run Code Online (Sandbox Code Playgroud)
上传的文件已加密。
但请注意,该设置称为“默认加密”。这意味着,除非另有说明,否则对象将被加密。然而,它不强制加密,因此如果用户专门选择了不同类型的加密(例如MKS而不是AES256),他们将被允许这样做。(我看不出他们可以专门请求“不加密”的方法。)
这就是您的策略(上面)发挥作用的地方。它们可以强制执行特定形式的加密。如果不满足这些要求,则会PutObject被拒绝。
然后,我采用了如何防止将未加密对象上传到 Amazon S3 | 中的加密策略。AWS安全博客(似乎与您使用的相匹配)并将它们放入Bucket Policy中。
然后我尝试从管理控制台上传,但失败了!仅当我专门选择“Amazon S3 主密钥”作为加密选项时,它才有效。因此,“默认加密”选项与策略不兼容。
我还尝试使用“AWS KMS 主密钥”作为加密选项进行上传,但再次失败,因为这与策略不匹配(专门检查 AES256,而不是 KMS 加密)。
底线:使用默认加密将导致对象以某种方式加密。这些策略可以强制实施特定类型的加密。