控制对 APM 数据的访问权限

编辑

控制对 APM 数据的访问权限编辑

从 8.2.0 版本开始,APM 应用已支持 Kibana 空间。这允许您按团队、用例、服务环境或您选择的任何其他过滤器来分离数据以及对数据的访问权限。

要利用此功能,您的 APM 数据需要写入不同的数据流。实现此目的的一种方法是使用不同的命名空间。例如,您可以将生产数据发送到命名空间为 production 的 APM 集成,同时将暂存数据发送到命名空间为 staging 的不同 APM 集成。

但是,不需要多个 APM 集成实例。利用此功能的最简单方法是创建过滤后的别名。有关更多信息,请参阅下面的指南。

指南:分离暂存和生产数据编辑

本指南将说明如何分离暂存和生产数据。这有助于在排除生产问题时消除干扰,或者为某些数据创建更精细的访问控制。

本指南假设您

  • 正在将暂存和生产 APM 数据发送到 Elasticsearch 集群。
  • 已在您的 APM 代理配置中配置了 environment 变量。此变量设置 APM 文档中的 service.environment 字段。您应该拥有 service.environment: productionservice.environment: staging 的文档。如果此字段为空,请参阅 服务环境过滤器 以了解如何设置此值。

步骤 1:创建过滤后的别名编辑

APM 应用使用索引模式来查询您的 APM 数据。索引模式可以匹配数据流、索引和/或别名。默认值为

索引设置 默认索引模式

错误

logs-apm*

Span/事务

traces-apm*

指标

metrics-apm*

默认索引设置还会查询 apm-* 数据视图。此数据视图匹配在早期版本的 APM(v8.0 之前)中传送的 APM 数据。

我们可以为 APM 应用创建过滤后的别名,而不是查询默认的 APM 数据视图。过滤后的别名是一组数据流的辅助名称,它具有用户定义的过滤器,用于限制别名可以访问的文档。

要分离 stagingproduction APM 数据,我们需要为每个服务环境创建六个过滤后的别名 - 三个别名

索引设置 production 环境 staging 环境

错误

production-logs-apm

staging-logs-apm

Span/事务

production-traces-apm

staging-traces-apm

指标

production-metrics-apm

staging-metrics-apm

production-<event>-apm 别名将包含一个过滤器,该过滤器仅提供对 service.environmentproduction 的文档的访问权限。类似地,staging-<event>-apm 别名将包含一个过滤器,该过滤器仅提供对 service.environmentstaging 的文档的访问权限。

要创建这六个过滤后的别名,请使用 Elasticsearch 别名 API。在 Kibana 中,打开 开发工具 并运行以下 POST 请求。

traces-apm* production 别名示例
POST /_aliases?pretty
{
  "actions": [
    {
      "add": {
        "index": "traces-apm*", 
        "alias": "production-traces-apm", 
        "filter": {
          "term": {
            "service.environment": {
              "value": "production" 
            }
          }
        }
      }
    }
  ]
}

此示例匹配 APM traces 数据流

别名不得与默认 APM 索引 (traces-apm*,apm-*) 匹配

仅匹配 service.environment: production 的文档

logs-apm* production 别名示例
POST /_aliases?pretty
{
  "actions": [
    {
      "add": {
        "index": "logs-apm*", 
        "alias": "production-logs-apm", 
        "filter": {
          "term": {
            "service.environment": {
              "value": "production" 
            }
          }
        }
      }
    }
  ]
}

此示例匹配 APM logs 数据流

别名不得与默认 APM 索引 (logs-apm*,apm-*) 匹配

仅匹配 service.environment: production 的文档

metrics-apm* production 别名示例
POST /_aliases?pretty
{
  "actions": [
    {
      "add": {
        "index": "metrics-apm*", 
        "alias": "production-metrics-apm", 
        "filter": {
          "term": {
            "service.environment": {
              "value": "production" 
            }
          }
        }
      }
    }
  ]
}

此示例匹配 APM metrics 数据流

别名不得与默认 APM 索引 (metrics-apm*,apm-*) 匹配

仅匹配 service.environment: production 的文档

traces-apm* staging 别名示例
POST /_aliases?pretty
{
  "actions": [
    {
      "add": {
        "index": "traces-apm*", 
        "alias": "staging-traces-apm", 
        "filter": {
          "term": {
            "service.environment": {
              "value": "staging" 
            }
          }
        }
      }
    }
  ]
}

此示例匹配 APM traces 数据流

别名不得与默认 APM 索引 (traces-apm*,apm-*) 匹配

仅匹配 service.environment: staging 的文档

logs-apm* staging 别名示例
POST /_aliases?pretty
{
  "actions": [
    {
      "add": {
        "index": "logs-apm*", 
        "alias": "staging-logs-apm", 
        "filter": {
          "term": {
            "service.environment": {
              "value": "staging" 
            }
          }
        }
      }
    }
  ]
}

此示例匹配 APM logs 数据流

别名不得与默认 APM 索引 (logs-apm*,apm-*) 匹配

