我有一些 EC2 实例,我真的不知道是谁启动了它们。
有没有办法知道谁启动了特定实例?
最佳答案
假设您已经在控制台中配置了 CloudTrail(以监控正确的事件),这是一个可能的解决方案,可以在给定实例 ID 的情况下检索启动某个 EC2 实例的用户名。
此解决方案使用 AWS CLI检索有关启动了哪些实例的信息,以及 jq用于解析。
调用 aws cloudtrail lookup-events
时函数,我们可以指定:
首先,让我们定义实例 id 和区域变量:
$ instance_id="i-08dcc12c018737061"
$ region="us-east-1"
然后,让我们找出实例何时启动:$ instance_launch_date=$(aws ec2 describe-instances --instance-ids $instance_id --region $region | jq '.Reservations[].Instances[].LaunchTime')
$ echo $instance_launch_date
"2020-07-08T15:21:02.000Z"
现在,让我们清理日期,使其格式适合 CloudTrail API。$ launch_date=$(sed -E 's/\"([0-9]{4})-([0-9]{2})-([0-9]{2}).([0-9]{2}):([0-9]{2}):([0-9]{2}).+/\2\/\3\/\1 \4:\5:\6/' <<< $instance_launch_date)
$ start_date=$(date -d "${launch_date}" +"%s")
$ echo $start_date
1594221662
现在,让我们将结束日期定义为实例启动的日期加上 1 分钟:$ end_date=$(date -d "${launch_date} 1 min" +"%s")
echo $end_date
1594221722
现在让我们调用 CloudTrail API,并使用 jq
过滤输出:aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=RunInstances --start-time $start_date --end-time $end_date --region $region | jq --arg INSTANCE_ID "$instance_id" '.Events[] | select(.CloudTrailEvent | fromjson | .responseElements.instancesSet.items[].instanceId | contains($INSTANCE_ID)) | .Username '
"paolo"
关于amazon-web-services - 哪个用户启动了 EC2 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23489381/