按客户端代码划分的 Amazon S3 权限



我一直在将现有应用程序转换为 AWS 中的 EC2、S3 和 RDS 模型,到目前为止进展顺利,但我遇到了一个问题,我似乎找不到任何信息。

我的 Web 应用程序访问图像和文档的 S3 框,存储方式是通过客户端代码,

Data/ClientCode1/Images  
Data/ClientCode2/Images  
Data/ClientABC/Images -- etc  

托管 Web 应用程序的 EC2 也在类似的结构中工作,因此www.programname.com/ClientCode1/Index.aspx例如,它具有防止跨客户端访问的工作安全性。

现在,当www.programname.com/ClientCode1/Index.aspx访问 S3 以获取图像时,我需要确保它只能访问 S3 上的 ClientCode1 文件夹,目标是防止客户端 A 看到客户端 B 的图像/文档如果您有技术排序尝试。

没有办法获得页面引用,或者有更好的方法来解决这个问题?

无法使用

URL 或引荐来源网址来控制对 Amazon S3 的访问,因为该信息会呈现给您的应用程序(而不是 S3(。

如果您的所有用户都通过同一应用程序访问 Amazon S3 中的数据,则您的应用程序的工作就是实施任何所需的安全性。这是因为应用程序将使用一组凭证来访问 AWS 服务,因此这些凭证将需要访问应用程序可能请求的所有数据。

澄清一下:Amazon S3 不知道用户正在查看哪个页面。只有您的应用程序知道这一点。因此,应用程序需要强制实施安全性。

我找到了解决方案,似乎运行良好

{
   "Version": "2012-10-17",
   "Id": "http referer policy example",
   "Statement": [
     {
       "Sid": "Allow get requests referred by www.example.com and example.com.",
       "Effect": "Allow",
       "Principal": "*",
       "Action": "s3:GetObject",
       "Resource": "arn:aws:s3:::clientdata/Clients/Client1/*",
       "Condition": {
         "StringLike": {"aws:Referer": ["http://www.example.com/Client1/*","http://example.com/Client1/*"]}
       }
     },
      {
        "Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::clientdata/Clients/Client1/*",
        "Condition": {
          "StringNotLike": {"aws:Referer": ["http://www.example.com/Client1/*","http://example.com/Client1/*"]}
        }
      }
   ]
}

这允许您检查引用以查看 URL 是否来自给定路径,在我的情况下,我让每个客户端坐在自己的路径中,存储桶遵循相同的规则,在上面的例子中,只有来自 Client1 的用户才能访问客户端 1 的存储桶数据,如果我登录到 Client2 并尝试强制将图像发送到 Client1 存储桶,我将被拒绝访问。

最新更新