基于阿里云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日志并进行多维度分析。
相关文章
|
1月前
|
SQL 存储 人工智能
阿里云日志服务的傻瓜式极易预测模型
预测服务有助于提前规划,减少资源消耗和成本。阿里云日志服务的AI预测服务简化了数学建模,仅需SQL操作即可预测未来指标,具备高准确性,并能处理远期预测。此外,通过ScheduledSQL功能,可将预测任务自动化,定时执行并保存结果。
64 3
|
3月前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
1月前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
1月前
|
存储 安全 网络安全
阿里云国际版数据安全对金融业有多重要?
阿里云国际版数据安全对金融业有多重要?
|
2月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
150 9
|
2月前
|
SQL 人工智能 运维
在阿里云日志服务轻松落地您的AI模型服务——让您的数据更容易产生洞见和实现价值
您有大量的数据,数据的存储和管理消耗您大量的成本,您知道这些数据隐藏着巨大的价值,但是您总觉得还没有把数据的价值变现出来,对吗?来吧,我们用一系列的案例帮您轻松落地AI模型服务,实现数据价值的变现......
194 3
|
3月前
|
存储 安全 网络安全
|
3月前
|
敏捷开发 前端开发 测试技术
阿里云云效产品使用合集之如何将云效构建执行过程中产生的日志通过邮件发送
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之appStack部署时没有日志是什么原因
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
存储 Kubernetes Java
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现

相关产品

  • 日志服务