基于ECS实例RAM角色的SLS与Splunk集成方案

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
对象存储 OSS,内容安全 1000次 1年
简介: 阿里云日志服务(SLS)通过提供一个Splunk插件(Add-on)实现SLS与Splunk的日志对接, 以便确保阿里云上的所有法规、审计、与其他相关日志能够导入到客户的安全运维中心(SOC)中。本文主要介绍如何在该Splunk Add-on中使用ECS实例RAM角色的鉴权方式,完成日志服务(SLS)到Splunk的日志投递过程。

背景信息

阿里云日志服务(SLS)通过提供一个Splunk插件(Add-on)实现SLS与Splunk的日志对接, 以便确保阿里云上的所有法规、审计、与其他相关日志能够导入到客户的安全运维中心(SOC)中。本文主要介绍如何在该Splunk Add-on中使用ECS实例RAM角色的鉴权方式,完成日志服务(SLS)到Splunk的日志投递过程。

SLS介绍

阿里云的日志服务(log service)是针对日志类数据的一站式服务,无需开发就能快捷完成海量日志数据的采集、消费、投递以及查询分析等功能,提升运维、运营效率。日志服务主要包括 实时采集与消费、数据投递、查询与实时分析 等功能,适用于从实时监控到数据仓库的各种开发、运维、运营与安全场景。

  • 日志库(Logstore):日志服务中日志数据的采集、存储和查询单元。每个日志库隶属于一个项目,且每个项目可以创建多个日志库。您可以根据实际需求为某一个项目生成多个日志库,其中常见的做法是为一个应用中的每类日志创建一个独立的日志库。
  • 分区(Shard):Logstore读写日志必定保存在某一个分区(Shard)上。每个日志库(Logstore)分若干个分区,每个分区由MD5左闭右开区间组成,每个区间范围不会相互覆盖,并且所有的区间的范围是MD5整个取值范围。
  • 服务入口(Endpoint):日志服务入口是访问一个项目(Project)及其内部日志数据的 URL。它和 Project 所在的阿里云区域(Region)及 Project 名称相关。包括公网服务入口、经典/VPC网络服务入口、全球加速服务入口。
  • 访问密钥(AccessKey):阿里云访问密钥是阿里云为用户使用 API(非控制台)来访问其云资源设计的安全口令。您可以用它来签名 API 请求内容以通过服务端的安全验证。
  • 消费组(Consumer Group):一个消费组由多个消费者构成,同一个消费组下面的消费者共同消费一个logstore中的数据,消费者之间不会重复消费数据。
  • 消费者(Consumer):消费组的构成单元,实际承担消费任务,同一个消费组下面的消费者名称必须不同。

Splunk介绍

Splunk是一个功能完备的企业级产品,提供了命令行窗口,web图形界面接口和其他接口,查询结果展示,数据查询,权限控制,分布式管理服务,数据索引,网络端口监听,数据警报,文件监听等等。

一个典型的Splunk分布式部署由三部分组成:

- 转发器(Forwarder):转发器可获取数据,然后通常会将数据继续转发至索引器。

- 索引器(Indexer):索引器会对从转发器组传入的数据进行索引;响应搜索头的搜索请求。

- 搜索头(Search Head):搜索头与用户交互,将搜索请求指向一组索引器,并合并结果返回给用户。

上图是一个典型的Splunk集群部署。索引集群由如下节点类型组成:

•单个主节点,用于管理群集。主节点是一种特殊类型的索引器。

• 多个对等节点,用于处理群集的索引功能、维护数据的多个副本及为其建立索引,以及对数据执行搜索。

• 一个或多个搜索头,用于协调所有对等节点的搜索。 索引器群集功能会自动从一个对等节点故障转移到下一个对等节点。这意味着,如果一个或多个对等节点出现故障,可继续为传入数据创建索引,且索引数据继续保持可搜索状态。 转发器分为如下三种类型: - 通用转发器(universal forwarder ):仅包含转发数据所需的组件。 - 重型转发器(heavy forwarder):完整的Splunk实例,能够索引、搜索、更改数据,同时也可以转发数据。如果需要分析数据或更改数据或根据内容做控制,则需要使用重型转发器。 - 轻型转发器:已废弃。


