通过IAM角色访问他人S3桶,如何配置Lambda触发事件?
解决方案
明确结论:必须请求S3桶的所有者配合完成部分配置——因为桶的事件通知、资源策略修改属于桶所有者的权限范围,你无法直接操作。
具体操作分为两部分:
你需要完成的配置
- 创建目标Lambda函数,确保其执行角色具备以下核心权限:
- 允许扮演你已有的、能访问该S3桶的IAM角色(如果Lambda需要读取桶内对象)
- Lambda基础执行权限(比如写入CloudWatch日志)
示例IAM权限片段:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::[对方账号ID]:role/[你被授予的角色名]" }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" } ] } - 如果Lambda需要读取桶内对象,在函数代码中通过
sts:AssumeRole获取对方角色的临时凭证,再用该凭证访问S3——不要试图直接给Lambda执行角色添加S3权限,你没有配置权限。
桶所有者需要完成的配置
- 给S3桶添加事件通知规则,指定当有新对象存入时触发你的Lambda函数。若Lambda和S3不在同一AWS账号,还需在Lambda的资源策略中添加允许该S3桶触发的权限(你可以提前将Lambda的ARN提供给桶所有者)。
- (可选)如果你的Lambda无需扮演已有角色、需要直接访问桶,桶所有者需在S3桶的资源策略中添加允许Lambda执行角色访问桶的权限,但这种方式不如使用你已有的授权角色安全。
补充:你确实无法通过CDK执行bucket.grantRead(bucketLambda),因为该操作会修改S3桶的资源策略,而你没有该桶的所有权,必须由桶所有者完成这部分配置。
内容的提问来源于stack exchange,提问作者bmargulies
相关产品推荐
相关产品推荐

