Amazon AWS и GetCallerIdentity
Я работаю над проектом AWS. Мы хотим иметь возможность выдавать временные учетные данные безопасности STS с ограниченными разрешениями для доступа к сервисам AWS. Мы работаем в.Net Core с C#.
Мы используем STS AssumeRoleAsync()
, который является методом.Net SDK для использования действия AWS AssumeRole для генерации этих учетных данных. Ответ на звонок AssumeRoleAsync()
является AssumeRoleResponse
объект, который состоит из части AssumeRoleUser
объект и Credentials
объект. Одно из свойств AssumedRoleUser
является AssumedRoleId
, который находится в форме role-id:role-session-name
,
У нас есть лямбда-функция, которая обрабатывает вызов AssumeRoleAsync
и возвращает сгенерированные учетные данные в форме объекта JSON. Эта лямбда-функция вызывается через метод API-шлюза.
Все это работает нормально. Выше было просто установить сцену.
Следующее, что мы хотим сделать, это использовать временные учетные данные STS для выполнения других вызовов сервисов AWS. Когда это произойдет, мы хотим иметь возможность использовать GetCallerIdentity()
чтобы получить AssumedRoleId
для человека, которому были выданы полномочия. В частности, role-session-name
представляет интерес для нас.
Поэтому, чтобы попытаться достичь этого, я создал другую функцию Lambda за другим методом API Gateway. Я установил этот метод API Gateway для использования AWS_IAM
авторизация в своей конфигурации запроса метода. В своем запросе на интеграцию я настроил его Invoke with caller credentials
, Функция Lambda просто принимает входящий запрос и вызывает GetCallerIdentity()
и возвращает результат. Я использовал учетные данные, возвращенные из предыдущего AssumeRoleAsync()
вызовите в заголовке авторизации запроса.
На основании информации, найденной в документах по GetCallerIdentity и в основной таблице, на которую ссылается эта страница, я ожидаю получить следующие элементы в ответ от GetCallerIdentity()
вызов:
Account
Arn
UserId
(это важный бит для этого обсуждения)
UserId
должен быть в форме role-id:caller-specified-role-name
точно такой же формы, в которой AssumedRoleId
от звонка до AssumeRoleAsync
был возвращен. Это позволило бы мне получить caller-specified-role-name
и делать то, что нам нужно с этим делать.
Но это не то, что возвращается в UserId
свойство ответа от GetCallerIdentity()
,
Вместо этого все, что UserId
свойство содержит это role-id
- он полностью пропускает существенное caller-specified-role-name
,
Кто-нибудь еще видел такое поведение? Я пропускаю что-то простое? Может ли это быть ошибкой в ответе GetCallerIdentity
?
Я использую следующие компоненты и версии Amazon SDK для выполнения этих различных вызовов:
- Amazon.Lambda.Core / 1.0.0
- Amazon.Lambda.Serialization.Json / 1.1.0
- AWSSDK.Core / 3.3.14
- AWSSDK.Lambda / 3.3.6.2
- AWSSDK.SecurityToken / 3.3.1.9
Спасибо за любую помощь, которую вы можете предложить!
Дерек