仅匹配 service.environment: staging 的文档

metrics-apm* staging 别名示例
POST /_aliases?pretty
{
  "actions": [
    {
      "add": {
        "index": "metrics-apm*", 
        "alias": "staging-metrics-apm", 
        "filter": {
          "term": {
            "service.environment": {
              "value": "staging" 
            }
          }
        }
      }
    }
  ]
}

此示例匹配 APM metrics 数据流

别名不得与默认 APM 索引 (metrics-apm*,apm-*) 匹配

仅匹配 service.environment: staging 的文档

步骤 2:创建 Kibana 空间编辑

接下来,您需要为每个服务环境创建一个 Kibana 空间。要创建这些空间,请导航至 堆栈管理 > 空间 > 创建空间。在本指南中,我们创建了两个 Kibana 空间,一个名为 production,另一个名为 staging

有关创建空间的更多信息,请参阅 查看、创建和删除空间

步骤 3:更新每个空间中的 APM 索引设置编辑

现在,我们可以更改每个空间中 APM 应用查询的默认数据视图。

打开 APM 应用并导航至 设置 > 索引。使用下表更新每个空间的设置。每列中的值与我们在步骤一中创建的过滤后的别名的名称相匹配。

索引设置 production 空间 staging 空间

错误索引

production-logs-apm

staging-logs-apm

Span 索引

production-traces-apm

staging-traces-apm

事务索引

production-traces-apm

staging-traces-apm

指标索引

production-metrics-apm

staging-metrics-apm

APM app settings in Kibana

步骤 4:创建 Kibana 访问角色编辑

在 Kibana 中,导航至 堆栈管理 > 角色,然后单击 创建角色

您需要创建两个角色:一个用于 staging 用户(我们将此角色称为 staging_apm_viewer),另一个用于 production 用户(我们将此角色称为 production_apm_viewer)。

使用下表,为每个角色分配以下权限

权限 production_apm_viewer staging_apm_viewer

索引权限

索引:production-*-apm,权限:read

索引:staging-*-apm,权限:read

Kibana 权限

空间:production,功能权限:APM 和用户体验:读取

空间:staging,功能权限:APM 和用户体验:读取

APM role config example

或者,您可以使用 Elasticsearch 创建或更新角色 API

创建 production_apm_viewer 角色

此请求创建 production_apm_viewer 角色

POST /_security/role/production_apm_viewer
{
  "cluster": [ ],
  "indices": [
    {
      "names": ["production-*-apm"], 
      "privileges": ["read"]
    }
  ],
  "applications": [
    {
      "application" : "kibana-.kibana",
      "privileges" : [
        "feature_apm.read" 
      ],
      "resources" : [
        "space:production" 
      ]
    }
  ]
}

此数据视图匹配在步骤一中创建的所有 production 别名。

为 APM 和用户体验应用分配 read 权限。

提供对名为 production 的空间的访问权限。

创建 staging_apm_viewer 角色

此请求创建 staging_apm_viewer 角色

POST /_security/role/staging_apm_viewer
{
  "cluster": [ ],
  "indices": [
    {
      "names": ["staging-*-apm"], 
      "privileges": ["read"]
    }
  ],
  "applications": [
    {
      "application" : "kibana-.kibana",
      "privileges" : [
        "feature_apm.read" 
      ],
      "resources" : [
        "space:staging" 
      ]
    }
  ]
}

此数据视图匹配在步骤一中创建的所有 staging 别名。

为 APM 和用户体验应用分配 read 权限。

提供对名为 staging 的空间的访问权限。

步骤 5:将用户分配给角色编辑

最后要做的是将用户分配给上面新创建的角色。用户只能访问他们被授予权限的空间中的数据。

有关如何使用 Kibana UI 创建用户并为其分配角色的信息,请参阅 保护对 Kibana 的访问

或者,您可以使用 Elasticsearch 创建或更新用户 API

此示例创建一个新用户并为其分配在上一步中创建的 production_apm_viewer 角色。此用户只能访问 production 空间和 service.environmentproduction 的数据。请记住更改 passwordfull_nameemail 字段。

POST /_security/user/production-apm-user
{
  "password" : "l0ng-r4nd0m-p@ssw0rd",
  "roles" : [ "production_apm_viewer" ], 
  "full_name" : "Jane Production Smith",
  "email" : "[email protected]"
}

分配先前创建的 production_apm_viewer 角色。

此示例创建一个新用户并为其分配在上一步中创建的 staging_apm_viewer 角色。此用户只能访问 staging 空间和 service.environmentstaging 的数据。请记住更改 passwordfull_nameemail 字段。

POST /_security/user/staging-apm-user
{
  "password" : "l0ng-r4nd0m-p@ssw0rd",
  "roles" : [ "staging_apm_viewer" ], 
  "full_name" : "John Staging Doe",
  "email" : "[email protected]"
}

分配先前创建的 staging_apm_viewer 角色。

步骤 6:Marvel编辑

就是这样!回到 APM 应用,欣赏您的特定于空间的数据。