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

使用boto3为S3 bucket配置公共访问策略时反复出现MalformedPolicy错误

错误原因
  • 核心问题出在put_bucket_policy方法的传参错误:你给Policy参数传入的是加了单引号的字面量字符串'policy_file.read()',而非文件读取后得到的实际策略内容。这时候传给S3的内容首字符是字母p,自然不符合策略首字节必须为{的要求。
  • 同时你给Bucket参数传入的是硬编码的字符串'bucket_name',不是你预先定义好的存储桶名称变量bucket_name,即便策略问题修复后也会出现找不到存储桶的错误。
修复后的实现代码
import boto3
import json

S3API = boto3.client("s3", region_name="regionname") 
bucket_name = "bucketname"

# 使用with上下文管理器读取文件,自动处理资源释放
with open("../public_policy.json", "r", encoding="utf-8") as policy_file:
    policy_content = policy_file.read()

S3API.put_bucket_policy(
    Bucket = bucket_name,
    Policy = policy_content
)
可选校验步骤

如果修改后仍报错,可按以下顺序排查:

  • 执行代码前先打印policy_content的首字符,确认返回值为{,排除本地JSON文件存在前导空白、BOM头或者编码错误的问题。
  • 用json.loads(policy_content)测试JSON内容能否正常解析,提前发现策略本身的语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:36:04