ClientError: Произошла ошибка (AccessDenied) при вызове операции AssumeRole: сбой MultiFactorAuthentication с недопустимым одноразовым кодом доступа MFA

import boto
import boto3
from boto.s3.connection import S3Connection
from boto.sts import STSConnection

# Prompt for MFA time-based one-time password (TOTP)
mfa_TOTP = raw_input("Enter the MFA code: ")
role_arn = "arn:aws:iam::123456789012:role/TestOperator"
client = boto3.client('sts')
response = client.assume_role(RoleArn=role_arn,SerialNumber="arn:aws:iam::760787039612:mfa/C34768",RoleSessionName="test",TokenCode=mfa_TOTP)
print response

При выполнении приведенного выше кода с допустимым кодом MFA TokenCode также возникает следующая ошибка.

ClientError: Произошла ошибка (AccessDenied) при вызове операции AssumeRole: сбой MultiFactorAuthentication с недопустимым одноразовым кодом доступа MFA.

Благодарности за помощь


person Chandra    schedule 01.06.2018    source источник
comment
Вы вводите правильный токен MFA? Возможно, вам потребуется повторно синхронизировать устройство MFA или создать его заново. В остальном код выглядит нормально.   -  person Oluwafemi Sule    schedule 04.06.2018


Ответы (2)


Я решил проблему с токеном MFA, сделав следующие изменения в моем коде.

import boto3

role_arn = raw_input("Enter the RoleArn of switch user: ")
SerialNumber = raw_input("Enter the MFA SerialNumber: ")
RoleSessionName = raw_input("Enter the RoleSessionName: ")
mfa_TOTP = raw_input("Enter the MFA code: ")

client = boto3.client('sts')
response = client.assume_role(RoleArn=role_arn,SerialNumber=SerialNumber,RoleSessionName=RoleSessionName,TokenCode=mfa_TOTP)
credentials = response['Credentials']

ec2_resource = boto3.resource('ec2', region,aws_access_key_id = credentials['AccessKeyId'],aws_secret_access_key = credentials['SecretAccessKey'],
                                  aws_session_token = credentials['SessionToken'])
ec2_client = boto3.client('ec2', region,aws_access_key_id = credentials['AccessKeyId'],aws_secret_access_key = credentials['SecretAccessKey'],
                                  aws_session_token = credentials['SessionToken'])

так что теперь мы можем получить доступ к ресурсу ec2, используя объекты ec2_resource и ec2_client.

Спасибо...

person Chandra    schedule 08.06.2018

Если вы не укажете случайные номера счетов для этого сообщения (что является хорошей идеей), то вы забыли указать реальный номер счета в своем ARN:

role_arn = "arn:aws:iam::123456789012:role/TestOperator"

должно быть

role_arn = "arn:aws:iam::760787039612:role/TestOperator"

person Andy Zoutte    schedule 07.06.2018
comment
Только для поста я ставлю случайные числа, но на самом деле запускаю код с точным номером счета. - person Chandra; 08.06.2018