1.背景
1.1 日志审计
日志审计服务App是阿里云日志服务SLS(Simple Log Service)旗下的一款产品,它在继承了日志服务SLS的全部功能以外,还有强大的多账号管理及跨地域采集功能,支持通过资源目录(Resource Directory)的方式有组织性地统一地管理和记录多账号下云产品实例的日志信息,可以便于用户进行统一分析,问题排查,回溯复盘等操作。日志审计APP可以自动化、中心化地采集云产品日志并进行审计,其服务覆盖基础(操作审计、k8s)、存储(OSS、NAS)、网络(SLB、API网关、VPC)、数据库(RDS、PolarDB-X1.0,PolarDB)、安全(WAF、DDOS、SAS、CPS)等产品,还支持审计所需的存储、查询及信息汇总等功能。
1.2 VPC Flow 日志
VPC提供流日志功能,可以记录VPC网络中弹性网卡ENI(Elastic Network Interface)传入和传出的流量信息,帮助您检查访问控制规则、监控网络流量和排查网络故障。对于通过VPC 流日志公测申请的账号,日志审计默认对VPC创建流日志,则会捕获VPC中所有弹性网卡的流量,包括在开启流日志功能后新建的弹性网卡。流日志功能捕获的流量信息会以流日志记录的方式写入日志服务中。其日志字段主要内容参见VPC流日志功能,日志审计在保留全部日志字段的基础上,还富化了一个region字段,用以表示VPC实例所属地域。
2 开启VPC Flow 日志采集
2.1. 使用限制
流日志功能正在公测中,您可以使用阿里云账号开启公测申请,开启后会产生流量和日志存储费用,费用详情请参见流日志功能计费。
图1 开启VPC 流日志采集
对于VPC Flow日志而言,并不是VPC内所有的ECS实例都支持捕获流日志信息,其中不支持捕获Flow日志信息的ECS实例族如下:
ecs.c1、ecs.c2、ecs.c4、ecs.ce4、ecs.cm4、ecs.d1、ecs.e3、ecs.e4、ecs.ga1、ecs.gn4、ecs.gn5、ecs.i1、ecs.m1、ecs.m2、ecs.mn4、ecs.n1、ecs.n2、ecs.n4、ecs.s1、ecs.s2、ecs.s3、ecs.se1、ecs.sn1、ecs.sn2、ecs.t1、ecs.xn4
如果弹性网卡绑定的ECS实例属于以上实例规格族的实例时,亦不支持开启该弹性网卡的流日志捕获。
2.2 多账号及跨域、自动采集能力
2.2.1 多账号汇总
日志审计对资源目录和自定义鉴权的支持使得其天然具备同时采集多账号下的VPC流日志信息的能力,下图是同时采集多个账号下VPC流日志的一个示例。
图2 日志审计采集VPC 流日志的多账号能力
2.2.2 跨域与中心化
在日志审计下开启VPC流日志采集之后,如果开启中心化,日志审计将自动将多账号、多地域下的流日志通过数据加工汇总到是sls下名为slsaudit-center-${center_account}-${region} 的project的vpc_log中。如果不开启中心化功能,则对于不同地域的VPC流日志将自动采集到对应region的对应project的slsaudit-region-${center_account}-${region}的vpc_log中,下图是一个VPC流日志跨域采集汇总的一个示例。
中心化选择 |
VPC实例所属地域A 审计中心所属地域C |
区域A是否有日志 |
是否创建 数据加工 |
中心是否有日志 |
日志存储时间 |
开启中心化 |
A与C同地域 |
区域A有 |
不会创建 |
中心C有 |
取决中心化TTL |
A与C不同地域 |
会创建 |
||||
关闭中心化 |
A与C同地域 |
不会创建 |
中心C无 |
取决区域化TTL |
|
A与C不同地域 |
表1 中心化和区域化区别
图3 日志审计采集VPC 流日志的跨地域功能
开启中心化后,日志审计在slsaudit-center-${center_account}-${region}下会创建3个VPC相关的内置报表,分别是VPC流日志概览、VPC流日志Reject中心、VPC流日志Traffic中心。如果关闭中心化,在日志审计仪表盘主页面对于每个有VPC实例的地域将会分别创建以上3个内置报表,如下图所示。
图4 左图中心化仪表盘Tree,右图关闭中心化仪表盘Tree
2.2.3 自动采集能力
日志审计开启VPC流日志采集功能之后,对于新创建的VPC实例,将会自动自动对齐开通流日志功能,并对满足条件的VPC下的所有ENI的流量信息会以流日志记录的方式写入日志审计。
2.3 精细化日志采集粒度
日志审计支持对VPC实例进行精细化采集粒度控制,用户可以通过账号、地域、实例ID、实例名、标签等属性进行精准采集设置。具体的采集策略可以参考日志审计采集策略一节。
图5 配置精准VPCFLowlog采集策略
云产品 |
采集对象 |
属性 |
说明 |
VPC |
VPC实例 |
账号:account.id |
VPC实例所属的阿里云账号ID |
地域:region |
VPC实例所属的地域,例如:cn-shanghai |
||
实例ID:instance.id |
VPC实例ID |
||
实例名:instance.name |
VPC实例名 |
||
标签:tag.* |
用户自定义的标签名。 将tag.*中的星号(*)替换为您自定义的标签名, 例如tag.level=high, tag.env=test |
表2 采集策略说明
下面将进行几个简单的采集策略示例帮助用户理解如何进行精细化VPC流日志的采集。
# --------------example 1 ----------------
#only scan cn region
keep region == "cn-*"
# accept by default
accept "*"
#-------------example 2-------------------
# accept all high level instances and if not only accept vpc that name starts with test
accept tag.level == "high"
# only scan vpc name start with “test”
keep instance.name == "test*"
# accept by default
accept "*"
3.报表分析与展示
日志审计VPC流日志内置3种报表,一个是VPC Flow日志概览,一个是VPC Reject中心,一个是VPC Traffic中心。
3.1 VPC Flow 日志概览
图6 VPC流日志概览-Action统计、Accept和Reject统计、ENI详情等
图7 VPC流日志概览-Top字节数的源地址、目的地址、每分钟Action次数等
图8 VPC流日志概览-Action源地址运营商分布、Top目标端口、各协议的每分钟包数等
3.2 VPC Reject 中心
图9 Reject 信息汇总
图10 Reject Action详情
3.2 VPC Traffic 中心
图11 Traffic信息概览
图12 Traffic 每分钟字节数及各ENI分钟字节数和包数
4.最佳实践
4.1 VPC内ECS互相访问流量查看
本章节以下图场景为例,例如ECS1和ECS3是同一个VPC(vpc-bp1vh***********9l3e)内不同交换机下的2台云服务器。ECS1(172.16.2.*)和ECS3(172.16.1.*)之间存在一定的的互访流量,假设用户想要查看两者之间的流量随时间变化的详情,可以使用如下sql语句。
图13 VPC内不同交换机下ECS互相访问示意图
eni-id: eni-bp********8ze and dstaddr: "172.16.1.**" | select date_format(from_unixtime(__time__ - __time__% 60), '%H:%i:%S') as time, dstaddr,sum(bytes*8/("end"-start)) as bandwidth group by time,dstaddr order by time asc limit 100
该SQL语句定义了时间time、带宽bandwidth(bps)、目的地址dstaddr三个参数,time和dstaddr为聚合列,并按time从小到大排序,取100条日志。其中参数eni-id的值为ECS1的弹性网卡实例ID,dstaddr的值为ECS3的私网IP地址。
图14 VPC内ECS1访问ECS3的流量带宽变化统计图
4.2 排查公网NAT网关中不同ECS的流量变化
首先登录公网NAT网关,创建NAT网关,在该网关下选择已经创建的VPC( vpc-bp1vh***********9l3e),该VPC下已经创建了交换机vsw-bp1s*******00mj(172.16.2.0/24)和vsw-bp19******kov2(172.16.1.0/24)。
在该NAT网关下新购弹性公网IP (114.**.**.**7)并绑定,在公网NAT网关页面,找到刚才创建的NAT网关,并设置SNAT,然后创建SNAT条目,配置条目粒度为交换机粒度,选中vsw-bp1s*******00mj(172.16.2.0/24)和vsw-bp19******kov2(172.16.1.0/24),然后在公网IP地址列表选择刚刚创建的EIP(114.**.**.**7)。
图 15 公网NAT连接示意图
dstaddr: "114.**.**.**7" and action: ACCEPT and srcaddr: 172.16.1.* | select date_format(from_unixtime(__time__ - __time__% 60), '%H:%i:%S') as time, srcaddr,sum(bytes*8/("end"-start)) as bandwidth group by time,srcaddr order by time asc limit 1000
输入以上SQL语句对日志进行聚合和排列,查看去往某一特定EIP地址的不同ECS实例的流量。其中dstaddr是指刚刚创建的公网EIP地址,srcaddr是指以上ECS几个实例的私网网段,生成流图时x轴为time,y轴为bandwidth,聚合列为srcaddr。其结果如下图所示:
图16 一小时内访问公网EIP的不同ECS源IP的流量示意图
4.3 跨区域跨VPC访问流量查看
如下图所示,首先登录云企业网控制台创建地域为上海的一个云企业网CEN实例(cen-o6lf*****f3kh),然后在此CEN实例下加载网络实例,选择同账号下分别位于青岛和上海的两个VPC实例进行加载。此时系统会自动创建的SLR角色AliyunServiceRoleForCEN,该角色允许转发路由器在目标VPC实例上创建ENI,作为VPC发往转发路由器的流量入口。
图17 CEN下加载不同地域VPC实例示例
图18 同CEN下不同VPC实例之间互相访问示意图
输入以下SQL进行查询, 其中vpc-uf6*****93kf是上海所在的VPC实例,srcaddr是青岛vpc-m5e*****ngyd实例下的交换机挂载的ECS实例i-m5eh******70mn的网段(172.31.*.*)
vpc-id: vpc-uf******93kf and srcaddr : "172.31.*.*" and action: ACCEPT | select date_format(from_unixtime(__time__ - __time__% 60), '%H:%i:%S') as time, sum(bytes*8/("end"-start)) as bandwidth from (select * from log where "end"!=start) group by time order by time asc limit 10
图18 同CEN下不同区域不同VPC实例下的ECS互相访问流量查看示例
5.参考链接
日志审计服务 https://help.aliyun.com/document_detail/164065.html
日志服务SLS https://help.aliyun.com/document_detail/48869.html
资源目录 https://help.aliyun.com/document_detail/94475.html
VPC流日志 https://help.aliyun.com/document_detail/127150.html
开启流日志公测申请 https://page.aliyun.com/form/act1463681010/index.htm
流日志功能计费 https://help.aliyun.com/document_detail/127150.html#title-cdd-pr7-r8m
VPC流日志字段 https://help.aliyun.com/document_detail/127150.html#title-wat-lmx-z21
日志审计采集策略 https://help.aliyun.com/document_detail/170316.html
公网NAT网关https://vpc.console.aliyun.com/nat/cn-hangzhou/nats
云企业网CEN https://cen.console.aliyun.com/cen/list?spm=a2c4g.11186623.0.0.7503558d6gRqA5