2013-04-22 302 views
3

我有一個Amazon S3存儲桶,並希望在特定計算機上使其可用於腳本,而無需部署登錄憑證。所以我的計劃是隻允許從該機器的IP進行匿名訪問。我對亞馬遜雲很陌生,並且存儲區策略看起來像是要走的路。我在我的存儲桶中添加了以下策略:Amazon S3:授予來自IP的匿名訪問(通過存儲桶策略)

{ 
    "Version": "2008-10-17", 
    "Id": "S3PolicyId1", 
    "Statement": [ 
     { 
      "Sid": "IPAllow", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:*", 
      "Resource": "arn:aws:s3:::name_of_my_bucket/*", 
      "Condition": { 
       "IpAddress": { 
        "aws:SourceIp": [ 
         "my_ip_1/24", 
         "my_ip_2/24" 
        ] 
       } 
      } 
     } 
    ] 
} 

但匿名訪問仍然不起作用。爲了進行測試,我授予了S3管理控制檯中「Everyone」的訪問權限。這工作正常,但顯然不是我想要做的。 ;-)任何提示我做錯了什麼,以及如何讓這個工作?

我的用例是使用EC2和S3進行的一些數據處理,所以通過IP進行訪問控制將比用戶帳戶的操作簡單得多。如果有更簡單的解決方案,我願意提供建議。

回答

2

但是匿名訪問仍然不起作用。

什麼操作仍然不能正常工作準確,一次偶然的機會你只是嘗試列出在桶中的對象?

很多時候,一個用例隱含地涉及到Amazon S3 API調用,除了已經明確定位策略的Resource之外,還調用不同的資源類型。具體而言,您需要了解Operations on the Service(例如ListAllMyBuckets),Operations on Buckets(例如ListBucket)和Operations on Objects(例如GetObject)之間的差異。

特別是,您的保單Resource規範目前解決桶只(arn:aws:s3:::name_of_my_bucket/*),這意味着你不能在遺願清單對象中的對象(你應該可以把/獲取/刪除對象雖然情況) - 爲了還允許通過ListBucket你需要修改你的政策,因此跟在桶中的對象的清單:

{ 
    "Version": "2008-10-17", 
    "Id": "S3PolicyId1", 
    "Statement": [ 
     { 
      // ... your existing statement for objects here ... 
     }, 
     { 
      "Sid": "IPAllow", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:ListBucket", 
      "Resource": "arn:aws:s3:::name_of_my_bucket", 
      "Condition": { 
       "IpAddress": { 
        "aws:SourceIp": [ 
         "my_ip_1/24", 
         "my_ip_2/24" 
        ] 
       } 
      } 
     } 
    ] 
} 
+0

你到底打的問題。資源名稱只是一個前綴?所以假設我有桶'com.mydomain.xxx'和'com.mydomain.yyy'。是否有可能通過'arn:aws:s3 ::: com.mydomain。*'向所有桶(包括內容)授予對所有操作的訪問權限? – Achim 2013-04-22 09:50:54

+0

通過ARN的資源規範的確切語法和含義因服務而異,參見例如。 [ARN的語法和示例](http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax) - 對於S3,您可以使用前綴(或更確切地說一個[路徑](http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-paths))確實是對象,但是這個存儲區必須全部指定暫時不能包含通配符,參見例如AWS團隊對[針對s3桶通配符的IAM語句?]的響應(https://forums.aws.amazon.com/message.jspa?messageID=377764#387497)。 – 2013-04-22 10:03:06

相關問題