AWS STS принимает на себя роль: получает токен сеанса

#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 /…