Когда я делаю это:
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 для создания учетных данных для доступа других пользователей (учитывая, что профиль my_profile AWS содержит кредиты для пользователя 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
. Я ожидаю, что для пользователей, которые не имеют необходимых привилегий. Но исключение InvalidClientTokenId
- это то, чего я не понимаю.
Кроме того, если это помогает, я пытаюсь сделать это (создание ключа доступа и секрета, а затем использовать его для создания нового пользователя) в итеративном цикле для более чем 100 пользователей.
(Цикл, конечно, обрабатывает случаи, когда ключи доступа для обрабатываемого в данный момент пользователя уже исчерпаны и т. Д.)
Например, если я попытаюсь выполнить указанное выше действие по созданию пользователя из консоли ipython, отдельно для пользователя, скажем, existing-test-user
, то я получу правильное исключение AccessDenied
. Однако, когда цикл достигает этого имени пользователя (например, после итерации нескольких начальных пользователей), я получаю исключение InvalidClientTokenId
.
На дополнительном примечании проходил этот раздел get_credentials()
, и мне просто интересно, имеет ли это какое-либо отношение к кэшированию учетных данных?