拥有IAM用户名、密码、账户ID,如何通过AWS CLI/BOTO3下载S3存储桶文件夹?
IAM用户名密码场景下AWS CLI/Boto3批量下载S3文件配置方法
IAM用户名+密码仅用于AWS网页控制台的身份校验,无法直接用于AWS CLI、Boto3等API/SDK工具的身份验证,这类工具仅支持访问密钥(Access Key ID/Secret Access Key)、临时安全凭证等API类凭证。你可以通过控制台为你的IAM用户生成访问密钥,再配置到工具中实现批量下载。
方案1:自行创建访问密钥(当前IAM用户有权限时)
步骤1:控制台生成访问密钥
- 登录AWS网页控制台,点击右上角用户名,下拉选择「安全凭证」
- 下滑到「访问密钥」板块,点击「创建访问密钥」
- 用途选择「命令行界面(CLI)」,勾选下方的确认提示,依次点击下一步完成创建
- 生成后立即复制保存Access Key ID和Secret Access Key,或下载CSV凭证文件,关闭页面后Secret Access Key将无法再次查看
步骤2:AWS CLI配置与批量下载
- 本地安装AWS CLI后,终端执行
aws configure - 按照提示依次输入生成的Access Key ID、Secret Access Key、S3桶对应的默认区域(如
us-east-1)、默认输出格式(可填json) - 配置完成后执行以下命令即可批量下载指定文件夹下的所有文件:
aws s3 cp s3://<替换为你的桶名>/<替换为桶内文件夹路径> ./<替换为本地保存路径> --recursive
步骤3:Boto3配置与批量下载
完成上述aws configure全局配置后,Boto3会自动读取凭证,无需在代码中硬编码凭证,示例代码如下:
import boto3 import os s3_client = boto3.client('s3') # 替换为实际参数 BUCKET_NAME = "你的S3桶名" S3_FOLDER_PREFIX = "桶内目标文件夹路径/" # 末尾加/避免匹配到同名前缀的其他文件 LOCAL_SAVE_PATH = "./本地保存目录" os.makedirs(LOCAL_SAVE_PATH, exist_ok=True) paginator = s3_client.get_paginator('list_objects_v2') # 分页遍历所有文件,避免单页请求上限问题 for page in paginator.paginate(Bucket=BUCKET_NAME, Prefix=S3_FOLDER_PREFIX): if "Contents" not in page: break for obj in page["Contents"]: # 跳过文件夹占位对象 if obj["Key"].endswith("/"): continue # 生成本地文件相对路径,保留桶内目录结构 relative_path = os.path.relpath(obj["Key"], S3_FOLDER_PREFIX) local_file = os.path.join(LOCAL_SAVE_PATH, relative_path) os.makedirs(os.path.dirname(local_file), exist_ok=True) s3_client.download_file(BUCKET_NAME, obj["Key"], local_file)
方案2:无访问密钥创建权限时
如果你的IAM用户没有创建访问密钥的权限,请联系AWS账户管理员,申请为你的IAM用户分配访问密钥,或添加iam:CreateAccessKey权限后自行生成凭证。
内容的提问来源于stack exchange,提问作者Stacy Garfield
相关产品推荐
相关产品推荐

