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

在ECS EC2部署ML模型时从S3加载文件夹遇boto3访问拒绝

问题排查与解决方案

一、权限拒绝问题的可能原因及修复

  1. 凭证未正确生效
    你的代码里创建了boto3.Session但没用来初始化S3客户端,直接调用boto3.client('s3')会优先使用ECS任务角色的凭证(如果配置了),而非你传入的KEY和ACCESS。修改代码:

    my_file = 'folder_artifacts'
    session = boto3.Session(aws_access_key_id=KEY, aws_secret_access_key=ACCESS)
    s3client = session.client('s3')  # 用session创建客户端
    
  2. IAM实体权限不足
    即便密钥正确,对应的IAM用户/角色必须拥有S3访问权限:

    • 确保IAM策略包含s3:GetObject权限,且资源范围覆盖目标Bucket及所有子对象(比如arn:aws:s3:::your-bucket/folder_artifacts/*)
    • 检查Bucket Policy,确认没有拒绝该IAM实体的访问规则,同时存在允许访问的规则
  3. 区域配置不匹配
    如果你的S3 Bucket不在默认区域,初始化客户端时需要指定对应区域:

    s3client = session.client('s3', region_name='us-west-2')  # 替换为你的Bucket所在区域
    

二、加载S3文件夹的特殊操作

S3没有真正的文件夹概念,folder_artifacts只是对象前缀,无法直接用get_object获取整个文件夹。你需要遍历前缀下的所有文件并逐个下载:

import boto3

session = boto3.Session(aws_access_key_id=KEY, aws_secret_access_key=ACCESS)
s3client = session.client('s3', region_name='your-region')

bucket_name = 'your-bucket'
prefix = 'folder_artifacts/'  # 注意末尾的斜杠,避免匹配到类似folder_artifacts_xxx的前缀

# 列出前缀下的所有对象
paginator = s3client.get_paginator('list_objects_v2')
for page in paginator.paginate(Bucket=bucket_name, Prefix=prefix):
    for obj in page.get('Contents', []):
        file_key = obj['Key']
        # 跳过前缀本身(如果是虚拟文件夹)
        if file_key == prefix:
            continue
        # 下载文件到本地,这里假设本地路径和S3前缀对应
        local_file_path = file_key.replace(prefix, '')
        s3client.download_file(bucket_name, file_key, local_file_path)

如果容器中安装了AWS CLI,也可以用更高效的s3 sync命令:

aws s3 sync s3://your-bucket/folder_artifacts/ ./local-folder/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:45:10