2016-12-26 5 views
1

Я пытаюсь GetAccountBalance на моей учетной записи Mechanical Turk, используя Boto, ссылаясь на файл моих общих учетных данных. Я был успешным в этом, набрав мои учетные данные напрямую, но не смог использовать имя профиля.Попытка получить баланс в MTurk с помощью Boto, но получить «Личность, содержащаяся в запросе, не имеет права использовать этот AWSAccessKeyId»

Следующий код работает

import import boto.mturk.connection 
sandbox_host = 'mechanicalturk.sandbox.amazonaws.com' 

mturk = boto.mturk.connection.MTurkConnection(
    aws_access_key_id = 'XXX', 
    aws_secret_access_key = 'XXX', 
    host = sandbox_host, 
) 

print mturk.get_account_balance() # [$10,000.00] 

Однако я хочу, чтобы использовать профиль, который я создал в ~/.aws/учетные данные:

[default] 
aws_access_key_id = 'XXX' 
aws_secret_access_key = 'XXX' 

[iamuser] 
aws_access_key_id = 'XXX' 
aws_secret_access_key = 'XXX' 

профиль по умолчанию является мастер AWS учетной записи, в то время как iamuser - пользователь IAM с полномочиями Full Mechanical Turk. Я хотел бы использовать iamuser для проверки моего баланса MTurk. Как я уже говорил, предыдущий код с явными ключами работает нормально. Однако я хотел бы, чтобы он работал следующим образом:

import import boto.mturk.connection 
sandbox_host = 'mechanicalturk.sandbox.amazonaws.com' 

mturk = boto.mturk.connection.MTurkConnection(
    profile_name = 'iamuser', 
    host = sandbox_host, 
) 

print mturk.get_account_balance() # [$10,000.00] 

Когда я пытаюсь это, я получаю следующее сообщение об ошибке:

Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python2.7/site-packages/boto/mturk/connection.py", line 74, in get_account_balance ('OnHoldBalance', Price)]) File "/usr/local/lib/python2.7/site-packages/boto/mturk/connection.py", line 838, in _process_request return self._process_response(response, marker_elems) File "/usr/local/lib/python2.7/site-packages/boto/mturk/connection.py", line 853, in _process_response raise MTurkRequestError(response.status, response.reason, body) boto.mturk.connection.MTurkRequestError: MTurkRequestError: 200 OK b6bdb875-b937-471c-bc00-86225e198ee2 AWS.NotAuthorized The identity contained in the request is not authorized to use this AWSAccessKeyId (1482788645643 s)

Я был бы признателен за любую помощь по этому вопросу. Thanks

+0

Нашел, где была моя ошибка. По-видимому, есть приоритет, по которому считываются учетные данные. Переменные среды имеют более высокий приоритет, чем общие учетные данные. У меня были некоторые переменные среды, объявленные в .bash_profile, которые противоречили тем, что были в моем скрипте. Таким образом, решение заключалось в том, чтобы удалить их из файла .bash_profile. –

ответ

0

Нашел, где была моя ошибка. По-видимому, есть приоритет, по которому считываются учетные данные. Переменные среды имеют более высокий приоритет, чем общие учетные данные. У меня были некоторые переменные среды, объявленные в .bash_profile, которые противоречили тем, что были в моем скрипте. Таким образом, решение было, чтобы удалить их из файла .bash_profile

то, что было очень полезно для обнаружения этой ошибки была выполнив следующую команду на Python:

boto.set_stream_logger('boto') 

, что делает его намного легче для отладки Бота.