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

跨账号PutObject事件无法触发AWS Lambda问题求助

跨账号S3 PutObject无法触发Lambda的解决方案

核心问题分析

跨账号操作场景下,S3代表源账号(账号A)调用目标账号(账号B)的Lambda时,会被Lambda默认的资源策略拦截,这是导致事件无法触发的核心原因——同账号上传时调用方是账号B自身,权限不受限制,但跨账号调用需要额外配置权限放行。

具体修复步骤

1. 更新Lambda的资源策略

在账号B的Lambda函数资源策略中,添加允许账号A的S3服务触发调用的规则,示例策略如下:

{
  "Version": "2012-10-17",
  "Id": "S3InvokeLambdaPermission",
  "Statement": [
    {
      "Sid": "AllowCrossAccountS3Trigger",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_B_ID:function:YOUR_LAMBDA_NAME",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "ACCOUNT_A_ID"
        },
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:s3:::YOUR_ACCOUNT_B_BUCKET_NAME"
        }
      }
    }
  ]
}
  • 替换占位符:REGION为你的AWS区域,ACCOUNT_B_ID为账号B的ID,YOUR_LAMBDA_NAME为目标Lambda函数名,ACCOUNT_A_ID为账号A的ID,YOUR_ACCOUNT_B_BUCKET_NAME为账号B的接收桶名。

2. 验证S3事件通知的触发类型

如果Glue Job使用的是CopyObject而非直接PutObject操作,S3会触发s3:ObjectCreated:Copy事件而非PutObject。此时需要在账号B的S3桶事件通知中,补充勾选ObjectCreated:Copy事件类型,确保覆盖跨账号操作的事件类型。

3. 排查过滤规则

检查账号B的S3事件通知是否配置了前缀/后缀过滤规则,确认跨账号上传的对象路径符合触发条件,避免因过滤规则导致事件被忽略。

4. 日志排查定位

  • 查看账号B的CloudTrail日志,确认S3是否尝试触发Lambda,若存在Lambda.InvalidPermission类错误,说明资源策略配置仍有问题。
  • 查看Lambda的CloudWatch日志,若没有调用记录则说明事件未送达,若有错误日志则根据提示调整配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:30:58