我正在使用此代码,这很简单,但不起作用。任何想法为什么?如果您有凭据,则应该可以运行它。
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
答案 0 :(得分: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>')
由于IAM调用返回一个特殊的Python字典,允许您通过将其作为属性访问来访问任何嵌入式密钥,因此无需将key_response
转换为JSON字符串。你也可以像这样使用普通的字典访问:
key_response['create_access_key_response']['create_access_key_result']['access_key']['access_key_id']
但正如你所看到的,这是相当笨拙的。