本文提到的阿里云日志服务的Splunk Add-on就是运行在Splunk Heavy Forwarder上的一种组件。Forwarder与Indexer之间进行消息通信,可以使用Splunk私有的事件协议实现,也可以基于Http事件接收器(Splunk Http Event Collector,简称HEC)实现。


SLS Splunk Add-on

阿里云日志服务Splunk Add-on从阿里云日志服务(SLS)采集日志并投递到Splunk。主要的特性如下:

  • 通过Splunk data input创建SLS消费组,并从阿里云日志服务进行实时日志消费。
  • 将采集到的日志通过Splunk私有协议(private protocol)或者HTTP Event Collector(HEC)投递到Splunk indexer。

更详细关于SLS Splunk Add-on的介绍可以参考阿里云日志服务Splunk Add-on


ECS实例RAM角色

ECS实例RAM角色允许将一个角色关联到ECS实例,在ECS实例内部基于STS(Security Token Service)临时凭证访问其他云产品的API,临时凭证将周期性更新。即可以保证云账号AccessKey安全,还可以借助访问控制RAM实现精细化控制和权限管理。

应用场景

ECS实例上部署的应用程序在云产品通信中,通过云账号或者RAM用户的AccessKey访问阿里云其他云产品(例如SLS、OSS、VPC、RDS等)的API。为了方便和快速地调用,部分用户直接把AccessKey固化在实例中,如写在配置文件中。这种方式存在权限过高、泄露信息和难以维护等问题。ECS实例RAM角色能避免此类问题,例如在ECS实例中使用STS临时凭证访问阿里云的其他云服务。

ECS实例RAM(Resource Access Management)角色让ECS实例扮演具有某些权限的角色,从而赋予实例一定的访问权限。关于角色的详细描述,请参见RAM角色概览

功能优势

使用实例RAM角色的优势在于:

  • 借助实例RAM角色,将角色和ECS实例关联起来。
  • 使用STS临时凭证访问阿里云的其他云服务。
  • 为不同的实例赋予包含不同授权策略的角色,使它们对不同的云资源具有不同的访问权限,实现更精细粒度的权限控制。
  • 无需自行在实例中保存AccessKey,通过修改角色的授权即可变更权限,快捷地维护ECS实例所拥有的访问权限。


使用步骤

准备工作

  • 确保Splunk运行在阿里云ECS上
  • 如果运行在非阿里云ECS上,只能使用阿里云访问密钥AccessKey ID和AccessKey Secret来访问日志服务,其配置步骤参考阿里云日志服务Splunk Add-on
  • 检查Splunk版本及运行环境
  • 确保使用最新的Add-on版本
  • 操作系统:Linux、Mac OS、Windows
  • Splunk版本:Splunk heavy forwarder 8.0及以上版本、Splunk indexer 7.0及以上版本。
  • 配置Splunk HTTP Event Collector
  • 如果需要使用HEC来发送event,请确保HEC配置成功。如果选择Splunk私有协议,则可以跳过该步骤。
  • 请参见Configure HTTP Event Collector on Splunk Enterprise
  • 目前创建Event Collector token时,不支持开启indexer acknowledgment功能。

为ECS实例绑定RAM角色

  1. 创建实例RAM角色
  • 云账号登录RAM控制台,在左侧导航栏,单击RAM角色管理->创建RAM角色,当前可信实体类型选择为阿里云服务,单击下一步;选择角色类型为普通服务角色,输入角色名称(记住这个角色名称,后面配置SLS Splunk Add-on时会用到),受信服务为云服务器,点击完成。

