【问题标题】:Find who invoked AWS Lambda function查找谁调用了 AWS Lambda 函数
【发布时间】:2020-10-08 09:52:59
【问题描述】:

我有用 Python 3.7 编写的 Lambda 函数。

此 Lambda 函数由一些用户通过 AWS CLI 调用:

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

我想在我的代码中捕获谁通过 AWS CLI 调用了我的 Lambda 函数。

有什么方法可以找到谁在 python boto3 代码中调用了我的 Lambda 函数?

【问题讨论】:

  • 您能告诉我们为什么您想要这些信息吗?也就是说,您想要实现的实际目标是什么?然后我们也许可以提供更好的解决方案。
  • @John 这个 Lambda 启动一个 EC2 服务器。但由于组织中的其他人的一般角色将有权调用此 Lambda 并启动 EC2。所以我想在我的 lambda 中验证用户调用的如果它来自授权列表,则仅启动 Ec2。
  • 这里有更好的高级选项,例如服务目录(为您希望用户能够启动的运行时环境创建模板,然后通过 IAM 管理他们的访问),甚至构建 API在 Lambda 前面并让您的用户进行身份验证以使用 API。

标签: python-3.x amazon-web-services aws-lambda boto3


【解决方案1】:

看来你的情况是:

  • 您有一个启动 Amazon EC2 实例的 AWS Lambda 函数
  • 您希望 Lambda 函数检测发出了请求,然后在启动 Amazon EC2 实例之前确认他们在授权列表中

很遗憾,没有关于“谁”调用了 Lambda 函数(或更具体地说,是哪个 IAM 实体调用了它)的信息。

AWS Lambda context object in Python 不向 Lambda 函数提供此信息。

“更正确”的方法是控制决定谁可以调用此 Lambda 函数的 IAM 权限。只有经过正确授权的人员才有权在此功能上调用lambda:Invoke。同样,限制谁可以在此函数使用的 IAM 角色上使用 iam:PassRole 也很重要,因为它有权启动 EC2 实例并且可以在其他函数上使用,除非 PassRole 受到限制。

【讨论】:

  • 有一个函数策略可以帮助限制谁可以调用 lambda。这将是一种预防性控制而不是检测性控制,因此 Lambda 始终可以假定只有授权的 IAM 角色调用它。
【解决方案2】:

是的。通常,您必须在 CloudTrail 中启用 logging data event

默认情况下,lambda 调用的日志记录被禁用,因为它会导致大量日志。

关于哪个 IAM 用户或角色调用该函数的日志事件 contains information。例如:

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

【讨论】:

  • @AWS_Beginner 不幸的是,您不能直接执行此操作。 Wound 需要解析来自 S3 或 CloudWatch Logs 的日志。例如,这可以使用 Athena (S3) 来完成。
  • 在 cloudwatchLogs 中我没有收到此信息。我打印了 lambda 的事件和上下文,但此信息不存在。
  • 这个答案提到了 CloudTrail,而不是 CloudWatch——它们是不同的,提供不同的东西。 CloudTrail 是您想要查看的地方。
  • @AWS_Beginner 您需要的这些信息只能通过 CloudTrial 获得。
猜你喜欢
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2021-07-25
  • 2016-01-29
相关资源
最近更新 更多