#amazon-web-services #postman #aws-sts
#amazon-веб-сервисы #почтальон #aws-sts
Вопрос:
Я пытаюсь получить токен сеанса для данного IAM в postman, но не могу получить токен.
Если я использую boto3.client (‘sts’), я могу получить токен.
Пример использования: я пытаюсь вызвать конечную точку VPC Rest из экземпляра EC2, где запущен экземпляр ServiceNow mid-server. Поскольку у нас есть агент ServiceNow mid-server, работающий на экземпляре EC2, я хочу использовать роль IAM, прикрепленную к EC2, для аутентификации других конечных точек VPC, которые развернуты в той же учетной записи AWS.
У меня есть политика разрешений, привязанная к роли IAM, чтобы разрешить политику принятия роли. Если есть какой-то другой подход, пожалуйста, предложите.
вот HTML-ответ HTML в postman. Перенаправление Postman на документы IAM
client = boto3.client('sts')
response = client.assume_role(
RoleArn='arn:aws:iam::**************:role/ServiceNow-midserver-Role',
RoleSessionName='Session1',
DurationSeconds=3600
)
print(response)
что-нибудь не так с телом запроса postman или конечной точкой.
Аутентификация в postman отсутствует.
Комментарии:
1. Как вы надеетесь взять на себя роль IAM без предоставления учетных данных? Кроме того, вы не указали, какой ответ об ошибке вы получили.
2. @jarmod спасибо за ответ. Я не получаю ошибку, а пустой ответ. Ожидаемым ответом должны быть access_key, secrete_key и токен сеанса. Причина в том, что я использую IAM, чтобы избежать поворота клавиш.
3. Вы получаете ответ 200 OK? Или код ошибки HTTP?
4. @jarmod да, я получаю 200 OK, но в ответ тело содержит HTML-контент, у которого нет учетных данных
5. Является ли ответ HTML или XML? Он должен быть последним и будет включать ответ.
Ответ №1:
Чтобы вызвать AssumeRole из Postman (или curl и т. Д.), В отличие от использования поддерживаемого AWS SDK, вы должны следовать документации AssumeRole API . Вам также потребуется пройти аутентификацию с использованием учетных данных AWS.
В частности, запрос представляет собой HTTP GET, а параметры передаются в виде строк запроса, например:
GET https://sts.amazonaws.com/
?Version=2011-06-15
amp;Action=AssumeRole
amp;RoleSessionName=stackoverflow-64706420
amp;RoleArn=arn:aws:iam::123456781234:role/myrole
amp;DurationSeconds=3600
Вот как это выглядит в Postman:
И вам нужно будет добавить учетные данные AWS, чтобы ваш запрос API был подписан правильно, например:
Нажмите «Отправить», и ответ будет выглядеть примерно так:
<AssumeRoleResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
<AssumeRoleResult>
<AssumedRoleUser>
<Arn>arn:aws:sts::123456781234:assumed-role/123456781234/stackoverflow-64706420</Arn>
<AssumedRoleId>ARO123EXAMPLE123:stackoverflow-64706420</AssumedRoleId>
</AssumedRoleUser>
<Credentials>
<AccessKeyId>ASIAIOSFODNN7EXAMPLE</AccessKeyId>
<SecretAccessKey>wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY</SecretAccessKey>
<SessionToken>
AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW
LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==
</SessionToken>
<Expiration>2020-12-09T13:34:41Z</Expiration>
</Credentials>
<PackedPolicySize>6</PackedPolicySize>
</AssumeRoleResult>
<ResponseMetadata>
<RequestId>c6104cbe-af31-11e0-8154-cbc7ccf896c7</RequestId>
</ResponseMetadata>
</AssumeRoleResponse>
Комментарии:
1. спасибо, это сработало. Есть идеи, почему GetSessionToken не будет работать (при условии, что он был добавлен в качестве разрешения в пользовательском ARN)?
2. @MitaleeRao какой ответ вы получаете?
3. На самом деле я получаю токены, но они не работают при другом вызове, который я делаю SPAPI. Я предполагаю, что они где-то отключили какую-то конфигурацию. Предположим, что роль работает! Спасибо!
Ответ №2:
Для вызова AssumeRole необходимо использовать учетные данные для пользователя IAM или роли IAM. boto3 должен получать учетные данные из стандартных мест, которые он ищет (например, ~/.aws/config) [ref:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html ]. Возможно, вы могли бы попробовать предоставить учетные данные AWS на вкладке Авторизации в Postman, выбрав тип в качестве подписи AWS, а затем вызвать AssumeRole.
Комментарии:
1. @JaueshCP Я пытаюсь использовать предполагаемую роль на основе этого: docs.aws.amazon.com/IAM/latest/UserGuide /…