1.png 

  1. 为RAM角色授予权限
  • 为上一步创建的RAM角色授予访问日志服务SLS的权限
  • 您可以通过权限助手配置RAM权限,详情请参见配置权限助手。常用的RAM配置如下:
{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "log:ListShards",
        "log:GetCursorOrData",
        "log:GetConsumerGroupCheckPoint",
        "log:UpdateConsumerGroup",
        "log:ConsumerGroupHeartBeat",
        "log:ConsumerGroupUpdateCheckPoint",
        "log:ListConsumerGroup",
        "log:CreateConsumerGroup"
      ],
      "Resource": [
        "acs:log:*:*:project/<Project name>/logstore/<Logstore name>",
        "acs:log:*:*:project/<Project name>/logstore/<Logstore name>/*"
      ],
      "Effect": "Allow"
    }
  ]
}

说明:为您的日志服务Project名称,为您的日志服务Logstore名称,请根据实际情况替换,名字替换支持通配符*。


  1. 为ECS实例绑定RAM角色
  • 登录ECS管理控制台,在左侧导航栏点击实例与镜像->实例,找到要操作的ECS实例,选择更多->实例设置->授予/收回RAM角色,在弹窗重,选择创建前面步骤中创建好的实例RAM角色,点击确定完成授予。
  • 用户也可以在创建ECS实例时,在系统配置页面的RAM角色属性中为实例选择已创建好的实例RAM角色。

安装SLS Splunk Add-on

这里提供两种通过Splunk web UI安装Splunk Add-on的方式:

  1. 管理应用->浏览更多应用->搜索“Splunk Add-on for Alibaba Cloud Log Service”->点击“安装”->点击“重启 Splunk服务”。
  2. 管理应用->从文件安装应用->上传.tgz文件,可以从https://splunkbase.splunk.com/apps下载->选择“升级应用程序选中它将覆盖已存在的应用程序”->点击“上载”按钮->点击“重启 Splunk服务”。

配置SLS Splunk Add-on

通过Splunk Web UI 选择应用,进入"Splunk Add-on for Alibaba Cloud Log Service"界面。

全局账号配置

在“配置-Account”界面, 配置ECS实例的RAM角色信息

  • 添加一个账号,用户名固定不变为ECS_RAM_ROLE,密码是步骤“为ECS实例绑定RAM角色中所创建的RAM角色名称。

添加data input

在“输入”界面,点击"Create New Input"可以创建新的data input。具体的配置参数如下:

  • 其中SLS AccessKey参数选择【全局账号配置】步骤中配置的账号

参数

必选项 & 格式

描述

取值举例

名字

Yes, String

全局唯一的Data input名

间隔

Yes, Integer

Splunk data input退出后的重启时间。

单位:s。

默认值: 10(s)

索引

Yes, String

Splunk索引

SLS AccessKey

Yes, String

全局账号配置中配置的"Account name"。

SLS endpoint

Yes, String

阿里云日志服务入口。

关于HTTPS的更多信息,详见“规格及安全--HTTPS”部分。

cn-huhehaote.log.aliyuncs.com 

https://cn-huhehaote.log.aliyuncs.com

SLS project

Yes, String

日志服务Project。

-

SLS logstore

Yes, String

日志服务Logstore。

-

SLS consumer group

Yes, String

日志服务消费组。

扩容时,多个data input需要配置相同的消费组名称。

更多信息详见“机制”部分。 

-

SLS cursor start time 

Yes, String

消费起始时间。

该参数只有消费组首次创建时有效。非首次创建日志都是从上次的保存点开始消费。

注意:这里的时间是日志到达时间。

取值:“begin”、“end”、“ISO格式的时间(例如2018-12-26 0:0:0+8:00)”。

SLS heartbeat interval

Yes, Integer

SLS消费者与Sever间的心跳间隔。

单位:s。

默认值: 60(s)

SLS data fetch interval

Yes, Integer

