Найдите, кто вызвал AWS лямбда-функцию - PullRequest
1 голос
/ 18 июня 2020

У меня есть лямбда-функция, написанная на Python 3.7.

Эта лямбда-функция вызывается некоторыми пользователями через AWS CLI, используя:

  aws lambda invoke --function-name stXXX-XXX out --log-type Tail

Я хочу зафиксировать, кто вызвал моя лямбда-функция через AWS CLI в моем коде.

Каким-либо образом я могу найти, кто вызывает мою лямбда-функцию в python коде boto3?

Ответы [ 2 ]

2 голосов
/ 19 июня 2020

Похоже, ваша ситуация:

  • У вас есть AWS лямбда-функция, которая запускает инстанс Amazon EC2
  • Вы хотите, чтобы лямбда-функция определяла , кто отправил запрос, а затем подтвердил, что они находятся в списке авторизации перед запуском экземпляра Amazon EC2

К сожалению, информация о том, «кто» вызвал функцию лямбда (или, более конкретно, какой Объект IAM, который его вызвал) недоступен.

Объект контекста AWS Lambda в Python не предоставляет эту информацию функции Lambda.

A " более правильный способ - контролировать разрешения IAM, которые определяют, кто может вызывать эту лямбда-функцию . Только правильно уполномоченные лица должны иметь разрешение на вызов lambda:Invoke по этой функции. Точно так же важно ограничить круг лиц, которые могут использовать iam:PassRole в роли IAM, используемой этой функцией, поскольку у нее есть разрешения на запуск экземпляра EC2, и он может использоваться в других функциях, если PassRole не ограничен.

2 голосов
/ 18 июня 2020

Да. Обычно для этого вам необходимо включить событие регистрации данных в CloudTrial:

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

Событие журнала содержит информацию о том, какой пользователь или роль IAM вызвали функцию. Например:

      "userIdentity": {
        "type": "IAMUser",
        "principalId": "A1B2C3D4E5F6G7EXAMPLE",
        "arn": "arn:aws:iam::999999999999:user/myUserName",
        "accountId": "999999999999",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "userName": "myUserName"
      },
...