MFA аутентификация с использованием Python Boto для DynamoDb - PullRequest
0 голосов
/ 22 мая 2018

У меня старый код, который выглядит примерно так:

boto.dynamodb2.connect_to_region(
        region_name=AWS_REGION,
        aws_access_key_id=ACCESS_KEY_ID,
        aws_secret_access_key=SECRET_ACCESS_KEY)

Моя организация недавно провела проверку подлинности MFA.Таким образом, этот код дает мне

boto.exception.JSONResponseError: JSONResponseError: 400 Bad Request
{u'Message': u'User: arn:aws:iam::123123123123:user/mike.ross is not authorized to perform: dynamodb:Scan on resource: arn:aws:dynamodb:us-west-2:123123123:table/MyTable with an explicit deny', u'__type': u'com.amazon.coral.service#AccessDeniedException'}

Я пытался найти в Интернете примеры кода, которые используют аутентификацию MFA, но пока что безуспешно.

Пока я пытался добавить session_tokenпараметр, но он не распознал параметр.Затем я попытался удалить все параметры из метода connect_to_region и экспортировал следующие переменные среды с соответствующими значениями

AWS_ACCESS_KEY_ID 
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN

Затем я получил

boto.exception.JSONResponseError: JSONResponseError: 400 Bad Request
{u'message': u'The security token included in the request is invalid.', u'__type': u'com.amazon.coral.service#UnrecognizedClientException'}

Как изменить этот код для использованияMFA аутентификация?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Я совершил глупую ошибку.Я должен был выставить AWS_SECURITY_TOKEN вместо этого я выставил его как AWS_SESSION_TOKEN

Мне нужно было выставить следующие переменные окружения

AWS_ACCESS_KEY_ID = <AWS access key if mfa one time access key>
AWS_SECRET_ACCESS_KEY = <AWS secret key if mfa one time secret key>
AWS_SECURITY_TOKEN = <if mfa security token>
AWS_PROFILE = <profile name from your /.aws/credentials file>

После выставления этих переменных окружения я изменил код какниже

boto.dynamodb2.connect_to_region(region_name=AWS_REGION)
# Observe that I've removed access, secret key parameters, 
# instead they'll be taken from environment variables.

Теперь соединение работает правильно.

Ссылка: Документация Boto

0 голосов
/ 22 мая 2018

Здесь все хорошо объяснено: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html

  1. Отправка серийного номера устройства и кода токена на конечную точку GetSessionToken
  2. Получение идентификатора временного ключа доступаи секретный ключ доступа от конечной точки GetSessionToken
  3. Передача временных токенов в существующий код
...