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

无法访问AWS S3桶内内容,s3fs返回FileNotFoundError求助

排查s3fs仅能列出S3桶但无法访问桶内内容的问题
  • IAM权限缺失(核心排查项)
    能列出所有桶说明拥有s3:ListAllMyBuckets权限,但访问桶内内容需要额外的权限:

    • 桶级权限:s3:ListBucket(用于列出桶内对象)
    • 对象级权限:s3:GetObject(用于读取文件)
      注意权限的资源范围必须覆盖目标桶及桶内对象,比如正确的IAM策略资源应包含:
    "Resource": [
        "arn:aws:s3:::my-bucket-1",
        "arn:aws:s3:::my-bucket-1/*"
    ]
    

    若仅配置了桶的ARN而没加/*,会导致无法访问桶内子对象。

  • 版本兼容性问题
    你使用的s3fs-2022.11.0、aiobotocore-2.4.0、botocore-1.27.59均为较旧版本,存在已知的兼容性和功能bug:

    • 旧版s3fs处理公共桶匿名访问时可能出现ParseError,这是因为对S3响应的解析逻辑存在缺陷
    • aiobotocore与botocore的版本匹配可能存在冲突,导致API请求异常
      建议升级到兼容的稳定版本,比如:
    conda install -c conda-forge s3fs>=2023.6.0 aiobotocore>=2.5.0 botocore>=1.29.0
    

    升级后重新测试访问。

  • 匿名访问公共桶的配置错误
    匿名访问公共桶时,需显式指定anon=True初始化s3fs实例,否则会默认尝试使用本地认证信息,导致请求异常:

    import s3fs
    fs = s3fs.S3FileSystem(anon=True)
    print(fs.ls('s3://public-bucket-name'))
    

    同时要确认公共桶的桶策略已正确配置匿名访问权限,比如允许s3:ListBucket和s3:GetObject操作。

  • 区域/端点配置不匹配
    若目标桶位于非默认AWS区域,s3fs可能因区域不匹配导致访问失败。需显式指定桶所在的区域:

    fs = s3fs.S3FileSystem(region_name='us-west-2')
    

    对于非AWS的S3兼容存储,还需指定endpoint_url参数。

  • 缓存或会话残留问题
    conda环境中可能残留旧的s3fs会话缓存,导致权限判断异常。可尝试:

    • 重启Python环境或conda环境
    • 删除s3fs的缓存目录(默认路径为~/.cache/s3fs/)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:15:23