2012-09-24 49 views
12

我有一個桶我在Amazon S3的組織,它看起來像mydev.orgname的Python:亞馬遜S3不能得到鬥:說403禁止

  • 我有一個可以與憑據連接到Amazon S3的Java應用程序並可以連接到S3,創建,讀取文件

  • 我有一個要求,應用程序從同一個桶讀取數據。所以我爲此使用boto

我這樣做的奧德以下獲得桶

>>> import boto 
>>> from boto.s3.connection import S3Connection 
>>> from boto.s3.key import Key 
>>> 
>>> conn = S3Connection('xxxxxxxxxxx', 'yyyyyyyyyyyyyyyyyyyyyy') 
>>> conn 
S3Connection:s3.amazonaws.com 

現在,當我試圖讓鬥我看到錯誤

>>> b = conn.get_bucket('mydev.myorg') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Library/Python/2.7/site-packages/boto/s3/connection.py", line 389, in get_bucket 
    bucket.get_all_keys(headers, maxkeys=0) 
    File "/Library/Python/2.7/site-packages/boto/s3/bucket.py", line 367, in get_all_keys 
    '', headers, **params) 
    File "/Library/Python/2.7/site-packages/boto/s3/bucket.py", line 334, in _get_all 
    response.status, response.reason, body) 
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden 
<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>EEC05E43AF3E00F3</RequestId><HostId>v7HHmhJaLLQJZYkZ7sL4nqvJDS9yfrhfKQCgh4i8Tx+QsxKaub50OPiYrh3JjQbJ</HostId></Error> 

但是從Java應用程序的一切似乎工作。

我在這裏做錯了什麼嗎?

回答

0

在給予我的「用戶」更多的角色後,這個錯誤消失了。意思是用戶給予get_bucket的許可

+0

這不是一個答案。這是一條評論。它應該是一個*編輯來解決問題的問題或*評論。 –

+1

@LegoStormtroopr,在將答案留在這些評論之前,你真的應該更加小心......白日夢*是*問題作者。 – Sheridan

+1

@BrunoBronosky,你也應該小心留下這些評論。問題作者完全被允許爲自己的問題提供答案。 – Sheridan

35

給用戶一個「更強的作用」並不是正確的解決方案。這只是boto庫的使用問題。顯然,使用Java S3庫時不需要額外的權限。

在這種情況下使用博託正確的方法是:

b = conn.get_bucket('my-bucket', validate=False) 
k = b.get_key('my/cool/object.txt') # will send HEAD request to S3 
... 

基本上,boto默認情況下(這是對他們的一部分恕我直言有誤),假定要與S3存儲互動。當然,有時候您確實需要這樣做,但是您應該使用具有S3存儲桶操作權限的憑據。但更流行的用例是與S3對象進行交互,在這種情況下,您不需要任何特殊的存儲桶級權限,因此可以使用kwarg。

+0

謝謝,它爲我工作。 –

2

this answer工作:)

我做

  • S3存儲策略設置
  • 時間設定
  • 桶= conn.get_bucket(BUCKET_NAME,驗證= FALSE)
0

當我的訪問代碼錯誤時,我收到此錯誤消息!