【问题标题】:How to know who started or stopped EC2 instance using AWS Serverless application如何知道谁使用 AWS Serverless 应用程序启动或停止了 EC2 实例
【发布时间】:2019-04-16 03:32:39
【问题描述】:

我们开发了一个 AWS Serverless Lambda 应用程序,使用 dotnetcore 对 EC2 实例执行操作,例如启动或停止 EC2 实例并与 Aws API Gateway 集成。

dotnetcore 应用程序中的 serverless.template

"StartInstanceById" : {
  "Type" : "AWS::Serverless::Function",
  "Properties": {
    "Handler": "EC2_Monitoring_Serverless::EC2_Monitoring_Serverless.Functions::StartInstanceById",
    "Runtime": "dotnetcore2.1",
    "CodeUri": "",
    "MemorySize": 256,
    "Timeout": 30,
    "Role": "arn:aws:iam::2808xxxx1013:role/lamda_start_stop",
    "Policies": [ "AWSLambdaBasicExecutionRole" ],
    "Events": {
      "PutResource": {
        "Type": "Api",
        "Properties": {
          "Path": "/instances",
          "Method": "Get"
        }
      }
    }
  }
}

当我调用 API 网关 url 时,上述 Lambda 函数可以正常启动 ec2 实例。

为了调用这些 API,我们创建了 Angular 6 应用程序并使用 Aws Cognito 用户池提供了身份验证。 于是 cognito 用户登录网站并获取所有 EC2 信息。

如果用户想要停止/启动 EC2 实例,用户将单击调用 lambda 函数的相关 api 网关 url 的特定按钮,它工作正常。

现在的问题是谁执行了该操作。在对 stackoverflow 和 aws 社区论坛进行大量研究以了解谁启动或停止了 EC2 实例之后,我发现 Aws CloudTrail 记录了用户启动或停止实例时的信息。

所以我创建了一个跟踪,我可以看到 S3 存储桶中的日志。但是在我打开的每个日志中,我看到角色“arn:aws:iam::2808xxxx1013:role/lamda_start_stop”被捕获。我知道这是因为 Lambda 函数。但我想知道谁真正停止了实例。

请告知如何获取用户详细信息!

【问题讨论】:

  • 为什么要使用lambda 启动/停止ec2?更好的解决方案是在cloudwatch 内部设置。

标签: amazon-web-services amazon-s3 amazon-ec2 aws-lambda aws-sdk


【解决方案1】:

lambda 执行角色在cloudtrail 中打印的原因是因为它已经启动了停止ec2 实例的进程。此处假定角色(而不是实际用户)。

要打印您的实际用户,您需要在 lambda 中实现日志,它将日志打印到 Cloudwatch。您可以从这些日志中获取实际用户或任何其他自定义信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 2016-11-22
    • 1970-01-01
    • 2022-11-18
    • 2018-08-15
    • 2015-06-20
    • 2014-12-14
    相关资源
    最近更新 更多