即使存储桶策略允许此IP地址

时间:2017-12-06 17:14:17

标签: amazon-s3

我正在尝试使用curl和wget使用我的一个ec2实例从我的S3存储桶下载文件。我最初将我的存储桶策略设置为

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "HelpGetObject",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": ["arn:aws:s3:::name_of_bucket/*"],
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": [
                    "10.152.0.0/15",
                    "10.154.0.0/17",
                    "10.154.128.0/17"
                ]
            }
        }
    }
]
}

然后我去了我的实例,其IP地址为10-152-17-111并且使用和不使用引号进行wget / curl

wget https://s3.amazonaws.com/name_of_bucket/my_file.tar.gz

这给了我一个403     卷曲https://s3.amazonaws.com/name_of_bucket/my_file.tar.gz

这给了我一个403

现在我更改了我的策略,以便所有s3操作都可用,并且包含了我的特定IP地址

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "HelpGetObject",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::name_of_bucket",
            "arn:aws:s3:::name_of_bucket/*"
        ],
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": [
                    "10.152.0.0/15",
                    "10.154.0.0/17",
                    "10.154.128.0/17",
                    "10.152.17.111/32"
                ]
            }
        }
    }
]
}

然后我再次使用和不使用引号运行相同的命令:

wget https://s3.amazonaws.com/name_of_bucket/my_file.tar.gz

返回403

curl https://s3.amazonaws.com/name_of_bucket/my_file.tar.gz

返回403

我不知道接下来该做什么,我只想从我的s3存储桶下载我的文件。我应该有权限,但没有任何工作。

1 个答案:

答案 0 :(得分:0)

在您的s3存储分区策略中,您提供10/8范围内的允许IP。但是您在私人10/8网络上遇到的s3端点并不存在;他们有公共IP,您的请求将被视为源自您的公共IP,而不是您的私有IP。

https://wtfismyip.com/text是确定公共IP的一种方法。显然,这将根据您所使用的网络而改变,并且也将适用于该网络上的任何其他人,这是基于IP的权限不是授予S3访问权限的常见方式的两个原因。如果您的s3内容是真正公开的而非保密的,您可以考虑在上传时将public-read ACL附加到对象本身;然后桶策略是无关紧要的。

tl; dr :将您的公共IP放入策略中,而不是您的私有IP。