#python-3.x #amazon-web-services #boto3 #amazon-iam #multi-factor-authentication
#python-3.x #amazon-веб-сервисы #boto3 #amazon-iam #многофакторная аутентификация
Вопрос:
Используя python3 и boto3, как я могу взять на себя роль в другой учетной записи AWS, для которой требуется включение многофакторной аутентификации (MFA) при принятии роли?
Ищу пример кода. Подобные вопросы на этом сайте касаются технологий, отличных от boto3, или не включают требование MFA.
Ответ №1:
Используя boto3, вам необходимо разрешить пользователю вводить токен MFA непосредственно перед переключением роли. Приведенный ниже код показывает пример переключения на роль для перечисления сегментов в другой учетной записи. Важным моментом является добавление параметров SerialNumber
и TokenCode
параметров к sts_client.assume_role()
вызову.
Затем возвращенные учетные данные можно использовать с другим клиентом boto3 для выполнения некоторой реальной работы, в этом случае перечислите сегменты s3 в целевой учетной записи.
#!/usr/bin/env python
import boto3
sts_client = boto3.client('sts')
def assume_role_with_mfa(role_arn):
'''
Assume cross account role with MFA and return credentials
'''
mfa_otp = input("Enter the MFA code: ")
assumedRoleObject = sts_client.assume_role(
RoleArn=role_arn,
RoleSessionName='mysession',
SerialNumber="arn:aws:iam::987654321098:mfa/my_userid",
DurationSeconds=3600,
TokenCode=mfa_otp
)
# From the response that contains the assumed role, get the temporary
# credentials that can be used to make subsequent API calls
return assumedRoleObject['Credentials']
# Get the cross-account credentials, then use them to create
# an S3 Client and list buckets in the account
creds = assume_role_with_mfa("arn:aws:iam::123456789012:role/myrole")
s3_client = boto3.client(service_name="s3",
aws_access_key_id=creds['AccessKeyId'],
aws_secret_access_key=creds['SecretAccessKey'],
aws_session_token=creds['SessionToken'])
buckets = s3_client.list_buckets()
for bucket in buckets['Buckets']:
print(bucket['Name'])
Я надеюсь, что это полезно для будущих поисковиков.