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