日志拉取间隔,如果日志频率较低,建议不要设的太小。

单位:s。

默认值: 1(s)

Topic filter

No, String

Topic过滤字符串,以;间隔区分多个过滤的Topic。

如果日志的topic被命中,则该日志会被忽略掉,从而不能投递到Splunk。

“TopicA;TopicB”意味着topic为“TopicA”or “TopicB”的日志将被忽略。

Unfolded fields

No, Json

Json格式的topic到字段列表的映射关系。

{"topicA": ["field_nameA1", "field_nameA2", ...], "topicB": ["field_nameB1", "field_nameB2", ...], ...}

{"actiontrail_audit_event": ["event"] } 意味着对于topic为 "actiontrail_audit_event"的日志, 该日志的 "event"字段将从字符串展开成Json格式。

Event source

No, String

Splunk event数据源

-

Event source type

No, String

Splunk event数据源类型

-

Event retry times

No, Integer

0表示无限重传。

默认值: 0次

Event protocol

Yes

Splunk event发送协议。如果选择私有协议,后续参数可以忽略。

HTTP for HEC

HTTPS for HEC

Private protocol

HEC host

Yes,只有Event protocol选择HEC时有效,String。

HEC host。

-

HEC port

Yes,只有Event protocol选择HEC时有效,Integer。

HEC端口。

-

HEC token

Yes,只有Event protocol选择HEC时有效,String。

HEC token。

HEC timeout

Yes,只有Event protocol选择HEC时有效,Integer。

HEC超时时间。

默认: 120(s)


总结

以往用户在使用SLS Splunk Add-on将日志从SLS投递到Splunk时,需要借助AccessKeyID和AccessKeySecret来实现。用户需要为对应的AK做严格的权限控制,并且在Splunk的账号配置中保存相应的AK_ID和AK_Secret。这在一定程度上增加了AK管理的复杂性,并且降低了AK的保密性。如果用户需要实现多地域部署,AK会随着多台实例扩的创建而散出去。这种情况下,当用户需要更换AK时,用户就需要逐台更新和重新部署实例中的AK信息。


现在借助于ECS实例RAM角色,用户可以将RAM角色和ECS实例关联起来,在ECS实例内部可以通过STS临时凭证访问日志服务SLS。其中STS临时凭证由系统自动生成和更新,SLS Splunk Add-on可以使用指定的实例元数据URL获取STS临时凭证,无需特别管理。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
SQL 运维 监控
SLS 数据加工全面升级,集成 SPL 语法
在系统开发、运维过程中,日志是最重要的信息之一,其最大的优点是简单直接。SLS 数据加工功能旨在解决非结构化的日志数据处理,当前全面升级,集成 SPL 语言、更强的数据处理性能、更优的使用成本。
18175 138
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
45 2
|
3月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
33 3
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
|
3月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
159 0
|
3月前
|
前端开发 JavaScript API
Web服务器与前端技术的集成
【8月更文第28天】随着Web开发技术的发展,现代前端框架如React、Vue.js等已经成为构建复杂Web应用的标准工具。为了提供更好的用户体验,这些前端应用通常需要与后端Web服务器进行紧密集成。本文将详细介绍如何将React和Vue.js与后端Web服务器无缝集成,以创建高性能且用户友好的Web应用。
66 0
|
3月前
|
Kubernetes Shell 网络安全
【Azure K8S】记录AKS VMSS实例日志收集方式
【Azure K8S】记录AKS VMSS实例日志收集方式
|
3月前
|
存储 Linux 网络安全
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
|
4月前
|
存储 弹性计算 运维
可观测性体系问题之ECS管控集成到云产品status大盘中如何解决
可观测性体系问题之ECS管控集成到云产品status大盘中如何解决
48 2
|
4月前
|
弹性计算 Linux 云计算
云服务器 ECS产品使用问题之幻兽帕鲁服务器角色存档丢失,该怎么办
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。

相关产品

  • 日志服务