如何知道谁使用AWS Serverless应用程序启动或停止了EC2实例

时间:2018-11-13 10:14:45

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

我们已经使用dotnetcore开发了一个AWS Serverless Lambda应用程序,以对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用户池提供了身份验证。 因此,认知用户登录网站并获取所有EC2信息。

如果用户要停止/启动EC2实例,则将单击特定的按钮,该按钮将调用lambda函数的相关api网关URL,并且运行良好。

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

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

请建议如何捕获用户详细信息!

1 个答案:

答案 0 :(得分:2)

lambda执行角色之所以被打印在cloudtrail中,是因为它已经启动了停止ec2实例的过程。这里假定角色(而不是实际用户)。

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