Upload
vonga
View
225
Download
2
Embed Size (px)
Citation preview
Inside TAE
TAE
SAE
BAE
GAE
• 定位:淘宝的受控第三方开放基础设施
• 最初需求来自店铺装修市场
– 个性化展示和交互
– 更复杂的后台业务逻辑
• 现在已经是一个完备的AE系统
– PHP
– JAVA
TAE
淘宝U站(优站) uz.taobao.com
uz.taobao.com
• 800+ TAE App
• 2000+ App版本
• 日均UV 130W+,PV 1200+
• 平均单用户浏览页面9.08个
• 平均访问时长7分38秒
PHP 容器篇
负载均衡(LVS/F5)
Nginx
App Container
App Container
…
…
Cache File 业务服务
Mysql
开发者后台
小二 后台
应用中心
小二
ISV
浏览者
Nginx
日志系统
弹性计算
监控系统
部署系统
Nginx资源池
应用容器池
系统概览
xiaoxiqi │app.yml └view │─a.php └templates └ a.tpl
grid xiaoxiqi
… appx
开发者后台
部署
<?php $a = $appEngine->find("xService"); echo "<br>".$a->someMethod(); ?>
grid xiaoxiqi
… appx
负载均衡设备
Nginx Nginx
xiaoxiqi │app.yml └view │─a.php └templates └ a.tpl
<?php $a = $appEngine->find("xService"); echo "<br>".$a->someMethod(); ?>
PhpProgram └─BlockStatement │─ExpressionStatement │ └─ … └─EchoStatement └─ MethodInvokeStatement grid xiaoxiqi
… appx xService
负载均衡设备
Nginx
$a = $appEngine->find("xService"); echo "<br>".$a->someMethod();
店铺装修
grid
app1 app2
grid
app2 app3
grid
app3 app1
RPC
淘 宝 基 础 服 务 Tair TFS MySql OceanBase Meta HSF
LB/LVS
Tae Nginx Tae Nginx
RPC
HSF HSF
HTTP
店铺浏览
LB/LVS LB/LVS
路由
用户域 编程规范
JVM (For TAE)
Linux Security Container(T4 for TAE)
Linux OS With Sandbox
服务接入(proxy)
Smarty模板
TAE Servlet层
前端组件
安全
JBoss/Jetty(With Java Security)
DB服务
文件服务
日志服务
缓存服务
业务服务
Tae Common Engine层
PDO组件
应用逻辑
系统域
动态配置
PHP容器结构
PHP Groovy Velocity 缓存 加载 编译 执行
权限 Context 分派 缓存 过滤 流控 绑定 Caja
部署 监控
服务API
对Quercus的改进
没有大规模商用的实验室产品
能够工业化,大规模使用的产品 U站 -- 9个月 -- 800+ ISV,应用版本
PHP安全
• 没有PHP原生环境
– 第三方代码:PHP;容器代码:java
– 弱类型语言操作强类型语言
– 代码执行引擎和代码本身处于不同的层级
• 前端安全
– Caja沙箱 + HTML/CSS 白名单过滤
– 上线前黑白盒扫描,上线后定时黑盒扫描
• 资源安全
– 死循环;耗时操作
– 大内存
JS安全解决方案
物理机
Linux Container
IpTables
JVM 4 TAE Grid 进程
Java SandBox
JBOSS/Jetty
Quercus Engine
PHP 白名单
app1 app2 appx …
物理机
Linux Container
IpTables
JVM 4 TAE Grid 进程
Java SandBox
JBOSS/Jetty
Quercus Engine
PHP 白名单
app1 app2 request response
Caja SandBox TB
MLFilter
TaoBao Header
站点类型定制前端
TaoBao Footer
AppCode HtmlOut
js/css
JAVA 容器篇
需要解决什么问题?
• 安全问题!
– ISV代码、数据安全
– *淘宝买家数据安全
– *淘宝数据安全
• 提供JAVA运行容器
难点 - 安全
• 应用层安全问题 – Cookie & session 泄漏用户信息
– Html、js、css、pic 等问题
– 调用未授权的服务
– Sql 注入
– XSS CSRF
• 系统层安全问题 – 资源竞争 (死循环、线程数耗尽)
– 攻破Java沙箱
– 系统0day
后果 很严重
难点– 安全
• 设计时基本考虑 – 需要的是安全体系,每一层有具体的职责
– “Java沙箱被by pass”是网络、系统层防御措施的基本假设
• 安全体系层级 – 应用层
– JVM层
– 系统层
– 网络层
– 运行时监控
JAVA应用安全体系
单用户单进程
IPtables
监控审计
普通用户权限
T4 chroot T4 Capability Instance
selinux
Iptables 监控
危险指令调用监控
JVM
层
JDK定制
Java Policy File
Security Manager
应用层
CA
JA
Dru
id
TBM
L
Co
okie&
Session
资源限制
系统层
网络层
JVM
层
上线前TopScan黑盒扫描
上线后定期TopScan黑盒扫描
上线前STC代码扫描
单进程多应用方案
• 单进程 多app
• 问题
– 权限无法隔离
– 资源也无法隔离
App1 App2
VM
Jetty
App3 App n
单用户单进程方案
• 单进程单App
• 优点
– 资源隔离有好转
– 可以初步做到文件访问权限隔离
App1
VM
Jetty 1
App2
Jetty 2
App4
Jetty 3
App n
Jetty n
• 单用户单进程 – 文件权限的设置 用户最小权限
• 问题 – 用户管理需要root权限,root权限如果被拿到,其他app就危险了
– 文件权限的管理复杂
– 如果root权限需要开通,没有办法将instance的capability全部去除,那安全级别就会降低
– 资源隔离还不够彻底
setfacl -m g:tae_apps:x / setfacl -m g:tae_apps:x / setfacl -d -m g:tae_apps:- /etc setfacl --set u::rw,g::r,o::r,g:tae_apps:- /etc/group setfacl --set u::rw,g::r,o::r,g:tae_apps:- /etc/passwd setfacl --set u::rw,g::r,o::r,g:tae_apps:- /etc/shadow setfacl -b -R /root setfacl -m g:tae_apps:- /root setfacl -m g:tae_apps:x /home setfacl -d -m g:tae_apps:- /home setfacl -m g:tae_apps:- /home/admin setfacl -m g:tae_apps:- /home/hubble setfacl -m g:tae_apps:- /home/tops
单VM单用户单进程方案
• 单Instance 单进程 – 每个instance有且只有一个java进程
– lxc Instance去除所有的capability
– Instance的root帐号降级为普通帐号
• 优点 – 安全模型更简单粗暴 – 架构更简单 ,管理更方便: 不需要在instance内在搞多用户
PHY
App1
Jetty 1
lxc Instance1
App2
Jetty 2
lxc Instance2
单VM单用户单进程方案
• 问题
– 资源问题 – 会生成大量的lxc incetance
• 需要休眠方案
– IP不够用
• 需要lxc incetance无IP方案
资源问题应对方案
– 按需启动 将长时间不访问的应用进程关掉 当有访问时,启动进程,提供服务
– 两种方式
• 端口转发
• 通道
Nginx
Xinetd
Jetty
在所有定义的服务端口监听连接 守护进程
Fork
Channel channel = System.inheritedChannel();
安全体系回顾
单用户单进程
IPtables
监控审计
普通用户权限
chroot Linux Capability Instance
selinux
Iptables 监控
kernel patch监控
危险指令调用监控
JVM
层
JDK定制
Java Policy File
Security Manager
应用层
CA
JA
Dru
id
TBM
L
Co
okie&
Session
资源限制
系统层
网络层
JVM
层
上线前TopScan黑盒扫描
上线后定期TopScan黑盒扫描
上线前STC代码扫描
Service Center引入
负载均衡(LVS/F5)
Nginx
App Container
App Container
…
…
Cache File 业务服务
Mysql
开发者后台
小二 后台
应用中心
小二
ISV
浏览者
Service Center
Nginx
日志系统
弹性计算
监控系统
部署系统
Nginx资源池
应用容器池
Service Center
• Service Center带来的好处
– 所有的服务调用都通过服务中心
– 网络层设置白名单,只允许访问服务中心
• 潜在性能问题
Service Center性能
• 本地进程通讯 - Tcp Friends – when both endpoints of a TCP connection are on the same machine, the two
sockets are marked as being "friends" in the kernel. Data written to such a socket will be immediately queued for reading on the friend socket, bypassing the network stack entirely
– Google 采用了类似的技术
– 每台物理机上部署一个service center, 加速物理机上的instance与service center的通讯
– 解决总线的问题,但不限于总线
TCP friends :http://lwn.net/Articles/511254/
Put it together
物理机
App1
Jetty 1
T4 Instance1
App2
Jetty n
T4 Instance n
Xinetd
Xinet daemon
Xinet daemon
Service Center
IPC Over TCP Friends
HTTP Requests
Port: 7001 Port: 70096
用户域
编程规范
JVM (For TAE)
Linux Security Container(T4 for TAE)
Linux OS With Sandbox
服务接入(Client)
服务API
MVC
页面组件API
Net (Iptables)
安全
Componet Render Engine
组件管理
Page Meta
动态服务
数据绑定
数据校验
并发渲染
Jetty(With Java Security)
数据源
队列服务
文件服务
日志服务
缓存服务
动态配置
业务服务
Common Engine
Qu
ercu
s
Velo
city
Gro
ovyy
Servlet API
应用逻辑
系统域
动态配置
容器结构
淘宝开放的三种形态
TOP 聚石塔 TAE
服务 数据 运营 导购 行业 垂直
频道 无线 建站 SNS 活动 促销
设计师 开发者 达人 品牌商 TP/ISV
开发小二 运营小二 开发小二 运营小二 开发小二
Q & A
欢迎加入TAE团队
• 这里是第三方代码的执行引擎,运行容器 • 这里涉及从前端到内核的各种技术 • 这里在支持着数千个开发团队和创业公司 • 这里客户是你的上帝,客户代码的上帝是你 • 加入我们,请联系:
– 邮箱: [email protected] [email protected] – 微博:
淘宝林轩 ludvik_淘宝伯昊
– 微信: 床前明月光 ludvik