我有一个 S3 存储桶,SES 在其中存储电子邮件。我想通过 S3 存储桶策略确保存储的对象已加密。
此处描述的方法不起作用。上传的对象似乎没有设置s3:x-amz-server-side-encryption
未设置,SES中也启用了加密。
还有其他标签,例如x-amz-meta-x-amz-matdesc
包含 KMS 密钥 ID。所以我尝试了:
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::MY_BUCKET/*",
"Condition": {
"StringNotLike": {
"x-amz-meta-x-amz-matdesc": "kms_cmk_id*"
}
}
但这项政策不被接受。
这是可用于确保数据加密的策略。以下政策仅在您的电子邮件加密时有效。查看本指南,了解如何在 SES 中加密电子邮件。
http://docs.aws.amazon.com/kms/latest/developerguide/services-ses.html#services-ses-overview
{
"Version":"2012-10-17",
"Id":"PutObjPolicy",
"Statement":[{
"Sid":"DenyUnEncryptedObjectUploads",
"Effect":"Deny",
"Principal":"*",
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::YourBucket/*",
"Condition":{
"StringNotEquals":{
"s3:x-amz-server-side-encryption":"aws:kms"
}
}
}
]
}
查看此博客文章。 加密 SES 消息不会设置 s3:x-amz-server-side-encryption。例如,如果您将加密客户端的密码文本发送到 s3,则不会设置 s3:x-amz-服务器端加密标头。由于未设置标头,因此无法上传 SES 消息,即使消息已加密也是如此。当然,设置此选项将加密密文。 不确定您要实现的目标,但您可以将纯文本 SES 消息发送到 s3 并依靠 s3 对其进行加密,这将在下面的策略中设置 http 标头。
上传到s3时需要设置加密策略,我认为这就是问题所在。
https://blogs.aws.amazon.com/security/post/Tx2R0GFOXFYEDM5/How-to-Prevent-Uploads-of-Unencrypted-Objects-to-Amazon-S3
{
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [
{
"Sid": "DenyIncorrectEncryptionHeader",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::<bucket_name>/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
},
{
"Sid": "DenyUnEncryptedObjectUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::<bucket_name>/*",
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption": true
}
}
}
]
}