Amazon S3:从IP授予匿名访问权限(通过存储桶策略)

时间:2013-04-22 07:12:26

标签: amazon-s3 amazon-ec2

我有一个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进行访问控制比摆弄用户帐户要简单得多。如果有一个更简单的解决方案,我愿意接受建议。

1 个答案:

答案 0 :(得分:3)

  

但是匿名访问仍然无效。

什么操作仍无法正常工作,您是否只是尝试列出存储桶中的对象?

通常情况下,一个用例隐式涉及Amazon S3 API调用,它们还解决了策略明确定位的Resource之外的不同资源类型。具体而言,您需要了解Operations on the Service(例如ListAllMyBuckets),Operations on Buckets(例如ListBucket)和Operations on Objects(例如{{}之间的区别3}})。

特别是,策略的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"
                    ]
                }
            }
        }
    ]
}