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

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

基于阿里云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日志并进行多维度分析。
相关文章
|
5天前
|
运维 监控 数据可视化
日志服务 HarmonyOS NEXT 日志采集最佳实践
鸿蒙操作系统(HarmonyOS)上的日志服务(SLS)SDK 提供了针对 IoT、移动端到服务端的全场景日志采集、处理和分析能力,旨在满足万物互联时代下应用的多元化设备接入、高效协同和安全可靠运行的需求。
116802 10
|
5天前
|
云安全 安全 开发工具
如何有效管理你的阿里云凭证?
如何有效管理你的阿里云凭证?
22 3
|
5天前
|
SQL 安全 数据管理
在阿里云数据管理DMS(Data Management Service)中,您可以按照以下步骤来创建和管理数据库
【2月更文挑战第33天】在阿里云数据管理DMS(Data Management Service)中,您可以按照以下步骤来创建和管理数据库
53 7
|
5天前
|
存储 监控 Apache
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
网易的灵犀办公和云信利用 Apache Doris 改进了大规模日志和时序数据处理,取代了 Elasticsearch 和 InfluxDB。Doris 实现了更低的服务器资源消耗和更高的查询性能,相比 Elasticsearch,查询速度提升至少 11 倍,存储资源节省达 70%。Doris 的列式存储、高压缩比和倒排索引等功能,优化了日志和时序数据的存储与分析,降低了存储成本并提高了查询效率。在灵犀办公和云信的实际应用中,Doris 显示出显著的性能优势,成功应对了数据增长带来的挑战。
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
|
5天前
|
敏捷开发 Devops 测试技术
云效产品使用常见问题之不知道每次登录是否会记录在阿里云账号的登录日志中如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5天前
|
SQL 存储 监控
SLS 查询新范式:使用 SPL 对日志进行交互式探索
像 Unix 命令一样支持多级管道级联,像加工预览一样实时处理查询结果,更便捷的交互,更丰富的算子,更灵活的探索半结构化日志,快来试试使用 SPL 语言查询日志数据吧~
46524 6
|
5天前
|
域名解析 缓存 网络协议
阿里云DNS常见问题之阿里云DNS的操作日志查不到如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
5天前
|
Web App开发 监控 应用服务中间件
全新架构!日志服务 SLS 自研免登录方案发布
全新架构!日志服务 SLS 自研免登录方案发布
87536 7
|
5天前
|
SQL 数据采集 JSON
弱结构化日志 Flink SQL 怎么写?SLS SPL 来帮忙
弱结构化日志 Flink SQL 怎么写?SLS SPL 来帮忙
125229 136
|
5天前
|
弹性计算 网络安全
阿里云OpenAPI提供了多种接口来管理ECS实例
【2月更文挑战第1天】阿里云OpenAPI提供了多种接口来管理ECS实例
35 0

相关产品

  • 日志服务