Подтвердить что ты не робот

AWS API Gateway: как передать идентификатор IAM функции Lambda?

Я успешно настроил IAM-аутентифицированный доступ к моей функции Lambda с интерфейсом AWS API Gateway, но не смог найти, как передать идентификатор пользователя IAM моей функции Lambda.

Мне нужно точно идентификатор пользователя IAM и не может запускать функцию Lambda при вызове учетных данных IAM-пользователя. Все, что мне нужно - это получить идентификатор пользователя IAM в моей функции Lambda.

Есть ли опция для этого?

4b9b3361

Ответ 1

Поддержка доступа к идентификационной информации и другой информации из контекста запроса API-интерфейса Amazon не была доступна, когда вы разместили вопрос, но в последнее время добавлено, см. Объявление: Контекстные переменные:

Теперь вы можете получить доступ к контекстным переменным из шаблонов сопоставления для получения контекстной информации о вызове API. Вы можете получить доступ к данным, таким как этап, путь к ресурсам и метод HTTP, а также информацию о идентификаторе вызывающего. Эта информация затем может быть передана вместе с вашей интеграцией с использованием переменной $context. [акцент мой]

Ссылка на Доступ к переменной $context Variable содержит $context Variable Reference и существуют различные параметры $context.identity.*, которые должны адресовать ваш прецедент.

Идентификация Cognito

Как указано в Soenke, ответ на аналогичный вопрос OPs на форуме Gateway API амазонки, есть еще недокументированный integration, в результате чего идентификатор Cognito включается в эти переменные $context.identity.*:

чтобы иметь Cognito (не IAM!) IdentityId и IdentityPoolId доступный в Lambda, вы должны включить "Invoke with caller учетные данные" на странице "Запрос интеграции" API-интерфейса API-интерфейса API Ресурс GW. Это приводит к появлению нового контекста struct "identity" (содержащий "cognitoIdentityId" и "cognitoIdentityPoolId", являющийся передается функции Лямбды).

Ответ 2

Вам это не нужно. Каждая функция Lambda может иметь собственный IAM Role, который предоставляет все необходимые разрешения во время выполнения. Это означает, что вы можете предоставить вашей функции Lambda любые разрешения, которые могут потребоваться для ее выполнения. Когда вы используете AWS SDK, он автоматически извлекает эти учетные данные.

См. слайд 22 этой Представление AWS API Gateway.

Ответ 3

Вы можете использовать Cognito с "общедоступным" идентификатором пула, затем присоединить роль к идентификатору пула Cognito, роль, обращающаяся к вашей лямбда, я думаю, что это называется InvokeLambdaRole или что-то

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'REGION:YOUR_POOL_ID',
});

Используйте AWS STS для получения временных учетных данных с ограниченными привилегиями. После этого вы можете использовать API Gateway с аутентификацией AWS_IAM, тогда конечная точка будет вызывать методы Lambda для вас. Или вы можете вызывать lambda непосредственно с учетными данными, которые вы получили, но затем снова вам нужно установить правильные роли для созданного вами пула идентификаторов.

NB: Поместите строго минимальные роли на свой полюс, то есть общедоступный идентификатор, каждый орган может использовать его для получения временного или фиксированного (для отслеживания пользователей через устройства) user_/app_ id.