当前位置:主页 > 查看内容

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

发布时间:2021-07-25 00:00| 位朋友查看

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

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

SLS介绍

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

日志库 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 搜索头与用户交互 将搜索请求指向一组索引器 并合并结果返回给用户。

image

上图是一个典型的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。

image

更详细关于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角色创建实例RAM角色云账号登录RAM控制台 在左侧导航栏 单击RAM角色管理- 创建RAM角色 当前可信实体类型选择为阿里云服务 单击下一步 选择角色类型为普通服务角色 输入角色名称 记住这个角色名称 后面配置SLS?Splunk?Add-on时会用到 受信服务为云服务器 点击完成。

1.png?

为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名称 请根据实际情况替换 名字替换支持通配符*。


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

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

管理应用- 浏览更多应用- 搜索“Splunk?Add-on?for?Alibaba?Cloud?Log?Service”- 点击“安装”- 点击“重启?Splunk服务”。
管理应用- 从文件安装应用- 上传.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临时凭证 无需特别管理。


本文转自网络,原文链接:https://developer.aliyun.com/article/785646
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