Невозможно использовать учетные данные, созданные API Boto3 createAccessKey. ⇐ Python
-
Anonymous
Невозможно использовать учетные данные, созданные API Boto3 createAccessKey.
Я хочу написать программу на Python, которая выполняет некоторые вызовы API с использованием учетных данных пользователя A, а затем создает ключ доступа для пользователя B. Затем я хочу использовать недавно созданный ключ доступа пользователя B для вызова API получения идентификатора вызывающего абонента. Вот проблемы:
Когда я напрямую использую ключи, возвращаемые API-вызовом createAccessKey, я постоянно получаю эту ошибку
Traceback (самый последний вызов — последний): Файл «mock.py», строка 142, в основной() Файл «mock.py», строка 130, в основном файле. печать(client1.get_caller_identity()) Файл "/home/joe/.local/lib/python3.8/site-packages/botocore/client.py", строка 535, в _api_call вернуть self._make_api_call(имя_операции, kwargs) Файл "/home/joe/.local/lib/python3.8/site-packages/botocore/client.py", строка 980, в _make_api_call поднять error_class (разобранный_ответ, имя_операции) botocore.Exceptions.ClientError: произошла ошибка (InvalidClientTokenId) при вызове операции GetCallerIdentity: токен безопасности, включенный в запрос, недействителен. Однако, если я введу жестко запрограммированные учетные данные, сгенерированные в результате вызова создания ключа доступа, программа завершится без каких-либо проблем. То есть раскомментируйте вторую строку ниже в программе и вставьте созданные ключи доступа:
# ПРИМЕЧАНИЕ: вручную введите идентификатор ключа и ключ доступа, созданные вызовом createAccessKey выше. #cred_new = credential('', '', нет) Вот полная программа
импортировать boto3 время импорта удостоверение класса: aws_access_key_id = '' aws_secret_access_key = '' aws_session_token = '' def __init__(self, aws_access_key_id, aws_secret_access_key, aws_session_token=None) -> Нет: self.aws_access_key_id = aws_access_key_id self.aws_secret_access_key = aws_secret_access_key self.aws_session_token = aws_session_token def инициализировать_each_service(cred, service_name): клиент = boto3.client( имя_сервиса = имя_сервиса, aws_access_key_id=cred.aws_access_key_id, aws_secret_access_key=cred.aws_secret_access_key, aws_session_token=cred.aws_session_token ) возврат клиента Защиту инициализации_клиентов (client_map, cred): # TODO: прочитать ключи из файла # Инициализируем клиент AWS STS (Security Token Service) service_list = ['sts', 'iam', 'guardduty'] для имя_службы в списке_служб: client_map[service_name] = инициализировать_each_service(cred, service_name) вернуть client_map защита get_caller_identity (client_map): ответ = client_map['sts'].get_caller_identity() # Получить личность звонящего # Извлеките и распечатайте идентификационную информацию вызывающего абонента account_id = ответ['Аккаунт'] arn = ответ['Arn'] print(f"Идентификатор учетной записи AWS: {account_id}") print(f"ARN вызывающего абонента: {arn}") Защиту create_access_key (client_map, target_user_name): # Создайте ключ доступа для пользователя IAM ответ = client_map['iam'].create_access_key(UserName=target_user_name) распечатать (ответ) # Извлеките и распечатайте информацию о ключе доступа access_key_id = ответ['AccessKey']['AccessKeyId'] secret_access_key = ответ['AccessKey']['SecretAccessKey'] cred = учетные данные (access_key_id, secret_access_key) print(f"Идентификатор ключа доступа: {access_key_id}") print(f"Секретный ключ доступа: {secret_access_key}") вернуть кредит защита основной(): client_map = dict() client_map_new = dict() # Замените «your_aws_access_key» и «your_aws_secret_key» ключом доступа и секретным ключом вашего пользователя AWS IAM. aws_access_key_id = '' aws_secret_access_key = '' cred = учетные данные (aws_access_key_id, aws_secret_access_key) print(f'aws_access_key_id = ', cred.aws_access_key_id) print(f'aws_secret_access_key = ', cred.aws_secret_access_key) print(f'aws_session_token = ', cred.aws_session_token) client_map = инициализировать_clients(client_map, cred) get_caller_identity (client_map) target_user_name = 'devOps' cred_new = create_access_key(client_map, target_user_name) # ПРИМЕЧАНИЕ: вручную введите идентификатор ключа и ключ доступа, созданный вызовом createAccessKey выше. #cred_new = credential('', '', нет) print(f'aws_access_key_id = ', cred_new.aws_access_key_id) print(f'aws_secret_access_key = ', cred_new.aws_secret_access_key) print(f'aws_session_token = ', cred_new.aws_session_token) время.сон(5) клиент1 = бото3.клиент( имя_службы = 'sts', aws_access_key_id=cred_new.aws_access_key_id, aws_secret_access_key=cred_new.aws_secret_access_key, aws_session_token=cred.aws_session_token ) печать(client1.get_caller_identity()) если __name__ == "__main__": основной()
Я хочу написать программу на Python, которая выполняет некоторые вызовы API с использованием учетных данных пользователя A, а затем создает ключ доступа для пользователя B. Затем я хочу использовать недавно созданный ключ доступа пользователя B для вызова API получения идентификатора вызывающего абонента. Вот проблемы:
Когда я напрямую использую ключи, возвращаемые API-вызовом createAccessKey, я постоянно получаю эту ошибку
Traceback (самый последний вызов — последний): Файл «mock.py», строка 142, в основной() Файл «mock.py», строка 130, в основном файле. печать(client1.get_caller_identity()) Файл "/home/joe/.local/lib/python3.8/site-packages/botocore/client.py", строка 535, в _api_call вернуть self._make_api_call(имя_операции, kwargs) Файл "/home/joe/.local/lib/python3.8/site-packages/botocore/client.py", строка 980, в _make_api_call поднять error_class (разобранный_ответ, имя_операции) botocore.Exceptions.ClientError: произошла ошибка (InvalidClientTokenId) при вызове операции GetCallerIdentity: токен безопасности, включенный в запрос, недействителен. Однако, если я введу жестко запрограммированные учетные данные, сгенерированные в результате вызова создания ключа доступа, программа завершится без каких-либо проблем. То есть раскомментируйте вторую строку ниже в программе и вставьте созданные ключи доступа:
# ПРИМЕЧАНИЕ: вручную введите идентификатор ключа и ключ доступа, созданные вызовом createAccessKey выше. #cred_new = credential('', '', нет) Вот полная программа
импортировать boto3 время импорта удостоверение класса: aws_access_key_id = '' aws_secret_access_key = '' aws_session_token = '' def __init__(self, aws_access_key_id, aws_secret_access_key, aws_session_token=None) -> Нет: self.aws_access_key_id = aws_access_key_id self.aws_secret_access_key = aws_secret_access_key self.aws_session_token = aws_session_token def инициализировать_each_service(cred, service_name): клиент = boto3.client( имя_сервиса = имя_сервиса, aws_access_key_id=cred.aws_access_key_id, aws_secret_access_key=cred.aws_secret_access_key, aws_session_token=cred.aws_session_token ) возврат клиента Защиту инициализации_клиентов (client_map, cred): # TODO: прочитать ключи из файла # Инициализируем клиент AWS STS (Security Token Service) service_list = ['sts', 'iam', 'guardduty'] для имя_службы в списке_служб: client_map[service_name] = инициализировать_each_service(cred, service_name) вернуть client_map защита get_caller_identity (client_map): ответ = client_map['sts'].get_caller_identity() # Получить личность звонящего # Извлеките и распечатайте идентификационную информацию вызывающего абонента account_id = ответ['Аккаунт'] arn = ответ['Arn'] print(f"Идентификатор учетной записи AWS: {account_id}") print(f"ARN вызывающего абонента: {arn}") Защиту create_access_key (client_map, target_user_name): # Создайте ключ доступа для пользователя IAM ответ = client_map['iam'].create_access_key(UserName=target_user_name) распечатать (ответ) # Извлеките и распечатайте информацию о ключе доступа access_key_id = ответ['AccessKey']['AccessKeyId'] secret_access_key = ответ['AccessKey']['SecretAccessKey'] cred = учетные данные (access_key_id, secret_access_key) print(f"Идентификатор ключа доступа: {access_key_id}") print(f"Секретный ключ доступа: {secret_access_key}") вернуть кредит защита основной(): client_map = dict() client_map_new = dict() # Замените «your_aws_access_key» и «your_aws_secret_key» ключом доступа и секретным ключом вашего пользователя AWS IAM. aws_access_key_id = '' aws_secret_access_key = '' cred = учетные данные (aws_access_key_id, aws_secret_access_key) print(f'aws_access_key_id = ', cred.aws_access_key_id) print(f'aws_secret_access_key = ', cred.aws_secret_access_key) print(f'aws_session_token = ', cred.aws_session_token) client_map = инициализировать_clients(client_map, cred) get_caller_identity (client_map) target_user_name = 'devOps' cred_new = create_access_key(client_map, target_user_name) # ПРИМЕЧАНИЕ: вручную введите идентификатор ключа и ключ доступа, созданный вызовом createAccessKey выше. #cred_new = credential('', '', нет) print(f'aws_access_key_id = ', cred_new.aws_access_key_id) print(f'aws_secret_access_key = ', cred_new.aws_secret_access_key) print(f'aws_session_token = ', cred_new.aws_session_token) время.сон(5) клиент1 = бото3.клиент( имя_службы = 'sts', aws_access_key_id=cred_new.aws_access_key_id, aws_secret_access_key=cred_new.aws_secret_access_key, aws_session_token=cred.aws_session_token ) печать(client1.get_caller_identity()) если __name__ == "__main__": основной()