基于阿里云SLS日志服务的数据安全管理

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 伴随云原生的发展,以应用为核心的可观测监控越发得到广泛应用。在应用的可观测性中,日志的收集及内容监控是可观测性监控的一个重要内容,然而日志的监控数据,并不同于某项指标的测量结果数据,其往往都会包含业务或与用户相关的敏感性信息,因此,在落实日志的收集和监控的同时,我们也要注意日志数据的安全管理。

基于阿里云SLS日志服务的数据安全管理

伴随云原生的发展,以应用为核心的可观测监控越发得到广泛应用。在应用的可观测性中,日志的收集及内容监控是可观测性监控的一个重要内容,然而日志的监控数据,并不同于某项指标的测量结果数据,其往往都会包含业务或与用户相关的敏感性信息,因此,在落实日志的收集和监控的同时,我们也要注意日志数据的安全管理。

阿里云SLS

阿里云日志服务SLS是云原生观测与分析平台,其可为Log、Metric、Trace等数据提供大规模、低成本、实时的存储、归档、监控等一系列的数据服务,其包括一站式提供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能,可满足研发、运维、运营、安全等场景的数据管理能力。

                    阿里云SLS功能特性

如图所示,其功能特点如下:

  • 数据采集

    • 日志服务提供50多种数据接入方案,支持采集服务器与应用相关的日志、时序数据和链路数据。
    • 支持基于Logtail 采集物联网设备、阿里云产品日志、移动端等数据。
    • 支持Logstash、Flume、Beats、FluentD、Telegraph等开源软件中数据的接入。
    • 支持通过HTTP、HTTPS、Syslog、Kafka、Prometheus等标准协议接入数据。
  • 查询与分析

    • 支持上下文查询、日志聚类、LiveTail、重建索引等功能。
    • 支持标准的SQL 92语法。
  • 数据加工

    • 日志服务提供数据加工功能,用于数据的规整、富化、流转、脱敏和过滤。
    • 日志脱敏可对数据中包含的密码、手机号、地址等敏感信息进行脱敏。
  • 消费与投递

    • 日志服务提供消费与投递功能,支持通过SDK、API实时消费数据;支持通过控制台将数据实时投递至OSS、MaxCompute等阿里云产品中。
  • 数据可视化

    • 日志服务支持可视化展示查询和分析结果。提供表格、线图、柱状图等多种统计图表
    • 支持直接对接Grafana、DataV等第三方图表
  • 内容告警

    • 日志服务提供告警监控、降噪、事务管理、通知分派的智能运维平台
    • 支持通过告警策略对所接收到的告警进行路由分派、抑制、去重、静默、合并等操作,然后发送给通知(行动)管理系统。
    • 支持通过Webhook方式接收外部监控系统中的告警消息(例如Grafana告警、Prometheus告警),并完成告警管理、告警通知等操作。
  • 日志审计

    • 覆盖基础(ActionTrail、容器服务Kubernetes版)、存储(OSS、NAS)、网络(SLB、API网关)、数据库(关系型数据库RDS、云原生分布式数据库PolarDB-X、PolarDB MySQL云原生数据库)、安全(WAF、DDoS防护、云防火墙、云安全中心)等云产品。

阿里云的数据安全方案

阿里云SLS 被定位一个集中化的数据管理平台,如上所述,其涵盖了数据从采集到审计归档的全生命周期内容。对于数据的安全,可包含两个方面的内容,分别是数据脱敏和用户安全。

数据脱敏

数据脱敏,是指数据的内容在被用户查询过程中,用户所看到的内容不会出现违反安全法规限定的内容,同时也无法根据不同的内容碎片组成违反安全法规限定的内容。阿里云SLS 提供了在采集端和服务端数据加工两种方案来满足这一需求。

采集端控制

这是一种常见的数据脱敏方法,通常日志在采集后经过相关策略的处理,再把脱敏的数据传送到SLS服务端进行存储,这种方法相对较为安全,但是由于采集端的多样性,若采集端软件不同,各采集端配置上则会较为分散,也不方便管理。此处以阿里云日志采集端logtail的配置为例来了解采集端数据脱敏的配置方法。Logtail 的日志处理流程如下图所示:

基于logtail 实现数据脱敏有字段丢弃、数据脱敏、字段加密、数据编码与解码等方法,logtail 脱敏配置样例如下:

{
  "processors":[
    {
      "type":"processor_drop",
      "detail": {
        "DropKeys": ["aaa1","aaa2"]
      }
    },
    {
      "type" : "processor_desensitize",
      "detail" : {
        "SourceKey" : "password",
        "Method" : "const",
        "Match" : "full",
        "ReplaceString": "********"
      }
    },
    {
       "type" : "processor_desensitize",
       "detail" : {
          "SourceKey" : "content",
          "Method" : "md5",
          "Match" : "regex",
          "RegexBegin": "'password':'",
          "RegexContent": "[^']*"
       }
    },
    {
       "type" : "processor_encrypt",
       "detail" : {
          "SourceKey" : ["field1","field2"],
          "EncryptionParameters" : {
            "Key": "18b2eda21fbca92d6d3442e951c15208d0ae50d0a3e5d9e45bbaea0f5121a09d519c90a676133f36d48a0288e2a928bbe83f67d9f7ef5ba5508cbe8f63b3ecb79b2394b132467424395bdb40c97f3929fad2ae627117367d9e425f4776b229af0d934e0f95a04087286bf58dda46fa16aae77db19567709ead743631ba48fe80998bdecc5ea23d66d37ce821828ab840660738c696eda24c222e1cc64929b13b391655b9056cd0729bbc44231e98e3301fbe0b401c4628a682cbf1a3b9c9b5d7ddffe196034f2a66e866e37ffa64f81235026d32c72744c5bdc831fdfc5624c53eaae44134b169de665bd3d7fb5eeeab3853c301aea39dd5358766e004702fdc6f5ae79edc975936c50c80c8d4853ead9e8b52531cbef3747cde2308f7bfe2df25b65e738035b485b58fa23772814b396ee787a9aa8c6826921d4af7e450715fae0f77ed5684631912c198430a19c50fe22ac0e2eda4e7ae91d271f2560078aa6ff88b5ffec53de505d04be1876174bebb9fdb8fbbd2faaed65c8e37669d731e9404bb52c54af5e02d4d6816534bdf72504d97581a0049aa041f773e8b4ebc21a021c728215d13d1f28fd9b9fe0a3623b19c4e03e3c056116a765f9ef594b63815eb747aade065772504dee454116a60fa29dd1b3b74ef4477e74aa1d8aee6f5c36e9f30fbe51b5561c8c3ad0d31d0ec1726d4e3166986f526800c9f358652df"
          }
       }
    },
    {
       "type" : "processor_base64_encoding",
       "detail" : {
          "SourceKey" : "content",
          "NewKey" : "content_base64"
       }
    },
    {
       "type" : "processor_base64_decoding",
       "detail" : {
          "SourceKey" : "content_base64",
          "NewKey" : "content"
       }
    },
    {
       "type" : "processor_base64_md5",
       "detail" : {
          "SourceKey" : "content",
          "NewKey" : "content"
       }
    }
  ]
}
数据加工

数据加工则是在数据存储到SLS 服务端后,通过相关的数据处理规则实现数据内容的脱敏,该方法易于数据的集中处理,缺点是未脱敏的数据仍会被存储到在SLS服务端,需要做好相关的用户权限控制来解决这一弊端。

  • 数据加工原理

数据加工的原理如图所示,其过程是将源存储的日志中数据同步到目标的日志库中,在同步的过程中按照数据加工规则,将加工后的数据存储到目标日志库中。

  • 数据加工规则引擎

使用SLS DSL提供的内置函数编写加工规则,每个函数可以看做一个加工步骤,规则引擎按步骤顺序执行函数。


配置样例

# 过滤所有健康检测的日志
e_if(e_search("actuator/health"), e_drop())
# 过滤掉无用字段
e_drop_fields("field1","field2")
# 替换掉手机号
e_set(
    "message",
    regex_replace(
        v("message"),
        r"((13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8})",
        replace=r"[MASKED_PHONE]",
    ),
)
e_set(
    "log", 
    regex_replace(
        v("log"), r"(?i)(\suser\s).*", replace=r"\1[MASKED_NAME]"
    ),
)
  • 性能优化

