使用Serverless Framework创建S3 Bucket时遇PutBucketPolicy权限拒绝错误
解决Serverless Framework部署S3 BucketPolicy时的
s3:PutBucketPolicy Access Denied错误 常见原因及对应解决方案
1. S3公共访问阻止(Public Access Block)限制
AWS默认会在账户或Bucket级别开启公共访问阻止机制,即使拥有AdministratorAccess权限,也无法创建包含Principal: "*"(允许所有公共访问)的BucketPolicy,这是此类报错最常见的诱因。
解决方式:
- 若确实需要公共访问:在Bucket资源配置中添加
PublicAccessBlockConfiguration,关闭该Bucket的公共访问阻止:
修改serverless.yml中的filesBucket资源段:filesBucket: Type: AWS::S3::Bucket DeletionPolicy: Delete Properties: BucketName: my-store-files-bucket AccessControl: Private PublicAccessBlockConfiguration: BlockPublicAcls: false BlockPublicPolicy: false IgnorePublicAcls: false RestrictPublicBuckets: false - 若无需公共访问:建议将BucketPolicy的
Principal改为特定IAM实体(如Lambda执行角色、指定IAM用户),避免使用通配符*:filesBucketPolicy: Type: AWS::S3::BucketPolicy Properties: PolicyDocument: Statement: - Effect: Allow Action: - s3:GetObject Resource: arn:aws:s3:::my-store-files-bucket/* Principal: AWS: !GetAtt IamRoleLambdaExecution.Arn # 引用Lambda执行角色的ARN Bucket: Ref: filesBucket
2. 验证IAM用户权限有效性
- 确认本地
default配置文件对应的IAM用户确实附加了AdministratorAccess策略,且没有权限边界(Permission Boundary)或资源级策略限制s3:PutBucketPolicy操作。 - 可通过AWS CLI直接测试权限:
若该命令同样返回权限拒绝,说明IAM用户的权限配置存在问题,需要检查IAM策略的附加情况及限制条件。aws s3api put-bucket-policy --bucket my-store-files-bucket --policy '{"Version": "2012-10-17", "Statement": [{"Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-store-files-bucket/*", "Principal": "*"}]}'
3. 排查Bucket名称冲突
虽然你遇到的是权限错误,但如果my-store-files-bucket已被其他AWS账户占用,也可能引发连锁问题。可以尝试更换一个唯一的Bucket名称重新部署测试。
内容的提问来源于stack exchange,提问作者Ayad E. Korial
相关产品推荐
相关产品推荐

