是否存在可仅凭资源ARN获取对应UserName的AWS CLI命令?
AWS没有提供可直接通过资源ARN一步返回对应使用者UserName的原生单条命令,资源本身默认不会持久化存储创建者身份字段,本质上还是需要依赖CloudTrail的操作审计日志查询,但可以通过封装好的CLI命令或boto3脚本省去手动翻控制台的繁琐流程。
AWS CLI 直接查询命令
该命令直接调用CloudTrail的事件查询接口,自动过滤指定ARN对应的创建类操作,直接返回操作人信息,不需要在控制台逐页翻找日志:
aws cloudtrail lookup-events \ --region <替换为资源所在AWS区域,例如cn-north-1> \ --lookup-attributes AttributeKey=ResourceName,AttributeValue="<替换为目标资源的完整ARN>" \ --query 'Events[?contains(EventName, `Create`) || contains(EventName, `Run`) || contains(EventName, `Put`)].{操作时间:EventTime,操作人用户名:Username,操作事件名:EventName,操作人身份ARN:UserIdentity.Arn}' \ --output table
- 命令执行后会以表格形式返回所有匹配的操作记录,包含操作时间、IAM用户名、操作人身份ARN、具体操作事件名,最早可查询最近90天内的操作(和CloudTrail管理事件默认留存周期一致)。
boto3 批量查询脚本
如果需要批量查询多个资源的对应使用人,可使用以下Python脚本,支持自动翻页拉取全量匹配事件:
import boto3 import json from datetime import datetime, timedelta def query_resource_creator(resource_arn: str, region: str): ct_client = boto3.client("cloudtrail", region_name=region) # 查询时间范围默认设为最近90天,对齐CloudTrail默认留存周期 end_time = datetime.utcnow() start_time = end_time - timedelta(days=90) all_results = [] next_token = None while True: request_params = { "LookupAttributes": [ {"AttributeKey": "ResourceName", "AttributeValue": resource_arn} ], "StartTime": start_time, "EndTime": end_time, "MaxResults": 50 } if next_token: request_params["NextToken"] = next_token response = ct_client.lookup_events(**request_params) for event in response["Events"]: # 过滤资源创建、资源启动类操作事件 event_name = event["EventName"] if any(keyword in event_name for keyword in ["Create", "Run", "Put"]): event_detail = json.loads(event["CloudTrailEvent"]) all_results.append({ "操作时间": str(event["EventTime"]), "操作人用户名": event["Username"], "操作人身份ARN": event_detail["userIdentity"]["arn"], "操作事件名": event_name }) next_token = response.get("NextToken") if not next_token: break return all_results if all_results else "未查询到匹配记录,可能资源创建时间超过90天、ARN输入有误或对应资源类型未开启CloudTrail审计" # 调用示例 if __name__ == "__main__": TARGET_RESOURCE_ARN = "替换为需要查询的资源ARN" RESOURCE_REGION = "替换为资源所在区域,例如us-east-1" print(query_resource_creator(TARGET_RESOURCE_ARN, RESOURCE_REGION))
注意事项
- 以上方案默认查询最近90天的CloudTrail管理事件,如果需要查询创建时间超过90天的资源,需要提前配置CloudTrail日志持久化投递到S3,配合Athena做历史日志查询
- 如果资源是通过IAM角色创建的,返回的用户名字段会显示角色名,需要结合角色会话的
sourceIdentity字段进一步确认实际使用人 - 少部分特殊资源类型的创建事件不会在
ResourceName字段挂载资源ARN,可将查询属性的AttributeKey替换为EventSource,结合事件详情内的资源ID做二次过滤适配
内容的提问来源于stack exchange,提问作者skyfire123
相关产品推荐
相关产品推荐

