AWS S3 存储桶策略允许从特定 URL 的访问

Posted

技术标签:

【中文标题】AWS S3 存储桶策略允许从特定 URL 的访问【英文标题】:AWS S3 Bucket Policy Allow Access From Certain URL’s 【发布时间】:2017-12-20 15:45:14 【问题描述】:

我有一个将 pdf 存储在 s3 存储桶中的 power bi 应用程序。我希望仅在我管理的网页 (beyondmapping.com) 中的 power bi web 应用程序或嵌入的 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>

我应该做些什么不同的或额外的来从这些 url 中检索文档?

编辑:当前的 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>

【问题讨论】:

你启用CORS了吗? 我独自离开了。我该怎么做? docs.aws.amazon.com/AmazonS3/latest/user-guide/… 文档不多说。我已经调整以准确反映文档中的 cors 示例。 @NoahHuntington 如果您在 aws:Referer 中使用 http 而不是 https 会发生什么? 【参考方案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/*"
          ]
        
      
    
  ]

【讨论】:

我复制了您的答案,更改了存储桶名称和引荐来源链接,它运行良好,无需安装任何其他东西。

以上是关于AWS S3 存储桶策略允许从特定 URL 的访问的主要内容,如果未能解决你的问题,请参考以下文章

私有登台S3存储桶的策略

AWS IAM 策略:如何更改 AWSLambdaFullAccess 策略以仅允许访问一个 S3 存储桶?

无需凭据即可从特定 IP 授予对 AWS S3 存储桶的访问权限

AWS S3仅允许来自存储桶的映像显示在特定IP地址上

aws s3 存储桶策略

AWS S3 存储桶策略:如何授予对 EC2 实例的访问权限?