受限环境下HTML邮件中S3存储测试截图可见性方案咨询
解决方案建议:企业防火墙下自动化测试报告的截图访问问题
看起来你这个场景在企业内网里挺常见的——要把带S3存储截图的HTML报告当邮件附件发,又受限于安全政策不能开S3公共访问,还已经有EC2的IAM权限能上传截图,对吧?我来帮你拆解下这两个方案的实操细节,优先帮你搞定不用跟IT反复沟通的选项:
方案2:EC2代理服务(优先推荐,快速落地)
这个方案完全复用你现有的EC2权限,不需要和IT扯皮CloudFront的配置,是当前最省心的选择。具体可以这么做:
在EC2上搭个轻量代理服务
用你熟悉的语言写个简单的HTTP服务就行,比如Python的Flask或者Node.js的Express,核心逻辑就是接收截图的S3对象键,用EC2的IAM角色权限去S3拉取图片,再返回给请求方:- 举个Python Flask的示例代码:
from flask import Flask, request, send_file import boto3 from io import BytesIO app = Flask(__name__) s3_client = boto3.client('s3') TARGET_BUCKET = "你的S3桶名称" @app.route('/fetch-screenshot') def fetch_screenshot(): screenshot_key = request.args.get('key') if not screenshot_key: return "缺少截图对象键参数", 400 try: s3_response = s3_client.get_object(Bucket=TARGET_BUCKET, Key=screenshot_key) img_buffer = BytesIO(s3_response['Body'].read()) return send_file(img_buffer, mimetype='image/png') except Exception as e: return f"获取截图失败:{str(e)}", 500 if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)
- 举个Python Flask的示例代码:
修改HTML里的图片引用
把原来直接指向S3的图片URL,替换成EC2代理服务的地址,比如把https://your-bucket.s3.amazonaws.com/screenshots/test-run-1.png改成http://你的EC2内网IP:8080/fetch-screenshot?key=screenshots/test-run-1.png。只要接收邮件的同事笔记本能访问到EC2的内网IP,打开HTML附件时就能正常加载截图了。额外的安全&优化小技巧
- 可以给代理服务加个简单的API Key验证,避免内网无关请求乱调用
- 加个缓存逻辑,相同截图请求不用每次都去S3拉,提升加载速度
方案1:CloudFront + S3(备选方案)
如果最终因为企业规范必须走CloudFront,这里给你明确下可行的访问控制策略,方便你跟IT沟通:
- 用CloudFront Origin Access Control(OAC):这是AWS现在推荐的安全配置,完全不需要开S3公共访问,只允许CloudFront从S3拉取内容。然后搭配以下两种方式控制访问:
- CloudFront WAF规则:配置只允许企业内网的IP段访问CloudFront分发,这样外部根本碰不到,符合防火墙要求
- Signed URLs/Cookies:给HTML里的图片链接生成带签名的URL,只有持有有效签名的请求才能通过CloudFront拿到S3内容,安全性拉满
- 这个方案的核心是跟IT确认:是否允许内网访问CloudFront分发,以及是否能配置WAF的IP白名单——这些都是企业IT通常能接受的安全配置,比开S3公共访问靠谱多了。
总结一下:优先冲方案2,快且自主;如果IT有CloudFront的统一管理要求,再用方案1的OAC+WAF组合满足安全政策。
内容的提问来源于stack exchange,提问作者mach
相关产品推荐
相关产品推荐

