Boto3 IAM Создание пользователя завершается неудачно с InvalidClientTokenId - маркер безопасности, включенный в запрос, недействителен

Хотя стандарт C ++ не имеет такого требования, некоторым компиляторам требуется, чтобы все шаблоны функций и классов были доступны в каждой используемой системе переводов. Фактически для этих компиляторов тела шаблонных функций должны быть доступны в файле заголовка. Повторить: это означает, что эти компиляторы не позволят их определять в файлах без заголовка, таких как .cpp-файлы

Существует ключевое слово export , которое должно смягчать этот проблема, но он нигде не близок к тому, чтобы быть портативным.

1
задан qre0ct 17 January 2019 в 06:21
поделиться

1 ответ

В API-интерфейсах AWS IAM используется в конечном итоге согласованная модель, поэтому задержки возникают во время обновления ресурсов IAM (например, при создании ключей доступа). Это означает, что даже если вызов функции для создания ключа доступа AWS завершается успешно, это не обязательно означает, что ключ доступа AWS завершил свое создание на серверах AWS немедленно. https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_general.html#trouультив. , мы можем установить политику повторных попыток для создания пользователей IAM, используя вновь созданные ключи доступа AWS, имея время ожидания:

import boto3
import botocore
import backoff


@backoff.on_exception(backoff.expo, botocore.exceptions.ClientError, max_time=30)
def create_user(access_key_id, access_key_secret, username):
    temp_session = boto3.Session(aws_access_key_id=access_key_id,aws_secret_access_key=access_key_secret,region_name='ap-southeast-1')
    temp_iam_client = temp_session.client('iam')
    temp_iam_client.create_user(UserName=username)


session = boto3.session.Session(profile_name='default')
iam_client = session.client('iam')

response_access_key = iam_client.create_access_key(UserName='user')
access_key_id = response_access_key.get('AccessKey').get('AccessKeyId')
access_key_secret = response_access_key.get('AccessKey').get('SecretAccessKey')
create_user(access_key_id, access_key_secret, 'my-new-user')

Старый ответ

Добавление спящего режима сразу после создания ключа доступа AWS - это обходной путь.

import boto3
import time
session1 = boto3.session.Session(profile_name='my_profile')
iam_client = session1.client('iam')

responseCreateAccessKey = iam_client.create_access_key(UserName=user)
accessKeyId = responseCreateAccessKey.get('AccessKey').get('AccessKeyId')
accessKeySecret = responseCreateAccessKey.get('AccessKey').get('SecretAccessKey')

time.sleep(10)
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')
0
ответ дан Llama.new 17 January 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: