AWS Lambda函数忽略指定执行角色权限配置问题求助
这问题我之前也碰到过,大概率是这几个常见原因之一,咱们一步步拆解排查:
1. IAM角色被附加了额外的权限策略
你创建的lamba-s3-orca-resources角色,可能除了你自定义的内联策略orca-resources-only,还被悄悄加上了其他托管/内联策略(比如AmazonS3FullAccess、AdministratorAccess这类权限范围极广的策略)。这些额外策略会直接赋予角色访问所有S3桶的权限,自然能读取orca-exe的内容。
排查方法:
- 打开IAM控制台,找到
lamba-s3-orca-resources角色 - 切换到「权限」标签,查看所有已附加的策略(包括托管策略和内联策略)
- 检查这些策略里是否有针对S3的全量权限,或者明确允许访问
orca-exe的语句
2. 目标桶orca-exe的桶策略允许匿名/广泛访问
你之前把orca-resources设为公开,会不会不小心给orca-exe也配置了类似的公开访问桶策略?如果orca-exe的桶策略允许所有用户执行s3:ListBucket动作,那么即使你的Lambda执行角色没有显式授权,也能通过匿名身份成功调用listObjects接口。
排查方法:
- 打开S3控制台,找到
orca-exe桶 - 切换到「权限」标签,查看「桶策略」
- 检查是否有类似这样的危险语句:
{ "Effect": "Allow", "Principal": "*", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::orca-exe" }
如果有,说明这个桶允许任何人列出内容,自然包括你的Lambda。
3. AWS组织服务控制策略(SCP)的影响(若账号属于组织)
如果你的AWS账号是AWS Organizations的成员,可能存在SCP(服务控制策略)允许所有S3操作。SCP的优先级高于IAM用户/角色的自定义策略,会直接覆盖你设置的orca-resources-only策略。
排查方法:
- 登录AWS Organizations控制台,查看当前账号的SCP配置,确认是否有允许全S3访问的策略。
修复建议
- 清理IAM角色的冗余权限:移除
lamba-s3-orca-resources角色上所有不必要的附加策略,只保留你自定义的orca-resources-only策略。 - 修正
orca-exe的桶策略:移除任何允许匿名或广泛访问的语句,确保只有你明确授权的主体能访问该桶。 - 用IAM Access Analyzer验证权限:使用IAM Access Analyzer工具,检查你的Lambda角色是否真的被允许访问
orca-exe的s3:ListBucket动作,它会帮你精准定位所有权限来源。
另外补充个小细节:你代码里调用的s3.listObjects()对应的IAM动作确实是s3:ListBucket(AWS IAM动作是大小写敏感的,正确动作名是s3:ListBucket而非小写的s3:listObjects),你的自定义策略里已经针对orca-resources授权了这个动作,但这和访问orca-exe无关,所以不是问题所在。
内容的提问来源于stack exchange,提问作者ccjmne

