我正在尝试使用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存储桶下载我的文件。我应该有权限,但没有任何工作。
答案 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。