我有一些EC2实例,我不知道是谁推出了它们。
有没有办法知道是谁推出了特定的实例?
答案 0 :(得分:15)
不幸的是,这些信息无法通过API调用直接获得 - 您目前有两种选择:
key-name
来近似您的目标(如果有的话,它是可选的,但通常就位) - 假设您已遵循安全最佳实践并且每个IAM用户使用专用的EC2密钥对(而不是共享密钥),则密钥通常应表示启动该实例的用户;)
记录的信息包括API调用者的身份, API调用的时间,API调用者的源IP地址, 请求参数以及AWS返回的响应元素 服务。
答案 1 :(得分:0)
扩展Steffen Opel关于记录即服务的答案: 您可以使用第三方服务来可视化CloudTrail数据或设置您自己的解决方案。
Amazon Parters可以帮助您找到这样的服务。 如果您想围绕此构建自己的解决方案,那么此TrailDash也可以为您提供帮助。
答案 2 :(得分:0)
假设您已经在控制台中配置了CloudTrail(以监视正确的事件),这是一个可行的解决方案,可以在给定实例ID的情况下检索启动某个EC2实例的用户名。
此解决方案使用AWS CLI检索有关启动了哪些实例的信息,并使用jq进行解析。
调用aws cloudtrail lookup-events
函数时,我们可以指定:
首先,让我们找出实例启动的时间:
$ instance_id="i-123"
$ instance_launch_date=$(aws ec2 describe-instances --instance-ids $instance_id | 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 | jq --arg INSTANCE_ID "$instance_id" '.Events[] | select(.CloudTrailEvent | fromjson | .responseElements.instancesSet.items[].instanceId | contains($INSTANCE_ID)) | .Username '
"paolo"