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

仅知AWS Bucket与对象名,Python无密钥下载S3文件报错如何解决?

无需AWS密钥下载S3对象的可行方法

只有当目标S3桶或对象本身允许无授权访问,或者能借助其他AWS授权机制时,才能不用Access Key/Secret Key完成下载,具体方案如下:

1. 目标对象/桶已设置公开可读权限

如果桶的所有者已将目标对象或整个桶配置为公开可读,可以用两种方式下载:

方式一:直接用HTTP请求下载(无需boto3)

直接构造对象的公开URL,用requests库发起请求即可,URL格式为https://<桶名>.s3.<区域>.amazonaws.com/<对象键>,示例代码:

import requests

# 替换为实际的桶名、区域和对象键
bucket_name = "yz"
region = "us-east-1"  # 比如国内区域用cn-north-1
object_key = "keh.docx"
public_url = f"https://{bucket_name}.s3.{region}.amazonaws.com/{object_key}"

response = requests.get(public_url)
with open("keh.docx", "wb") as file:
    file.write(response.content)

方式二:用boto3匿名客户端访问

boto3支持匿名访问公开资源,修改你的代码如下:

import boto3

# 创建匿名S3资源客户端
s3 = boto3.resource('s3', aws_access_key_id='', aws_secret_access_key='')
s3.Bucket('yz').download_file(Key='keh.docx', Filename='keh.docx')

2. 代码运行在AWS服务环境内(如EC2、Lambda)

如果代码部署在AWS的EC2实例、Lambda函数等托管服务上,给该服务实例附加具备S3读取权限的IAM角色即可。boto3会自动从环境中获取角色的临时凭证,无需手动配置密钥,你的原有代码可以直接运行。

3. 使用预签名URL

让桶的所有者生成一个预签名下载URL(包含临时授权信息,可设置有效期),你直接用HTTP请求访问这个URL就能下载对象,不需要自己的AWS密钥。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:12:45