You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在可仅凭资源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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:33:25