2013-06-04 2 views
1

Я использую этот код, который очень прост, но он не работает. любые идеи почему? Вы должны иметь возможность запускать его, если у вас есть учетные данные.amzon s3 boto, предоставить новую группу IAM access, 403 error

from boto.s3.connection import S3Connection 
import boto 
import json 

iam = boto.connect_iam(main_aws_id,main_aws_key) 
iam.create_group('test_admin') 

create_admin_policy = {"Statement":[{"Effect":"Allow","Action":"*", "Resource":"*"}]} 
admin_policy=json.dumps(create_admin_policy) 

iam.put_group_policy('test_admin', 'AdminPolicy', admin_policy) 

iam.create_user('harry') 

iam.add_user_to_group('test_admin', 'harry') 

key_response=iam.create_access_key('harry') 

a=json.dumps(key_response).split(',') #my way of getting user's id and key 
user_AWS_ID=a[4][19:-3] 
user_AWS_KEY=a[3][23:-3] 

#needs a bit of time for the key to activates 

user_conn=S3Connection(user_AWS_ID,user_AWS_KEY) 
user_conn.create_bucket('harry_bucket') #returns: 403 Forbidden. the request signature we calculated does not match the signature you provided 

ответ

1

Проблема с кодом, который пытается извлечь access_key_id и secret_access_key от метода create_access_key. Ваш код заканчивается усечением двух символов из secret_access_key. Лучший способ получить значение будет сделать это:

user_conn=boto.connect_s3(key_response.access_key_id, key_response.secret_access_key) 
user_conn.create_bucket('<bucket_name>') 

Там нет необходимости преобразовывать key_response в строку JSON, так как IAM вызовы возвращают специальный словарь Python, который позволяет получить доступ к любому встроенному ключу, доступ к нему как атрибуту. Вы также можете использовать обычный доступ к словарю следующим образом:

key_response['create_access_key_response']['create_access_key_result']['access_key']['access_key_id'] 

Но, как вы можете видеть, это довольно неуклюжий.

+0

Я не могу поверить в эту ошибку. Спасибо за помощь. – Kiarash