根据加工原理,数据加工任务的总体速度取决于源Shard的数量、用户配置的规则逻辑和规则复杂度。一般可以按照每Shard处理1MB/s(压缩前)流量规划,也就是大约85 GB每天每Shard规划。例如:源Logstore的数据写入速度是每天1 TB,那么需要分裂源Logstore的Shard数量为1024GB/85=12个。

  • 成本优化

根据加工原理和性能指南,官方推荐节约成本的方案是使用一个或多个Logstore快速接入数据,然后使用数据加工进行快速分发,并根据实际需求设置不同目标Logstore的存储时间以及索引配置,进而降低使用成本。

举例某应用的日志,每天的写入量为100 GB,存储30天并建立全文索引,那么日志服务的成本大约是2248元/每月。官方推荐使用如下加工方案实现成本的节约。

* 构建接入源Logstore,存储3天不建立索引。
* 构建目标Logstore1,用于存储操作日志与错误日志,存储30天并建立索引。
* 构建目标logstore2,用于存储一般性日志,存储7天并建立索引。

这种情况下您的成本约为1672元/每月,与加工之前相比大约可以节省25%的成本。

用户安全

用户安全,是指数据使用者是在授权下使用数据,其所有的操作,是在权限控制下的,且不会在操作过程中,对数据产生安全风险。基于这一需求,我们可以通过阿里云提供的权限控制服务实现这一需求。

阿里云的RAM 中的相关概念如下:

  • RAM用户

是一个身份实体,它通常代表您的组织中需要访问云资源的人员或应用程序。

  • 用户组

多个可具有相同策略的RAM用户集合。

  • RAM角色

是一种虚拟用户,没有确定的身份认证密钥,需要被一个受信的实体用户关联才能正常使用。其可实现同一实体用户的多身份切换,方便权限策略的管理。

  • 权限策略

用于描述一组权限集,RAM 支持两种类型的权限策略:由阿里云管理的系统策略和由客户管理的自定义策略。系统策略,统一由阿里云创建,只能使用而不能修改。自定义策略则可更具实际的情况自主创建、更新和删除,相对更为灵活。

  • RAM相关概念关系

image.png
如图所示,RAM用户、用户组及RAM角色都可以直接与权限策略关联,权限策略则可针对阿里云各服务产品的读、写和列表权限实现控制,为增强权限控制的能力,其还可以对每个产品下的资源,即用户的具体云产品的实例实现更细粒度的管理。同时,阿里云的RAM 策略增加了条件控制,对RAM用户的访问方式实现在时间、源IP、安全通道(https)、多因素认证等方式进行了识别,增加了更多的安全管控方法。

  • 策略脚本结构及语法

自定义策略可以通过可视化编辑器及脚本编辑器创建,由于阿里云产品更新的较快,可视化编辑器的可选项与实际可用权限会存在不同步的情况,建议使用脚本编辑器创建。RAM中使用权限策略描述授权的具体内容,权限策略由效果(Effect)、操作(Action)、资源(Resource)、条件(Condition)和授权主体(Principal)等基本元素组成。

权限策略结构包括:版本号(Version)和授权语句列表(Statement)。每条授权语句包括授权效果(Effect)、操作(Action)、资源(Resource)以及条件(Condition,可选项)。

策略脚本样例

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "log:GetConfig",
        "log:GetConsumerGroupCheckPoint",
        "log:GetDashboard"
      ],
      "Resource": [],
      "Condition": {}
    }
  ]
}

策略脚本结构

<version_block> = "Version" : ("1")
// Statement 是个列表,可以添加多个授权语句
<statement_block> = "Statement" : [ <statement>, <statement>, ... ]

// 每个Statement 由effect、action、resource、condition 组成。
<statement> = { 
    <effect_block>,
    <action_block>,
    <resource_block>,
    <condition_block?>
}

// effect 的可选项为"Allow" 或 "Deny"
<effect_block> = "Effect" : ("Allow" | "Deny")  

