You need to enable JavaScript to run this app.
导航

通过 IAM 设置日志服务访问权限

最近更新时间2024.04.29 17:51:40

首次发布时间2024.04.29 17:31:19

在企业内部控制员工的日志服务资源访问权限时,可以通过 IAM Policy 实现不同岗位角色的权限控制与管理。本示例演示使用 IAM Policy 控制不同员工对日志服务各个功能模块和资源的操作权限。

背景

企业内部通常设置了系统管理员、研发工程师、运维工程师、产品运营和数据分析等岗位,各个岗位有明确的分工,各岗位人员应具备不同的日志服务资源访问权限,并在岗位发生变化时及时调整其权限策略。
面对该场景,您可以通过以下方式管理各个角色的权限范围。

  1. 为各个岗位创建对应的 IAM 用户组,并添加权限策略,为用户组授予执行对应操作的权限。
  2. 为企业员工创建 IAM 用户,并按照各自的岗位将 IAM 用户添加到对应的用户组。
  3. 根据岗位需求及时调整权限策略。
    例如研发用户组的 IAM 用户需要更大的操作权限,可以直接修改用户组的权限策略,以应用到用户组中所有 IAM 用户。
  4. 根据员工岗位变动及时调整用户组。
    例如某位研发工程师职位变更为产品运营,应将其 IAM 用户从研发用户组移动至运维用户组。

各个岗位的对应用户组及权限范围示例如下:

岗位

用户组

职责与权限范围

运维管理员

火山引擎主账号,具备日志服务的所有权限,负责权限管理。可以创建 IAM 用户、用户组、自定义授权策略。

运维工程师

SysOM

负责维护线上系统,在系统异常时及时发现问题。例如采集网站的访问日志,并配置访问失败告警,在用户访问大范围报错的情况下及时识别并排查问题。
可为其授予管理日志服务基础资源、创建并管理采集配置、告警策略、检索分析、仪表盘等权限。包括:

  • 资源管理:日志项目和日志主题的管理权限。
  • 日志采集:创建并管理采集配置和机器组、通过各种方式采集日志数据。
  • 检索分析:配置并管理索引、检索日志、下载日志等检索分析相关的所有权限。
  • 告警:创建并管理通知组、告警策略等告警相关所有权限。
  • 仪表盘:创建并管理仪表盘的相关权限。

研发工程师

SysRD

辅助运维人员排查线上问题,可为其授予所有 IAM Project 的检索、告警仪表盘权限,便于其查看仪表盘与详细日志,排查线上问题。包括:

  • 检索分析:配置并管理索引、检索日志、下载日志等检索分析相关的所有权限。
  • 告警:创建并管理通知组、告警策略等告警相关所有权限。
  • 仪表盘:创建并管理仪表盘的相关权限。

运营/BI

ProductBI

配置并查看运营大盘,例如创建网站的业务看板,统计网站的访问 UV、PV、访问来源、访问前十页面等数据。
可为其授予指定 IAM Project 的日志检索、仪表盘管理权限,便于其通过仪表盘功能创建实时运营大盘,及时识别产品整体经营情况与相关数据。
包括:

  • 检索分析:检索日志的权限。
  • 仪表盘:创建并查看仪表盘的相关权限。

操作步骤

步骤一:创建 IAM 用户组

IAM 用户组是 IAM 用户的集合,用于统一管理用户的权限。当用户组被绑定权限策略后,用户组里的各个用户也会拥有对应的权限。您可以参考以下步骤为各个岗位创建一个 IAM 用户组。

  1. 运维管理员通过火山引擎主账号登录 IAM 控制台
  2. 在左侧导航栏中,选择身份管理 > 用户组
  3. 创建运维工程师用户组 SysOM。
    1. 单击新建用户组
    2. 设置用户组名为 SysOM,并单击提交
  4. 参考以上步骤依次创建研发工程师用户组 SysRD、运营与 BI 用户组 ProductBI。

步骤二:创建自定义策略并绑定用户组

