使用Python从AWS S3下载文件时遭遇“Unable to locate credentials”错误求助
解决S3下载时“Unable to locate credentials”的问题
嘿,我来帮你搞定这个头疼的凭证找不到问题!我之前也碰到过类似的坑,给你梳理几个排查方向和解决办法:
一、先检查最基础的凭证正确性
- 先确认你的
ACCESS_KEY和SECRET_KEY有没有拼写错误,比如大小写不对、末尾多了空格,或者复制的时候漏了几位——这种低级错误最容易被忽略! - 可以直接去AWS控制台的IAM用户页面,重新复制一遍正确的密钥,替换掉代码里的内容试试。
二、检查代码里的凭证传递逻辑
你的代码写法本身是没问题的,但有时候可能因为其他因素导致凭证没被正确读取,给你一个更严谨的写法试试:
from boto3.session import Session # 确保这里的密钥是完全正确的 ACCESS_KEY = 'ABC' SECRET_KEY = 'XYZ' # 初始化session session = Session( aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY ) s3 = session.resource('s3') # 指定你的桶名 your_bucket = s3.Bucket('bucket_name') # 遍历文件并下载(补充你之前没写完的下载逻辑) for s3_file in your_bucket.objects.all(): print(f"正在处理文件: {s3_file.key}") # 下载到本地,第一个参数是S3上的文件key,第二个是本地保存的路径/文件名 your_bucket.download_file(s3_file.key, f"./downloads/{s3_file.key}")
三、排查系统环境的干扰
- 如果你的电脑上设置了
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY这两个环境变量,boto3会优先读取环境变量里的内容,要是环境变量里的密钥不对,就会报错。可以暂时清空这两个环境变量再试。 - 另外,如果你本地有
~/.aws/credentials(Linux/Mac)或者C:\Users\<你的用户名>\.aws\credentials(Windows)这个文件,boto3也会优先读取这里的凭证。如果这个文件里的配置有问题,也会导致找不到凭证,可以先把这个文件重命名,再运行代码试试。
四、额外提醒
千万不要把密钥硬编码到代码里!以后可以用AWS凭证文件、环境变量或者IAM角色(如果是在EC2/ECS等AWS服务上运行)来管理密钥,这样更安全。
内容的提问来源于stack exchange,提问作者Taukheer
相关产品推荐
相关产品推荐

