2013-04-22 304 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

相关问题