2015-10-06 67 views
0

关键我有凭据形式的亚马逊S3存储没有访问:宝途对于Amazon S3允许我刚刚创建

<AWS_ACCESS_KEY> = "some junk" 
<AWS_SECRET_KEY> = "some more junk" 
<bucketname> = "mybucket" 

我用博托访问斗:

import boto 
s3=boto.connect_s3(<AWS_ACCESS_KEY>, <AWS_SECRET_KEY>) 
bucket = s3.get_bucket('mybucket') 
mykey = bucket.new_key('test_key') 
mykey.set_contents_from_string('this is test content') 

并退出ipython。到目前为止,在s3控制台上,我看到一个新的正文内容的文本文件。

重新启动Ipython,并通过检索存储桶的相同步骤。在这一点上,我做

bucket.get_key('test_key') 

导致403错误:

S3ResponseError: S3ResponseError: 403 Forbidden 

这怎么可能,我没有访问我刚刚创建的资源?而且,我该如何解决这个问题?

+0

桶上的权限是什么?可能只允许您将对象放在对象中 – Mircea

+0

桶(控制台中)上的唯一权限是列表,上载/删除,查看权限和编辑权限。这些都是检查。 虽然我看不到'读'权限,但我可以看到 – Leo

+0

当我在帐户中运行上述代码时,它适用于我。这表明许可问题与对象本身无关(例如可能在Bucket或IAM用户上)。检查您的存储桶政策(点击“编辑存储桶政策”,最好是空白的,因此它只会显示“添加存储桶政策”),并检查您拥有的IAM权限。 –

回答

0

您的代码没有问题,因为我没有任何错误地重现它,甚至与Boto一起创建了存储桶。代码和与API的交互都是可靠的。这个问题可能与您如何在本地管理AWS秘密或IAM策略有关。

Here is your code with some slight modifications: 

import boto 

s3=boto.connect_s3() 
c_bucket = s3.create_bucket('yodas') 
g_bucket = s3.get_bucket('yodas') 
mykey = bucket.new_key('test_key') 
mykey.set_contents_from_string('this is test content') 


>>> print mykey 
<Key: yodas,test_key> 

>>> bucket.get_key('test_key') 
<Key: yodas,test_key> 

您可能想要同时创建存储桶和策略。您可以使用简单的脚本将API用户,策略和存储桶分配给API。然后你有该用户的特定政策。

my_bucket = "yodas" 
my_iam_name = "myuser" 
my_policy_name = "yodaspolicy" 

policy_json = '''{ 
    "Statement":[{ 
     "Sid":"RandomStringIdentifier", 
     "Action": [ 
     "s3:DeleteObject", 
     "s3:GetObject", 
     "s3:PutObject" 
      ], 
     "Effect":"Allow", 
     "Resource":"arn:aws:s3:::%s/*" 
     }] 
}''' % my_bucket 

response = iam.create_user(my_iam_name) 
iam.put_user_policy(my_iam_name, my_policy_name, policy_json) 
+0

谢谢,IAM政策确实存在问题。问题是登录的用户不是root用户,我添加了额外的用户权限,现在它可以工作。 – Leo