AWS S3存储桶策略允许从某些URL访问

时间:2017-12-20 15:45:14

标签: amazon-web-services amazon-s3 powerbi

我有一个power bi app,可以将pdf存储在一个s3存储桶中。我希望只允许从power bi web应用程序或我管理的网页(beyondmapping.com)中嵌入的Web应用程序请求访问这些文档。我已使用策略生成器创建以下存储桶策略。

{
    "Version": "2012-10-17",
    "Id": "Policy1513783148229",
    "Statement": [
        {
            "Sid": "Stmt1513783134644",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::flsarchives/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": [
                        "https://app.powerbi.com/*",
                        "https://www.app.powerbi.com/*",
                        "http://beyondmapping.com/*",
                        "http://www.beyondmapping.com/*"
                    ]
                }
            }
        }
    ]
}

政策验证并且AWS警告我“此存储桶具有公共访问权限”,但当我尝试通过https://app.powerbi.com/访问时,我得到了...

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>3FC57FCB880F8210</RequestId>
<HostId>
5MSm6vqLs12IgCNdVXj9p+GTg/aMxQ2U/FJ1PBPWX9vypn+OIPmzpBOpSZx1y3KkGhIz9MoTraQ=
</HostId>
</Error>

我应该采取哪些不同的方式或另外从这些网址中检索文档?

编辑:当前的CORS。不确定这是否相关,不确定它应该是什么样的。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
</CORSRule>
<CORSRule>
    <AllowedOrigin>https://www.appdomain.com</AllowedOrigin>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

1 个答案:

答案 0 :(得分:1)

我不确定具体做了什么,但我最后安装了S3Browser,这使我可以创建并应用以下存储桶策略。我看到的唯一区别是“Action”:“s3:GetObject”政策。它似乎可以解决问题。

{
  "Version": "2012-10-17",
  "Id": "preventHotLinking",
  "Statement": [
    {
      "Sid": "1",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::flsarchives/*",
      "Condition": {
        "StringLike": {
          "aws:Referer": [
            "https://app.powerbi.com/*",
            "https://www.app.powerbi.com/*"
          ]
        }
      }
    }
  ]
}