IAM 中的权限类型包括系统预置策略和用户自定义策略。如果系统预置策略不满足业务需求,需要提前创建自定义策略。日志服务提供常见的访问策略示例供您参考,详细信息请参考自定义的权限策略示例。创建自定义策略的操作步骤,请参考新建策略

  1. 在左侧导航栏中,单击策略管理
  2. 为运维工程师用户组 SysOM 创建对应的自定义策略。
    1. 单击新建自定义策略

    2. 设置策略名称和策略内容,并单击提交

      说明

      日志服务暂不支持通过可视化编辑器快速编写权限策略,您可以在 JSON 编辑器页签中直接编写 JSON 格式的访问策略内容。

      设置策略名称为 SysOMPolicy,策略内容可请参考如下策略示例。您也可以参考自定义的权限策略示例,设置不同管控粒度的权限策略。

      • 运维访问策略示例:为 IAM 用户组 SysOM 授予所有日志项目和日志主题的管理权限、所有采集配置和机器组的管理权限、配置并管理索引、检索日志、下载日志等检索分析相关的所有权限、创建并管理通知组、告警策略、仪表盘的权限。

        {
            "Statement": [
                {
                    "Effect": "Allow",
                    "Action": [
                        "TLS:CreateProject",
                        "TLS:CreateTopic",
                        "TLS:PutLogs",
                        "TLS:WebTracks",
                        "TLS:DeleteTopic",
                        "TLS:ModifyTopic",
                        "TLS:DescribeDownloadTasks",
                        "TLS:DescribeShards",
                        "TLS:DescribeTopic",
                        "TLS:DescribeTopics",
                        "TLS:DeleteProject",
                        "TLS:ModifyProject",
                        "TLS:DescribeProject",
                        "TLS:DescribeConsumerGroups",
                        "TLS:DescribeProjects",
                        "TLS:DescribeRules"
                    ],
                    "Resource": [
                        "*"
                    ]
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "tls:CreateRule",
                        "tls:DeleteRule",
                        "tls:ModifyRule",
                        "tls:DescribeRule",
                        "tls:DescribeRules",
                        "tls:ApplyRuleToHostGroups",
                        "tls:DeleteRuleFromHostGroups",
                        "tls:CreateHostGroup",
                        "tls:DeleteHostGroup",
                        "tls:ModifyHostGroup",
                        "tls:DescribeHostGroup",
                        "tls:DescribeHostGroups",
                        "tls:DescribeHosts",
                        "tls:DeleteHost",
                        "tls:DescribeHostGroupRules",
                        "tls:ModifyHostGroupsAutoUpdate",
                        "tls:DeleteAbnormalHosts"
                    ],
                    "Resource": [
                        "*"
                    ]
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "tls:DescribeIndex",
                        "tls:CreateIndex",
                        "tls:DeleteIndex",
                        "tls:ModifyIndex",
                        "tls:SearchLogs",
                        "tls:DescribeHistogram",
                        "tls:DescribeLogContext"
                    ],
                    "Resource": [
                        "*"
                    ]
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "tls:CreateDownloadTask",
                        "tls:DescribeDownloadTasks",
                        "tls:DescribeDownloadUrl",
                        "tls:CancelDownloadTask"
                    ],
                    "Resource": [
                        "*"
                    ]
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "tls:CreateAlarmNotifyGroup",
                        "tls:DeleteAlarmNotifyGroup",
                        "tls:DescribeAlarmNotifyGroups",
                        "tls:ModifyAlarmNotifyGroup",
                        "tls:DescribeAlarmNotifyGroup",
                        "tls:CreateAlarm",
                        "tls:DeleteAlarm",
                        "tls:DescribeAlarms",
                        "tls:DescribeAlarm",
                        "tls:ModifyAlarm",
                        "tls:DescribeAlarmLogs",
                        "tls:ManualTriggerAlarm",
                        "tls:DescribeManualTriggerAlarmTask",
                        "tls:ModifyAlarmIncident",
                        "tls:DescribeAlarmIncident",
                        "tls:DisableAlarm",
                        "tls:EnableAlarm",
                        "tls:CreateAlarmContentTemplate",
                        "tls:DeleteAlarmContentTemplate",
                        "tls:DescribeAlarmContentTemplates",
                        "tls:ModifyAlarmContentTemplate",
                        "tls:CreateAlarmWebhookIntegration",
                        "tls:DeleteAlarmWebhookIntegration",
                        "tls:DescribeAlarmWebhookIntegrations",
                        "tls:ModifyAlarmWebhookIntegration"
                    ],
                    "Resource": [
                        "*"
                    ]
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "tls:CreateDashboard",
                        "tls:DeleteDashboard",
                        "tls:ModifyDashboard",
                        "tls:DescribeDashboard",
                        "tls:DescribeDashboards"
                    ],
                    "Resource": [
                        "*"
                    ]
                }
            ]
        }
        
      • 研发访问策略示例:为 IAM 用户组 SysRD 授予配置并管理索引、检索日志、下载日志等检索分析相关的所有权限、创建并管理通知组、告警策略、仪表盘的权限。

        {
            "Statement": [
                {
                    "Effect": "Allow",
                    "Action": [
                        "tls:DescribeProjects",
                        "tls:DescribeProject",
                        "tls:DescribeTopics",
                        "tls:DescribeTopic"
                    ],
                    "Resource": [
                        "*"
                    ]
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "tls:DescribeIndex",
                        "tls:CreateIndex",
                        "tls:DeleteIndex",
                        "tls:ModifyIndex",
                        "tls:SearchLogs",
                        "tls:DescribeHistogram",
                        "tls:DescribeLogContext"
                    ],
                    "Resource": [
                        "*"
                    ]
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "tls:CreateDownloadTask",
                        "tls:DescribeDownloadTasks",
                        "tls:DescribeDownloadUrl",
                        "tls:CancelDownloadTask"
                    ],
                    "Resource": [
                        "*"
                    ]
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "tls:CreateAlarmNotifyGroup",
                        "tls:DeleteAlarmNotifyGroup",
                        "tls:DescribeAlarmNotifyGroups",
                        "tls:ModifyAlarmNotifyGroup",
                        "tls:DescribeAlarmNotifyGroup",
                        "tls:CreateAlarm",
                        "tls:DeleteAlarm",
                        "tls:DescribeAlarms",
                        "tls:DescribeAlarm",
                        "tls:ModifyAlarm",
                        "tls:DescribeAlarmLogs",
                        "tls:ManualTriggerAlarm",
                        "tls:DescribeManualTriggerAlarmTask",
                        "tls:ModifyAlarmIncident",
                        "tls:DescribeAlarmIncident",
                        "tls:DisableAlarm",
                        "tls:EnableAlarm",
                        "tls:CreateAlarmContentTemplate",
                        "tls:DeleteAlarmContentTemplate",
                        "tls:DescribeAlarmContentTemplates",
                        "tls:ModifyAlarmContentTemplate",
                        "tls:CreateAlarmWebhookIntegration",
                        "tls:DeleteAlarmWebhookIntegration",
                        "tls:DescribeAlarmWebhookIntegrations",
                        "tls:ModifyAlarmWebhookIntegration",
                    ],
                    "Resource": [
                        "*"
                    ]
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "tls:CreateDashboard",
                        "tls:DeleteDashboard",
                        "tls:ModifyDashboard",
                        "tls:DescribeDashboard",
                        "tls:DescribeDashboards"
                    ],
                    "Resource": [
                        "*"
                    ]
                }
            ]
        }
        
      • 运营/BI访问策略示例:为 IAM 用户组 ProductBI 授予检索日志、创建并管理仪表盘的权限。

        {
            "Statement": [
                {
                    "Effect": "Allow",
                    "Action": [
                        "tls:DescribeProjects",
                        "tls:DescribeProject",
                        "tls:DescribeTopics",
                        "tls:DescribeTopic"
                    ],
                    "Resource": [
                        "*"
                    ]
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "tls:SearchLogs",
                        "tls:DescribeIndex",
                        "tls:DescribeSavedSearches",
                        "tls:DescribeHistogram"
                    ],
                    "Resource": [
                        "*"
                    ]
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "tls:CreateDashboard",
                        "tls:DeleteDashboard",
                        "tls:ModifyDashboard",
                        "tls:DescribeDashboard",
                        "tls:DescribeDashboards"
                    ],
                    "Resource": [
                        "*"
                    ]
                }
            ]
        }
        
    3. 单击添加授权

    4. 在授权全局授权页签下单击添加授权

    5. 用户组页签下找到并选择您在步骤一中创建的用户组 SysOM。

    6. 单击确定

  3. 参考以上步骤,创建研发工程师的自定义策略 SysRDPolicy 并绑定用户组 SysRD、创建运营/BI的自定义策略 ProductBIPolicy,但不绑定用户组,此策略用于后续绑定 IAM 项目。

