2015-10-06 71 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