3

我有一个 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 管理控制台中授予了对“所有人”的访问权限。这很好用,但显然不是我想要做的。;-) 任何提示我做错了什么以及如何让它工作?

我的用例是使用 EC2 和 S3 进行一些数据处理,因此通过 IP 进行访问控制比摆弄用户帐户要简单得多。如果有更简单的解决方案,我愿意接受建议。

4

1 回答 1

3

但是匿名访问仍然不起作用。

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

很多时候,一个用例隐含地涉及Amazon S3 API 调用,除了Resource策略已经明确定位的目标之外,还处理不同的资源类型。具体来说,您需要了解服务上的操作(例如ListAllMyBuckets)、桶上的操作(例如ListBucket)和对象上的操作(例如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"
                    ]
                }
            }
        }
    ]
}
于 2013-04-22T09:31:44.070 回答