基于ECS实例RAM角色的SLS与Splunk集成方案-阿里云开发者社区

开发者社区> 阿里云存储服务> 正文
登录阅读全文

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

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

为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.0分布式存储系统,产品多种多样,充分满足用户数据存储和迁移上云需求。

官方博客
最新文章
相关文章
存储产品
客户案例