2017-09-26 27 views
0

我想限制直接訪問aws s3存儲區中的文件,只有從網站文件應該是可見的,我嘗試了不同的政策。但是沒有任何東西能爲我工作。限制直接訪問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:::ex-bucket/*", "Condition": { "StringLike": {"aws:Referer": ["https://www.example.com/*","https://example.com/*"]} } },
{ "Sid": "IPAllow", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::ex-bucket/*", "Condition": { "NotIpAddress": { "aws:SourceIp": "00.00.000.00" }, "IpAddress": { "aws:SourceIp": "00.00.000.00" } } }
] }

對此有何建議。

+0

檢查您的狀況。它似乎錯了' 「條件」:{ 「NotIpAddress」:{ 「AWS:SOURCEIP」: 「54.24.189.49」 }, 「Ip地址」:{ 「AWS:SOURCEIP」: 「54.24.189.49」 } }' –

+0

感謝您的回覆,您能告訴我它有什麼不對嗎 – Sontya

+0

爲什麼您爲同一個IP設置'NotIpAddress'和'IpAddress'?他們互相沖突 –

回答

0

如果你要允許訪問特定的域來鬥試試這個

下面是如何設置www.example.com和example.com作爲有效是指一個例子。 添加了以下策略在「添加鬥政策」字段:

{ 
"Version": "2012-10-17", 
"Id": "http referer policy example", 
"Statement": [ 
     { 
       "Sid": "Allow get requests originating from www.example.com and example.com.", 
       "Effect": "Allow", 
       "Principal": "*", 
       "Action": "s3:GetObject", 
       "Resource": "arn:aws:s3:::s3-foo-bar/*", 
       "Condition": { 
         "StringLike": { 
          "aws:Referer": [ 
            "http://www.example.com/*", 
            "http://example.com/*" 
           ] 
         } 
       } 
     } 

默認帳戶訪問S3,除非他們已獲得通過政策限制訪問。但是,S3默認設計爲允許任何IP地址訪問。因此,要阻止IP,您必須在策略中明確指定拒絕,而不是允許。

{ 
"Id": "S3PolicyId1", 
"Statement": [ 
    { 
     "Sid": "IPDeny", 
     "Effect": "Deny", 
     "Principal": { 
      "AWS": "*" 
     }, 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::s3-foo-bar/*", 
     "Condition": { 
      "NotIpAddress": { 
       "aws:SourceIp": "Your IP Address CIDR Notation" 
      } 
     } 
    } 
    ] 
} 

如果您希望禁用桶直接訪問:

可以使文件私人和產生簽署的網址允許文件某人臨時訪問:Share an Object with Others

另一種方法可以是你Serve Private Content via Cloudfront

或者你可以設置一個策略來限制人們直接訪問文件只允許他們訪問文件,如果它從您的網站鏈接

或者您可以通過發送它們通過某些腳本,即將文件下載到您的服務器並從那裏返回文件內容來提供這些文件。在這種情況下,您可以在S3中將這些文件私有化,甚至將它們移動到完全私有的單獨存儲區中。我不會推薦這種方法,因爲它會增加服務器的負載。

希望這可以幫助

+0

感謝這麼快的回覆,我試了兩個選項。我仍然可以直接訪問我的文件。沒有去網站 – Sontya

+0

解釋你直接訪問文件是什麼意思? –

+0

所以我寫了一個方法來顯示我的網站上的文件,我在那裏顯示文件,如徽標,圖像,這一切都很好。但我想限制直接訪問我的文件'https:// example.s3.amazonaws.com/uploads/cat_image/f_bevarages.png' – Sontya