2012-09-24 41 views
12

Tôi có một xô cho tổ chức của tôi ở Amazon S3 trông giống như mydev.orgnamePython: Amazon S3 không thể lấy xô: nói 403 Forbidden

  • Tôi có một ứng dụng Java có thể kết nối đến Amazon S3 với các thông tin và có thể kết nối với S3, tạo, đọc các tệp

  • Tôi có yêu cầu trong đó ứng dụng đọc dữ liệu từ Python từ cùng một nhóm. Vì vậy, tôi đang sử dụng boto cho việc này.

tôi làm như sau trong oder để có được những xô

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

Bây giờ khi tôi cố gắng để có được xô tôi thấy lỗi

>>> 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> 

Nhưng từ ứng dụng Java tất cả mọi thứ dường như làm việc .

Tôi có làm gì sai ở đây không?

Trả lời

0

Sau khi đưa vai trò "Người dùng" của tôi mạnh mẽ hơn nhiều, lỗi này đã biến mất. Có nghĩa là Người dùng được cấp quyền get_bucket

+0

Đây không phải là câu trả lời. Đó là một bình luận. Nó phải có một * chỉnh sửa * câu hỏi hoặc * nhận xét về * câu hỏi. –

+1

@LegoStormtroopr, bạn thực sự cần phải cẩn thận hơn trước khi để lại các loại bình luận trên một câu trả lời ... daydreamer * là * tác giả câu hỏi. – Sheridan

+1

@BrunoBronosky, bạn cũng nên cẩn thận để lại những nhận xét này. Các tác giả câu hỏi hoàn toàn được phép cung cấp câu trả lời cho câu hỏi của riêng họ. – Sheridan

35

Cung cấp cho người dùng "vai trò mạnh mẽ hơn" không phải là giải pháp chính xác. Đây chỉ là vấn đề với việc sử dụng thư viện boto. Rõ ràng, bạn không cần thêm quyền khi sử dụng thư viện Java S3.

cách chính xác để sử dụng boto trong trường hợp này là:

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

Về cơ bản, boto theo mặc định (đó là một sai lầm trên IMHO phần của họ), giả sử bạn muốn tương tác với S3 xô. Cấp, đôi khi bạn muốn điều đó, nhưng sau đó bạn nên sử dụng thông tin đăng nhập có quyền cho hoạt động xô S3. Nhưng một trường hợp sử dụng phổ biến hơn là tương tác với các đối tượng S3 và trong trường hợp này, bạn không cần bất kỳ quyền cấp nhóm đặc biệt nào, do đó việc sử dụng validate=False kwarg.

+0

Cảm ơn bạn, nó đã làm việc cho tôi. –

2

this answer làm việc cho tôi :)

tôi đã làm

  • S3 chính sách xô thiết
  • thời gian thiết lập
  • xô = conn.get_bucket (BUCKET_NAME, xác nhận = False)
0

Tôi đã nhận được lỗi này khi mã truy cập của tôi sai!

Các vấn đề liên quan