我们已经使用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函数。但是我想知道是谁真正停止了实例。
请建议如何捕获用户详细信息!
答案 0 :(得分:2)
lambda执行角色之所以被打印在cloudtrail
中,是因为它已经启动了停止ec2
实例的过程。这里假定角色(而不是实际用户)。
要打印您的实际用户,您需要在lambda上实现日志,这会将日志打印到Cloudwatch
。您可以从这些日志中获取实际用户或任何其他自定义信息。