【发布时间】:2015-08-19 16:48:08
【问题描述】:
我正在尝试设置对我的一个存储桶的安全访问,但我无法让它工作,即使我很确定一切都很好。
我有这个桶,我们称之为mybucket,它是我在爱尔兰创建的。
它包含两个文件夹,dev 和 prod。
我创建了两个用户:
-
mybucket-prod,ARN:arn:aws:iam::XXXXXXXXX:user/mybucket-prod -
mybucket-dev,ARN:arn:aws:iam::XXXXXXXXX:user/mybucket-dev
每个用户都有一个政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1439909068000",
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::mybucket/dev/*"
]
}
]
}
(对于具有 Resource = "arn:aws:s3:::mybucket/prod/*" 的 mybucket-prod 也是如此)
这是存储桶政策:
{
"Version": "2012-10-17",
"Id": "Policy1439908568053",
"Statement": [
{
"Sid": "Stmt1439908459631",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXX:user/mybucket-dev"
},
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObjectAcl",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::mybucket/dev/*"
},
{
"Sid": "Stmt1439908500795",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXX:user/mybucket-prod"
},
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObjectAcl",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::mybucket/prod/*"
}
]
}
而且我无法让它对两个用户都有效。我尝试创建一个新的访问密钥,也没有任何运气。
我做错了什么?
也许值得注意的是,我将另一个存储桶的内容复制到了这个存储桶中,方法是进入 Amazon 的 Web 界面,单击前一个存储桶中的“dev”和“prod”,选择“copy”,然后继续mybucket 并选择“粘贴”?
我还尝试了策略模拟器,结果是肯定的(允许)。
我正在使用boto(Python),但正如我所说,我没有更改代码中的任何内容,并且由于我更改了存储桶名称而发生了错误。我用一个非常基本的代码进行了测试,它返回了同样的错误:
from boto.s3.connection import S3Connection
from boto.s3.key import Key
con = S3Connection('KEY', 'SECRET', host='s3-eu-west-1.amazonaws.com')
print Key(bucket=con.get_bucket('mybucket'), name="/prod/2/documents/1-demo.pdf")
我得到:
Traceback (most recent call last):
File "test.py", line 6, in <module>
print Key(bucket=con.get_bucket('mybucket'), name="/prod/2/contracts/1/documents/1-cillit.pdf")
File "/usr/lib/python2.7/site-packages/boto/s3/connection.py", line 502, in get_bucket
return self.head_bucket(bucket_name, headers=headers)
File "/usr/lib/python2.7/site-packages/boto/s3/connection.py", line 535, in head_bucket
raise err
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
【问题讨论】:
-
你能详细说明“不能让它工作”吗?例如,您是否无法使用这些 IAM 用户的凭证将对象放入这些存储桶?
-
是的,完全正确:我无法读取对象,也无法放置对象(没有真正测试删除,我没有走那么远)。我总是收到 403 错误。
-
如果有帮助,我使用
boto(Python),并且在我更换存储桶之前代码运行良好。整个原因是将存储桶重命名为其他名称。 -
你需要展示一个不起作用的boto代码的简单示例
-
最简单的解决方案是首先允许所有操作,这样您就不会在遇到第二个不相关的问题时对存储桶策略进行故障排除。还要确保您正在检查来自 S3 的响应正文。大多数 403 错误不会在响应正文中为您提供提示,但有些会提示。
标签: amazon-web-services amazon-s3