步骤三:创建 IAM 用户,并将其加入用户组

IAM 用户是 IAM 中的实体身份,每个 IAM 用户可以对应企业内的一个员工、系统或应用程序。IAM 用户不是独立的火山引擎账号,且不拥有任何资源,所有 IAM 用户创建的资源均由所属的火山引擎账号付费。
创建 IAM 用户并授权的操作步骤如下:

  1. 在左侧导航栏中,选择身份管理 > 用户
  2. 创建运维工程师用户 Jason。
    1. 单击新建用户,并选择通过用户名创建
    2. 根据页面提示设置基本信息和登录设置,并单击下一步
      例如设置用户名Jason,并开启编程访问控制台访问权限。
    3. 填写权限设置,并单击下一步
      添加至用户组页签下绑定用户组 SysOM。
    4. 单击提交
  3. 参考以上步骤依次创建研发工程师用户、运营与 BI 用户,并绑定对应的用户组。

步骤四:创建 IAM 项目,并绑定用户组

IAM 项目用于对业务部门、项目维度进行云资源的分组管理。运维人员创建采集配置,并设置索引之后,可以记录产品运营所需的网站访问日志数据所在的日志项目与日志主题。运维管理员可以将这些资源添加到 IAM 项目 ProjectNginx 中,并将产品运营所在的用户组 ProductBI 和访问策略 ProductBIPolicy 绑定此 IAM 项目。用户组中的成员将只具备此项目中指定资源的指定访问权限。
创建 IAM 项目并绑定用户组的操作步骤如下:

  1. 在左侧导航栏中,选择资源管理 > 项目
  2. 创建项目 ProjectNginx。
    单击新建项目,设置项目名为 ProjectNginx,并单击确定
  3. 为项目 ProjectNginx 绑定日志项目和日志主题。
    此处以日志项目 8e87681c-99****、日志主题 cbae73d1-f917-**** 为例。
    1. 在项目列表中找到项目 ProjectNginx,并单击项目名称。
    2. 在资源页签中选择指定的日志项目与日志主题。
      您可以通过资源类型所属服务Region 进行筛选。如果创建日志项目时已绑定了其他 IAM 项目,可以通过移入功能迁移资源到当前的 IAM 项目。具体步骤,请参考项目资源管理
  4. 为项目绑定 IAM 用户组 ProductBI。
    1. 在授权页签中单击添加授权
    2. 在用户组页签中选择用户组 ProductBI,并指定权限策略为 ProductBIPolicy。
    3. 单击确定

步骤五:各岗位人员在权限范围内访问指定资源

完成以上配置后,各个岗位人员可以在指定的权限范围内通过控制台或 API 方式访问指定的资源。

说明

如果 IAM 用户请求访问权限外的资源,或对指定资源进行权限外的操作,日志服务将会返回对应的错误码。例如产品运营角色不具备创建采集配置或修改索引的权限,在访问对应页面时,日志服务控制台会返回错误响应信息。

相关文档