AWS CLI可列出S3存储桶但Python Lambda访问被拒绝
问题诊断与修复方案
核心问题:IAM策略未附加到Lambda角色
你已经创建了Lambda的IAM角色和对应的S3访问策略,但缺少将策略附加到角色的Terraform资源,导致Lambda执行时没有权限调用S3的ListObjects操作。
修复步骤
在你的Terraform配置中添加aws_iam_role_policy_attachment资源,将S3访问策略绑定到Lambda角色:
resource "aws_iam_role_policy_attachment" "lambda_s3_access" { role = aws_iam_role.lambda.name policy_arn = aws_iam_policy.lambda.arn }
添加后重新执行terraform apply更新基础设施。
额外排查点
如果修复后仍有问题,可检查以下内容:
- S3桶策略:确认桶没有设置拒绝
ListBucket操作的自定义桶策略(当前配置的acl = "private"默认不会有额外限制)。 - Lambda执行环境:如果Lambda部署在VPC内,需要配置S3 VPC端点,否则Lambda无法访问S3服务。
- 资源名称一致性:确保Terraform中引用的桶名
bucket-name和Lambda代码中使用的完全一致,无拼写错误。
验证方法
修复后,可通过CLI查看Lambda角色的权限是否生效:
aws iam list-attached-role-policies --role-name <你的Lambda角色名>
确认输出中包含你创建的S3访问策略,再在AWS控制台重新测试Lambda函数。
内容的提问来源于stack exchange,提问作者clattenburg cake
相关产品推荐
相关产品推荐

