Как получить клиента STS boto3 без попытки аутентификации? - PullRequest
0 голосов
/ 08 июня 2018

Я использую этот код для принятия роли Amazon Web Services с помощью аутентификации SAML:

client = boto3.client('sts', region_name = region)
token = client.assume_role_with_saml(role, principal, saml)

Как задокументировано здесь , вызов assume_role_with_saml не требуетиспользование учетных данных безопасности AWS ;вся информация об аутентификации содержится в параметрах самого вызова.Тем не менее, если у меня установлены переменные окружения AWS_, связанные с аутентификацией, вызов boto3.client() немедленно попытается использовать их для аутентификации.Обычно у меня установлен AWS_PROFILE, и причина, по которой я запускаю этот код, в том, что срок действия токена безопасности именованного профиля истек, поэтому вызов не выполняется, и я должен сбросить AWS_PROFILE и повторить попытку.

Я могу, конечно, вручную выполнить os.environ поиск и удаление релевантных переменных перед вызовом boto3.client(), но мне интересно, есть ли более понятный способ сказать: "Эй, Бото, просто дай мне объект клиента STS безпытаясь что-нибудь подтвердить, хорошо? "

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Из этого ответа на GitHub , вот как настроить клиент, который не будет пытаться подписывать исходящие запросы с учетными данными IAM:

import boto3                      
from botocore import UNSIGNED     
from botocore.config import Config

client = boto3.client('sts', region_name=region, config=Config(signature_version=UNSIGNED))
0 голосов
/ 08 июня 2018

Изучив код boto3 и botocore, я разработал решение, но я не уверен, что это улучшение по сравнению с удалением переменных среды:

import boto3, botocore
bs = botocore.session.get_session({ 'profile': ( None, ['', ''], None, None ) })
bs.set_credentials('','','')
s = boto3.session.Session(botocore_session = bs)
client = s.client('sts', region_name = region)

Принятие моего собственного ответа на данный момент, но еслиу кого есть идея получше, у меня все уши.

...