如何在AWS Wrangler中配置SSL验证访问S3存储资源
问题原因
你错误混淆了SSL配置的两个参数,将CA根证书路径赋值给了client_cert参数,二者用途完全不同:
verify参数:指定CA根证书路径,用于验证服务端SSL证书的合法性,是你之前正常运行的boto3代码中实际使用的参数client_cert参数:仅用于双向TLS认证场景,指定客户端自身的证书/密钥路径,用于服务端验证客户端身份,你当前场景不需要该参数
参数误用后botocore尝试将CA根证书解析为客户端证书,格式不匹配就抛出了PEM解析错误。
解决方案
以下是可正常运行的AWS Wrangler配置代码,对齐你原有的boto3 SSL配置逻辑:
import awswrangler as wr import boto3 import botocore import os aries_cert = os.environ['ARIES_CERT'] # 配置WR全局参数 wr.config.s3_endpoint_url = "https://MY-ENDPOINT.com" # 对应boto3 client的verify参数,传入CA根证书路径 wr.config.s3_verify_ssl = aries_cert # 配置超时、重试策略 wr.config.botocore_config = botocore.config.Config( retries={"max_attempts": 3}, connect_timeout=600, read_timeout=600 ) # 创建boto3会话 session = boto3.Session( aws_access_key_id=os.environ['AWS_ACCESS_KEY_ID'], aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"], region_name="us-east-1" ) # 路径处理 path = f's3://{path}' if not path.startswith('s3://') else path # 读取Parquet转为DataFrame df = wr.s3.read_parquet( path=path, dataset=True, boto3_session=session )
注意事项
如果配置完成后仍有报错,可依次排查:
- 环境变量
ARIES_CERT对应的证书文件路径是否存在 - 程序进程是否有该证书文件的读取权限
- 证书是否为标准PEM格式
boto3核心组件使用逻辑
Session
Session是boto3的配置容器,存储了认证信息(AK/SK、Token)、区域、自定义配置等所有上下文配置:
- 不显式创建Session时,boto3会自动生成一个全局默认Session,从环境变量、本地配置文件读取默认配置
- 多账号、多环境、自定义配置的场景必须显式创建独立Session,避免配置互相污染
- 所有Client、Resource实例都需要从Session生成
Client
Client是底层API封装,和AWS服务的REST接口一一对应:
- 所有AWS服务都支持Client调用
- 接口返回原生字典格式的响应,灵活性最高,可以拿到所有返回字段
- 适合需要细粒度控制请求、调用冷门API、需要处理原始响应数据的场景
Resource
Resource是高层面向对象的API封装,仅覆盖常用服务的常用操作:
- 目前仅S3、EC2、DynamoDB等部分常用服务提供Resource接口
- 把服务资源抽象为Python对象,比如
s3.Bucket('bucket-name')、s3.Object('bucket','key'),代码更简洁易读 - 适合常用的CRUD操作,不需要处理原始响应的场景
内容的提问来源于stack exchange,提问作者Wassadamo
相关产品推荐
相关产品推荐

