如何使我的S3存储桶中的所有URL无法进行公开浏览?

时间:2016-04-07 18:12:50

标签: amazon-web-services amazon-s3

我在RHEL服务器上运行了一个聊天应用程序,它将用户之间交换的文件上传到S3存储桶。如何将对这些文件的访问限制为仅使用该应用程序的用户,但同时也允许使用该服务器的SSH终端和该服务器上的代码的任何人获取这些文件?

我意识到我可以限制对特定HTTP引荐者或IP地址的访问,如documentation所示。但是,这会限制应用程序服务器或应用程序用户的访问。有没有办法可以将这两种政策结合起来?

所以最重要的是,除了使用应用程序的用户和托管应用程序的服务器在S3上访问这些文件之外,我不希望任何人。 谢谢!

1 个答案:

答案 0 :(得分:0)

我明白了。如果有人遇到类似的问题,这就是存储桶政策 -

{
    "Version": "2012-10-17",
    "Id": "RestrictAccessPolicy",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::examplebucketname/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "52.12.34.56"
                }
            }
        },
        {
            "Sid": "Allow get requests referred by referrer",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::examplebucketname/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": "http://yourwebsite.com/*"
                }
            }
        },
        {
            "Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::examplebucketname/*",
            "Condition": {
                "StringNotLike": {
                    "aws:Referer": "http://yourwebsite.com/*"
                }
            }
        }
    ]
}