【新发布】SLS数据加工增值内容服务

内置 GeoIP 库

SLS 数据加工支持对 IP 地址数据的地理位置(GeoIP)进行解析,解析IP地址被分配使用的大致地理位置范围。通过调用数据加工预定义函数 geo_parse 即可实现。

应用场景

我们需要处理的原始数据如下,是 Nginx 访问日志样例数据,其中 client_ip 字段存储的是访问客户端 IP 地址,我们需要对客户端来源地域进行分析,所以第一步需要先解析出 IP 信息对应的地理位置信息。

client_ip: 101.37.0.0
request: GET /product/8396812?from=source-2 HTTP/1.1
http_status: 200

数据加工实现

1. 基于内置GeoIP库解析

SLS 提供了内置 GeoIP 库,可以直接调用,调用方法如下,将解析结果存入 _geo_ 字段中:

e_set("_geo_", geo_parse(v("client_ip")))

解析结果如下,_geo_ 字段中包含了国家、省份(州)、城市、运营商、经纬度等信息:

client_ip: 101.37.0.0
request: GET /product/8396812?from=source-2 HTTP/1.1
http_status: 200
_geo_: {
  "country_en": "CN",
  "province_en": "330000",
  "city_en": "330100",
  "country": "中国",
  "province": "浙江省",
  "city": "杭州市",
  "isp": "阿里云",
  "lat": 30.294,
  "lon": 120.162
}

也可以通过指定 keep_fields 参数来保留需要解析出哪些信息,来减少不需要的数据量,示例如下:

e_set("_geo_", geo_parse(v("client_ip"), keep_fields=("country", "province")))

2. 基于自选GeoIP库解析

如果我们已经购买了 GeoIP 库,想要在数据加工使用自选的 GeoIP 库。数据加工预定义韩式 res_oss_file 支持从 OSS 拉取自选 GeoIP 库文件,并进行解析,需要指定 ip_dbprovider 2 个参数,示例如下:

e_set(
    "geo",
    geo_parse(
        v("client_ip"),
        ip_db=res_oss_file(
            endpoint="http://oss-cn-hangzhou.aliyuncs.com",
            ak_id="your ak_id",
            ak_key="your ak_key",
            bucket="your bucket",
            file="ipipfree.ipdb",
            format="binary",
        ),
        provider="ipip",
    ),
)

自选 GeoIP 库默认输出3个信息,countryprovincecity。如果需要输出更多信息,也可以通过指定 keep_fields 参数来实现。

3. 单事件多IP解析

有的时候,客户端的访问通过了一系列的代理服务器,这些路径上的 IP 地址都会被记录在访问日志中。所以访问日志如下:

client_ip: 101.37.0.0; 101.37.0.1; 101.37.0.2
request: GET /product/8396812?from=source-2 HTTP/1.1
http_status: 200

数据加工支持传入多 IP 的分隔符参数 ip_sep,然后对所有 IP 逐个解析,将解析结果打包在一个 JOSN 对象中。代码如下:

e_set("_geo_", geo_parse(v("client_ip"), ip_sep=";"))

返回结果如下:

client_ip: 101.37.0.0
request: GET /product/8396812?from=source-2 HTTP/1.1
http_status: 200
_geo_: {
  "101.37.0.0": {
    "country_en": "CN",
    "province_en": "330000",
    "city_en": "330100",
    "country": "中国",
    "province": "浙江省",
    "city": "杭州市",
    "isp": "阿里云",
    "lat": 30.294,
    "lon": 120.162
  },
  "101.37.0.1": {
    "country_en": "CN",
    "province_en": "330000",
    "city_en": "330100",
    "country": "中国",
    "province": "浙江省",
    "city": "杭州市",
    "isp": "阿里云",
    "lat": 30.294,
    "lon": 120.162
  },
  "101.37.0.2": {
    "country_en": "CN",
    "province_en": "330000",
    "city_en": "330100",
    "country": "中国",
    "province": "浙江省",
    "city": "杭州市",
    "isp": "阿里云",
    "lat": 30.294,
    "lon": 120.162
  }
}

威胁情报扫描

SLS 数据加工提供内置函数 e_threat_intelligence,可用于扫描数据内容是否存在威胁情报,比如检查访问 IP 是否存在威胁。
阿里云威胁情报服务提供最近30天出现的威胁情报信息,每天更新一次。

应用场景

实时数据审计

我们的服务系统可能时时刻刻接受着来自世界各地的访问、或者是文件上传,如何快速识别出访问者是否有可能怀有恶意、或者上传内容是有潜在风险,从而把风险带来的损失降到尽可能低。

历史事件溯源

当攻击行为已经发生,我们最急切要做的就是溯源整个事件,找出攻击者和被攻破的原因,确定其他可能处于风险中的IT资源,预测攻击的后续行为,从而达到相似或相关的攻击行为不会在我们在成损失。

数据加工调用

这里示例同样是对访问日志的 IP 地址做扫描,需要指定扫描数据类型为 ip、需要扫描的字段为 client_ip、扫描结果输出字段为 _ti_,数据加工调用代码如下:

e_threat_intelligence("ip", "client_ip", output_field="_ti_")

扫描结果如下:

client_ip: 101.37.0.0
request: GET /product/8396812?from=source-2 HTTP/1.1
http_status: 200
_ti_: {
  "confidence": 100,
  "severity": 4,
  "family": "",
  "ioc_raw": "203.0.113.1",
  "ioc_type": "ipv4",
  "intel_type": "web",
  "country": "中国",
  "province": "浙江省",
  "city": "杭州市",
  "isp": "电信"
}

如果所给定的需要扫描的内容最近30天没有出现过威胁情报信息,则结果字段不会输出内容。

上一篇:沃达丰:全球48%的企业正在通过物联网进行大规模业务转型


下一篇:.NET服务安装、卸载、启动、停止、判断是否存在