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

如何从Cloud Trail的AWS事件触发NotifyEvent负载提取Bucket Name和Key

从S3 Event Bridge触发的CloudTrail NotifyEvent负载中提取Bucket Name和Key

当S3对象上传触发CloudTrail的NotifyEvent并通过Event Bridge传递时,你可以从事件负载的特定字段中提取Bucket名称和对象Key,以下是具体方法:

事件负载关键结构示例

Event Bridge传递的CloudTrail事件核心结构片段如下:

{
  "detail": {
    "eventName": "PutObject",
    "eventSource": "s3.amazonaws.com",
    "requestParameters": {
      "bucketName": "my-demo-bucket",
      "key": "assets/image%20file.jpg"
    },
    "resources": [
      {
        "ARN": "arn:aws:s3:::my-demo-bucket"
      },
      {
        "ARN": "arn:aws:s3:::my-demo-bucket/assets/image%20file.jpg"
      }
    ]
  }
}

提取步骤

提取Bucket Name

有两种可靠方式:

  • 直接读取字段:从detail.requestParameters.bucketName直接获取,这是最简便准确的方式。
  • 从ARN解析:取detail.resources数组第一个元素的ARN,按:::分割字符串,取最后一段(比如arn:aws:s3:::my-demo-bucket分割后得到my-demo-bucket)。

提取Object Key

注意对象Key通常会做URL编码(空格、特殊字符转义),需要解码:

  • 读取并解码字段:先获取detail.requestParameters.key的编码值,再用URL解码工具还原原始键(比如assets/image%20file.jpg解码后为assets/image file.jpg)。
  • 从ARN解析:取detail.resources数组第二个元素的ARN,去掉前缀arn:aws:s3:::bucket-name/后,再进行URL解码。

示例代码(Lambda处理)

如果用AWS Lambda接收Event Bridge事件,Python示例如下:

import urllib.parse

def lambda_handler(event, context):
    # 提取Bucket名称
    bucket = event["detail"]["requestParameters"]["bucketName"]
    
    # 提取并解码对象Key
    encoded_key = event["detail"]["requestParameters"]["key"]
    object_key = urllib.parse.unquote_plus(encoded_key)
    
    # 这里可以添加你的业务逻辑
    print(f"处理Bucket: {bucket} 中的对象: {object_key}")
    
    return {"statusCode": 200, "body": f"已处理对象 {object_key}"}

内容的提问来源于stack exchange,提问作者Manish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:37:37