如何让Boto3读取自定义名称的S3凭证文件而非默认.aws/credentials
解决方案
推荐方案:直接使用Boto3 Session内置参数指定自定义凭证文件
Boto3本身支持直接指定自定义的凭证文件路径,不需要手动解析配置,代码更简洁:
import boto3 import os # 构造凭证文件绝对路径,避免相对路径导致的读取失败问题 cred_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'tester') # 初始化Session时指定自定义凭证文件和对应profile session = boto3.Session( # 替换为你tester文件中实际使用的profile名称,比如配置头是[default]就填'default' profile_name='default', aws_shared_credentials_file=cred_file_path ) # 直接通过Session生成S3客户端,不需要手动传入三个凭证参数 s3_client = session.client('s3')
方案二:手动解析凭证文件获取三个参数
如果你需要单独获取ACCESS_KEY、SECRET_KEY、SESSION_TOKEN三个变量赋值,可以用Python标准库configparser解析符合ini格式的tester文件:
import boto3 import configparser import os cred_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'tester') config = configparser.ConfigParser() config.read(cred_file_path) # 替换为实际profile名称 profile = 'default' ACCESS_KEY = config.get(profile, 'aws_access_key_id') SECRET_KEY = config.get(profile, 'aws_secret_access_key') # 永久凭证无session token时,fallback会返回None,你也可以直接删去s3客户端中的aws_session_token参数 SESSION_TOKEN = config.get(profile, 'aws_session_token', fallback=None) # 初始化S3客户端 s3_client = boto3.client( 's3', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY, aws_session_token=SESSION_TOKEN, )
注意事项
- 如果你使用的是永久访问密钥,tester文件中没有
aws_session_token字段,直接删除S3客户端初始化时的aws_session_token参数即可。 - 请将tester文件加入项目的忽略列表(如
.gitignore),避免凭证意外提交到代码仓库泄露。
内容的提问来源于stack exchange,提问作者IBSurviver
相关产品推荐
相关产品推荐

