SLS智能告警-访问控制与授权

前言

在使用阿里云SLS时,如果使用主账号创建更新告警,监控自身账号下的资源时,不会遇到权限问题;在很多场景下,为了使权限职责更加清楚,用户在使用阿里云时往往不会直接使用主账号来进行日常操作,而是会创建不同的子账号,赋予不同的权限,比如子账号A用来管理ECS实例,账号B用来管理日志服务;甚至还可以更细粒度的进行控制,比如子账号a用来采集日志,子账号b用来创建监控告警。这些对资源的访问控制都可以使用阿里云的访问控制机制来实现。本文将介绍如何使用阿里云的访问控制来创建SLS新版告警规则。

阿里云访问控制简单介绍

访问控制(RAM)是阿里云提供的管理用户身份与资源访问权限的服务。在阿里云上企业往往有各种资源,比如ECS资源,RDS实例资源等,如果只使用一个主账号来管理这些资源,会有很多管理上的不变和账号泄露的风险;RAM提供了一种机制,来允许企业对不同的资源进行分组和授权;对资源进行分组后,可以创建不同的RAM用户,然后对每个RAM用户设定不同的资源访问权限。

SLS服务的资源也支持使用阿里云RAM来进行资源分组和授权。

SLS服务中的资源包括项目,Logstore,Loghub,采集配置,机器组等,对于每种资源都可以进行精细的权限控制,下图以Logstore为例,展示下一个用户下面的Logstore资源,主账号A下面可以在不同的区域有不同的Project,每个Project下有不同的Logstore。

SLS智能告警-访问控制与授权

对于这些资源SLS也定义了一些动作,比如对于Logstore资源,有log:GetLogStore,log:ListLogStores,log:CreateLogStore等动作;通过动作和资源,可以指定一个权限策略,即对这个资源可以做什么操作。


权限策略只是定义了一套对资源的控制策略,并没有定义谁能对这些资源做操作;在阿里云RAM中,权限策略可以赋给一个实体,比如RAM账号,RAM角色等,赋予之后,这个实体就拥有了这套权限策略;

本文也将以此为背景介绍下如果给RAM用户配置SLS新版告警的权限,并对这些权限进行简单的介绍。

SLS新版告警资源

下图是SLS新版告警中自定义告警监控规则及内置告警监控规则的场景,下文也将以此为例展开。

SLS智能告警-访问控制与授权

从上图可以看到,在使用告警监控时,首先需要将各类设备、系统、服务的日志采集到SLS的日志存储(包括Trace数据)或者时序存储中,然后告警监控将会对这些日志或时序进行监控;在创建监控规则时自然就需要拥有这些日志库或时序库的访问权限,同时还要具有一些告警规则的相关权限,接下来将会详细介绍告警规则需要的资源及权限。