// action 是各产品的操作描述符
<action_block> = "Action" : 
    ("*" | [<action_string>, <action_string>, ...])

// resource 是各产品具体的用户实例
<resource_block> = "Resource" : 
    ("*" | [<resource_string>, <resource_string>, ...])

// condition 是用户访问方式的识别
<condition_block> = "Condition" :
{
  <condition_type_string> : { 
      <condition_key_string> : [<condition_value>, <condition_value>, ...],
      <condition_key_string> : [<condition_value>, <condition_value>, ...],
      ...
  },
  <condition_type_string> : {
      <condition_key_string> : [<condition_value>, <condition_value>, ...],
      <condition_key_string> : [<condition_value>, <condition_value>, ...],
      ...
  }, ...
}  

<condition_key_string> = ("acs:CurrentTime"|"acs:SecureTransport"|"acs:SourceIp"|"acs:MFAPresent")
<condition_value> = ("String" | "Number" | "Boolean" | "Date and time" | "IP address")
  • 用户角色的设定

基于实际的工作需求,建议由如下四类用户,并根据用户组和RAM角色对每个用户实现更细粒度的管控。

用户 说明 管理
超管账户 可管理所有的阿里云资源 基于审计实现管理控制
权限管理员 用户的权限设定 仅有权限控制产品的操作权限
运维人员 云产品资源配置 仅有被授权产品可工作的最小权限
使用者 业务范围使用者 仅有被授权产品可工作的最小权限
  • 权限策略判断流程

参考文档

https://help.aliyun.com/product/28958.html
https://help.aliyun.com/product/28625.html
https://www.nginxbar.com/pages/7f0a9e

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
|
23天前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
1月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
66 9
|
1月前
|
SQL 人工智能 运维
在阿里云日志服务轻松落地您的AI模型服务——让您的数据更容易产生洞见和实现价值
您有大量的数据,数据的存储和管理消耗您大量的成本,您知道这些数据隐藏着巨大的价值,但是您总觉得还没有把数据的价值变现出来,对吗?来吧,我们用一系列的案例帮您轻松落地AI模型服务,实现数据价值的变现......
133 3
|
2月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
68 0
|
2月前
|
C# Windows 监控
WPF应用跨界成长秘籍:深度揭秘如何与Windows服务完美交互,扩展功能无界限!
【8月更文挑战第31天】WPF(Windows Presentation Foundation)是 .NET 框架下的图形界面技术,具有丰富的界面设计和灵活的客户端功能。在某些场景下,WPF 应用需与 Windows 服务交互以实现后台任务处理、系统监控等功能。本文探讨了两者交互的方法,并通过示例代码展示了如何扩展 WPF 应用的功能。首先介绍了 Windows 服务的基础知识,然后阐述了创建 Windows 服务、设计通信接口及 WPF 客户端调用服务的具体步骤。通过合理的交互设计,WPF 应用可获得更强的后台处理能力和系统级操作权限,提升应用的整体性能。
70 0
|
2月前
|
存储 消息中间件 监控
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统ELK、日志收集分析
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统、日志收集分析。日志级别从小到大的关系(优先级从低到高): ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 低级别的会输出高级别的信息,高级别的不会输出低级别的信息
|
2月前
|
存储
【Azure Log A workspace】Azure上很多应用日志收集到Log A workspace后如何来分别各自的占比呢?
【Azure Log A workspace】Azure上很多应用日志收集到Log A workspace后如何来分别各自的占比呢?
|
2月前
|
API
【Azure 应用服务】当在Azure App Service的门户上 Log Stream 日志无输出,需要如何操作让其输出Application Logs呢?
【Azure 应用服务】当在Azure App Service的门户上 Log Stream 日志无输出,需要如何操作让其输出Application Logs呢?
|
5月前
|
存储 数据采集 安全
瓴羊Dataphin数据安全能力再升级,内置分类分级模板、上线隐私计算模块
瓴羊Dataphin数据安全能力再升级,内置分类分级模板、上线隐私计算模块
186 0

相关产品

  • 日志服务
  • 下一篇
    无影云桌面