亚马逊S3服务器端加密存储桶策略问题

4

我正在使用一个桶策略,拒绝任何非SSL通信和未加密的对象上传。

{
    "Id": "Policy1361300844915",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyUnSecureCommunications",
            "Action": "s3:*",
            "Effect": "Deny",
            "Resource": "arn:aws:s3:::my-bucket",
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": false
                }
            },
            "Principal": {
                "AWS": "*"
            }
        },
        {
            "Sid": "DenyUnEncryptedObjectUploads",
            "Action": "s3:PutObject",
            "Effect": "Deny",
            "Resource": "arn:aws:s3:::my-bucket/*",
            "Condition": {
                "StringNotEquals": {
                    "s3:x-amz-server-side-encryption": "AES256"
                }
            },
            "Principal": {
                "AWS": "*"
            }
        }
    ]
}

该策略适用于支持SSL和SSE设置的应用程序,但仅适用于正在上传的对象。

我遇到了以下问题:

  1. CloudBerry Explorer和S3浏览器在具有Bucket Policy的存储桶中进行文件夹和文件的重命名时失败。在我仅在存储桶策略中应用SSL要求后,这些浏览器成功地完成了文件/文件夹重命名。

只有在启用选项-通过本地计算机进行Amazon S3复制/移动(速度较慢且需要花费一定费用)之后,CloudBerry Explorer才能使用完整的SSL/SSE存储桶策略重命名对象。

由于该限制性策略,Amazon S3内部的所有复制/移动都失败了。

这意味着我们无法控制不起源于操作本地对象的应用程序的复制/移动过程。至少上述提到的CloudBerry选项证明了这一点。

但我可能是错的,这就是为什么我发布这个问题。

  1. 在我的情况下,启用了该Bucket Policy后,S3管理控制台变得无用。用户无法创建、删除文件夹,他们只能上传文件。

我的Bucket Policy是否有问题?我不知道Amazon S3用于对象操作的机制。

Amazon S3是否以不同方式处理外部请求(API / http标头)和内部请求?

是否可以仅将此策略应用于上传而不是内部Amazon S3 GET / PUT等操作?我已尝试使用存储桶URL的http referer但无济于事。

带有SSL / SSE要求的Bucket Policy对我的实现是强制性的。

任何想法都将不胜感激。

非常感谢。

1个回答

1

在我看来,无法自动告诉Amazon S3为每个PUT请求打开SSE。

所以,我将调查以下内容:

  • 编写列出存储桶的脚本

  • 对于每个对象,获取元数据

  • 如果未启用SSE,则使用PUT COPY API (http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)添加SSE "(...) 在复制对象时,可以保留大部分元数据(默认)或指定新元数据(...)"

  • 如果PUT操作成功,则使用DELETE对象API删除原始对象

然后根据您的业务要求每小时或每天运行该脚本。 您可以使用Python中的S3 API(http://boto.readthedocs.org/en/latest/ref/s3.html)更轻松地编写脚本。

如果这种“写后更改”的解决方案在商业上不可行,则可以在不同级别上工作。

  • 使用代理在您的API客户端和S3 API之间(例如在您的站点上反向代理),并将其配置为为每个PUT / POST请求添加SSE HTTP标头。 开发人员必须通过代理进行操作,而不被授权对S3 API端点发出请求。

  • 编写一个包装库以自动添加SSE元数据,并强制开发人员在SDK之上使用您的库。

今天晚些时候是组织纪律问题,因为在技术层面上很难强制执行它们。

Seb


2
此回复并未解答问题。 - YWCA Hello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接