告警规则主要包含的权限包括以下四部分:

  • 告警中心Project、Logstore、仪表盘(用于告警整体的规则、事务、态势等记录,免费
  • 创建项目下告警历史日志、告警仪表盘(用于记录每个告警规则评估历史日志及态势,免费
  • 创建、更新、删除告警规则
  • 读取监控目标的数据

告警中心Project及Logstore

告警中心Project是主账号下唯一的Project,包含一个内置的Logstore,用来存储全局告警评估,触发,通知,管理的日志。同时基于此Logstore,在中Project下,还默认创建有三个仪表盘,分别是

  • 告警链路中心:告警规则从触发到分组抑制静默在到通知到全流程数据展示。
  • 监控规则中心:告警规则最新评估状态和各个合并集合中的告警的最新状态展示,及触发展示。
  • 告警排障中心:主要用于用户自助排查告警规则配置类的错误,比如通知中配置了不可达的webhook,行动策略中配置了不存在的用户组等。

在告警中心可以看到三个仪表盘的位置

SLS智能告警-访问控制与授权


告警中心Project的名称格式为:sls-alert-${uid}-${region},主账号级别唯一,用户可以选择将这个project存储在哪个区域。

告警中心Logstore的名称固定为:internal-alert-center-log

由于创建告警规则在首次会需要创建出告警中心Project、Logstore、相关仪表盘;

权限配置参考

{
  "Statement": [
    {
      "Action": [
        "log:CreateProject"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:log:*:*:project/sls-alert-*"
      ]
    },
    {
      "Action": [
        "log:CreateLogStore",
        "log:CreateIndex",
        "log:UpdateIndex"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:log:*:*:project/sls-alert-*/logstore/internal-alert-center-log"
      ]
    },
    {
      "Action": [
        "log:CreateDashboard",
        "log:CreateChart",
        "log:UpdateDashboard"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:log:*:*:project/sls-alert-*/dashboard/*"
      ]
    }
  ],
  "Version": "1"
}

项目下告警历史日志库、告警仪表盘

在一个项目下创建一个告警规则时,SLS会默认在该Project创建一个记录告警评估历史的Logstore,internal-alert-history;同时还会创建一个告警仪表盘,用于展示评估和触发的态势。

一个项目下的所有Logstore的告警监控规则共享同一个告警历史日志库和同一个告警仪表盘,通过告警规则配置详情可以看到该告警规则相关的仪表盘视图。

如下,展示的是一个告警规则对应的告警仪表盘。

SLS智能告警-访问控制与授权


以下展示是一个Project下的告警历史日志库,internal-alert-history

SLS智能告警-访问控制与授权

由于需要创建internal-alert-history和相关仪表盘,所以需要有相关权限,以下以在某个Project创建告警规则为例:

权限配置参考

{
  "Statement": [
    {
      "Action": [
        "log:CreateLogStore",
        "log:CreateIndex",
        "log:UpdateIndex"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:log:*:*:project/项目名称/logstore/internal-alert-history",
      ]
    },
    {
      "Action": [
        "log:CreateDashboard",
        "log:CreateChart",
        "log:UpdateDashboard"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:log:*:*:project/项目名称/dashboard/*",
      ]
    }
  ],
  "Version": "1"
}


创建、更新、删除告警规则

告警监控规则在SLS中也是一种资源,资源名以job命名,一个项目下的告警规则可以通过点击告警图标查看。

如下所示为一个项目下的告警规则列表。

SLS智能告警-访问控制与授权

同样创建更新删除告警规则告警需要有规则相应的权限。

权限配置参考

{
  "Statement": [
    {
      "Action": [
        "log:*"
      ],
      "Effect": "Allow",
      "Resource": "acs:log:*:*:project/项目名称/job/*"
    }
  ],
  "Version": "1"
}

监控目标权限

在创建告警规则时需要对监控目标拥有读取的权限,监控目标的授权方式包括三种:默认,内置角色,自定义角色;这里对内置角色和自定义角色不做展开,会有专门的文章来介绍内置角色和定义角色。默认授权方式是指使用当前创建告警规则的用户的权限来查询监控目标。

SLS智能告警-访问控制与授权

可以看出,在默认的授权方式下:当前账号需要有监控目标的读取权限。下面以某个项目下读取监控目标权限为例。

权限配置参考

{
  "Statement": [
    {
      "Action": [
        "log:GetLogStoreLogs",
        "log:GetIndex"
      ],
      "Effect": "Allow",
      "Resource": "acs:log:*:*:project/项目名称*"
    }
  ],
  "Version": "1"
}

如果是在控制台配置告警,在查询分析页面和预览页面需要项目的一些浏览相关的权限,这些权限可以参考下面

控制台相关权限参考

{
  "Statement": [
    {
      "Action": [
        "log:ListProject"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:log:*:*:*"
      ]
    },
    {
      "Action": [
        "log:ListLogStores",
        "log:GetLogStoreHistogram",
        "log:GetLogStore",
        "log:ListSavedSearch",
        "log:ListDashboard",
        "log:GetLogging",
        "log:ListDomains",
        "log:ListTagResources",
        "log:GetAcceleration"
      ],
      "Effect": "Allow",
      "Resource": "acs:log:*:*:project/项目名称*"
    }
  ],
  "Version": "1"
}


配置SLS新版告警规则管理权限

对于SLS新版告警规则需要的权限在上面进行了分类详细的介绍和每个权限的一些配置。根据账号类型的不同,权限配置策略不同。

  • 主账号:主账号用于该账号所有云资源的权限,无需设置权限。
  • RAM账号:RAM账号需要配置上文介绍的这些权限策略来创建更新删除告警规则。


以下以RAM账号为例,介绍配置的权限策略:

  • 极简授权:权限较大,创建简单。为RAM用户授予全部管理权限(AliyunLogFullAccess)。更多信息,请参见创建RAM用户及授权
  • 自定义权限策略:权限精细,配置复杂。


以下介绍自定义权限策略的步骤

    • 在左侧导航栏中,选择权限管理 > 权限策略管理
    • 单击创建权限策略
    • 新建自定义权限策略页面中,选择脚本配置。输入以下脚本,并单击确定。需要将脚本中的项目名称更换为相应的Project名称,可以根据实际需要更改相应资源的配置
{
  "Statement": [
    {
      "Action": [
        "log:CreateProject"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:log:*:*:project/sls-alert-*"
      ]
    },
    {
      "Action": [
        "log:CreateLogStore",
        "log:CreateIndex",
        "log:UpdateIndex"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:log:*:*:project/项目名称/logstore/internal-alert-history",
        "acs:log:*:*:project/sls-alert-*/logstore/internal-alert-center-log"
      ]
    },
    {
      "Action": [
        "log:CreateDashboard",
        "log:CreateChart",
        "log:UpdateDashboard"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:log:*:*:project/项目名称/dashboard/*",
        "acs:log:*:*:project/sls-alert-*/dashboard/*"
      ]
    },
    {
      "Action": [
        "log:ListProject"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:log:*:*:*"
      ]
    },
    {
      "Action": [
        "log:*"
      ],
      "Effect": "Allow",
      "Resource": "acs:log:*:*:project/项目名称/job/*"
    },
    {
      "Action": [
        "log:GetLogStoreLogs",
        "log:GetIndex",
        "log:ListLogStores",
        "log:GetLogStoreHistogram",
        "log:GetLogStore",
        "log:ListSavedSearch",
        "log:ListDashboard",
        "log:GetLogging",
        "log:ListDomains",
        "log:ListTagResources",
        "log:GetAcceleration"
      ],
      "Effect": "Allow",
      "Resource": "acs:log:*:*:project/项目名称*"
    }
  ],
  "Version": "1"
}


参考

  • 日志告警介绍【链接
  • 授予RAM用户告警操作权限【链接
  • RAM资源分组和授权【链接

进一步参考

SLS智能告警-访问控制与授权



最后,如果您还想了解更多智能运维前沿资讯,欢迎您报名参加【数智创新行·智能运维专场】。

6月25日|上海·西岸国际人工智能中心

数智创新行上海站·智能运维专场

阿里云将带来云原生智能运维解决方案,满足海量事件有效感知、高效响应,可观测数据统一分析、故障定位,以及基于AI的异常检测等需求,助力企业构建自己的运维平台,成为开发、运维人员高效可靠的助手。

扫描海报二维码或点击下方链接报名, 期待您一起开启智能运维新时代!

https://www.aliyun.com/page-source//developer/special/osssalonSLS智能告警-访问控制与授权


上一篇:10个简单步骤,完全理解SQL(一)


下一篇:SLS新版告警-多数据源协同