Когда я это сделаю:
session1 = boto3.session.Session(profile_name='my_profile')
iam_client = session1.client('iam')
Учитывая это user='an_existin_iam_user'
, приведенное ниже выполняется успешно, поскольку я могу успешно распечатать accessKeyId и accessKeySecret.
responseCreateAccessKey = iam_client.create_access_key(UserName=user)
accessKeyId = responseCreateAccessKey.get('AccessKey').get('AccessKeyId')
accessKeySecret = responseCreateAccessKey.get('AccessKey').get('SecretAccessKey')
Следовательно, я могу использовать iam_client для создания учетных данных доступа для других пользователей (учитывая, что профиль AWS my_profile содержит кредиты для пользователя IAM с правами администратора)
Теперь, с недавно созданными учетными данными выше, я хочу создать нового пользователя IAM. Ниже приведены вещи, которые я пытался добиться:
Попытка 1
temp_session = boto3.Session(aws_access_key_id=accessKeyId,aws_secret_access_key=accessKeySecret,region_name='ap-southeast-1')
temp_iam_client = temp_session.client('iam')
responseCreateUser = temp_iam_client.create_user(UserName='my-new-user')
Попытка 2
temp_iam_client = boto3.client('iam',aws_access_key_id=accessKeyId,aws_secret_access_key=accessKeySecret,region_name='ap-southeast-1')
responseCreateUser = temp_iam_client.create_user(UserName='my-new-user')
Попытка 3
temp_session = boto3.session.Session(aws_access_key_id=accessKeyId,aws_secret_access_key=accessKeySecret,region_name='ap-southeast-1')
temp_iam_client = temp_session.client('iam')
responseCreateUser = temp_iam_client.create_user(UserName='my-new-user')
Попытка 4 (также предлагается в одном из ответов ниже)
temp_session = boto3.session.Session(aws_access_key_id=accessKeyId,aws_secret_access_key=accessKeySecret,region_name='ap-southeast-1')
temp_iam_client = temp_session.client('iam')
time.sleep(5)
responseCreateUser = temp_iam_client.create_user(UserName='my-new-user')
Каждый из вышеперечисленных отказов приводит к следующей ошибке
Произошла ошибка (InvalidClientTokenId) при вызове операции CreateUser: токен безопасности, включенный в запрос, недействителен.
Что-то мне здесь не хватает? Все, что я хочу сделать, это создать нового пользователя с (как показано выше) вновь созданными учетными данными для доступа (ключ доступа и секрет доступа). Ничего страшного, если я получу AccessDenied
exception. Я ожидаю, что это для пользователей, у которых нет нужных привилегий. Но InvalidClientTokenId
исключение - это то, чего я не понимаю, почему я вообще его получаю.
Кроме того, если это помогает, я пытаюсь сделать это (создание ключа доступа и секрета, а затем использовать их для создания нового пользователя) в итеративном цикле для более чем 100 пользователей. (Цикл, конечно, обрабатывает случаи, когда ключи доступа для текущего обрабатываемого пользователя уже исчерпаны и т. Д.) Так скажем, например, если я попытаюсь выполнить указанное выше действие по созданию пользователя из консоли ipython индивидуально для пользователя, скажем, existing-test-user
в одиночку, тогда я получаю правильное AccessDenied
исключение. Однако, когда цикл достигает этого имени пользователя (например, после итерации по нескольким начальным пользователям), я получаю исключение InvalidClientTokenId
.
На дополнительной заметке проходил это раздел get_credentials()
, и мне просто интересно, имеет ли он какое-либо отношение к кешированию учетных данных?