如何让AWS Lambda读取S3指定路径证书供webdavclient3调用
解决方案
webdavclient3 的
cert_path、key_path入参要求传入本地文件系统的路径字符串,无法直接识别S3对象或证书内容二进制流,这是报错的根本原因。
Lambda运行环境提供了临时可写目录 /tmp(默认容量512MB,完全满足证书存储需求),你只需要把S3中存储的证书、密钥文件先写入 /tmp 目录,再将本地路径传给webdavclient3即可。
完整代码示例如下:
import boto3 from webdav3.client import Client s3 = boto3.client('s3') # 1. 从S3下载证书并写入临时目录 ## 下载crt证书 cert_obj = s3.get_object(Bucket = "bucketName", Key = 'folder/securityStuff.crt') cert_content = cert_obj["Body"].read() cert_local_path = "/tmp/securityStuff.crt" with open(cert_local_path, 'wb') as f: f.write(cert_content) ## 若存在key密钥文件,按同样逻辑下载写入 key_obj = s3.get_object(Bucket = "bucketName", Key = 'folder/securityStuff.key') key_content = key_obj["Body"].read() key_local_path = "/tmp/securityStuff.key" with open(key_local_path, 'wb') as f: f.write(key_content) # 2. 构造webdav客户端配置,传入本地临时路径 options = { 'webdav_hostname': "https://webdav.server.ru", 'webdav_login': "w_login", 'webdav_password': "w_password", 'cert_path': cert_local_path, 'key_path': key_local_path } client = Client(options) # 后续执行文件同步逻辑即可
注意事项
- Lambda的
/tmp目录内容仅在同一次执行上下文生命周期内保留,冷启动或下次独立执行时会自动清空,无需手动清理残留文件,每次执行重新下载证书即可 - 确认Lambda执行角色的IAM权限包含对应S3桶和证书对象的
s3:GetObject权限 - 如果证书有访问密码等额外配置,按webdavclient3使用规则补充对应参数即可
内容的提问来源于stack exchange,提问作者gabedsantos
相关产品推荐
相关产品推荐

