授予独立的 Elastic Agent 访问 Elasticsearch 的权限

编辑

授予独立的 Elastic Agent 访问 Elasticsearch 的权限

编辑

您可以使用 API 密钥或用户凭据来授予独立的 Elastic Agent 访问 Elasticsearch 资源的权限。以下是向 Elasticsearch 发送日志、指标、跟踪和综合监控所需的最小权限:

  • monitor 集群权限
  • logs-*-*metrics-*-*traces-*-*synthetics-*-* 索引的 auto_configurecreate_doc 索引权限。

建议您使用 API 密钥,以避免在配置文件中暴露用户名和密码。

如果您正在使用 Fleet,请参阅 Fleet 注册令牌

为独立 Agent 创建 API 密钥

编辑

API 密钥以明文形式发送,因此只有与传输层安全 (TLS) 结合使用时才能提供安全性。我们在 Elastic Cloud 上的 托管 Elasticsearch 服务 开箱即用地提供安全、加密的连接!对于自管理的 Elasticsearch 集群,请参阅 公钥基础设施 (PKI) 证书

您可以设置 API 密钥在特定时间过期,并且可以显式地使其失效。任何具有 manage_api_keymanage_own_api_key 集群权限的用户都可以创建 API 密钥。

出于安全考虑,我们建议每个 Elastic Agent 使用唯一的 API 密钥。您可以根据需要为每个用户创建任意数量的 API 密钥。

如果您正在使用 Elastic Cloud Serverless,则需要进行 API 密钥身份验证。

要为 Elastic Agent 创建 API 密钥

  1. 在 Elastic Cloud 或本地环境中,在 Kibana 中导航至 Stack Management > API 密钥,然后单击 创建 API 密钥

    在 Serverless 环境中,在 Kibana 中导航至 项目设置 > 管理 > API 密钥,然后单击 创建 API 密钥

  2. 输入 API 密钥的名称,然后选择 控制安全权限
  3. 在角色描述符框中,复制并粘贴以下 JSON。此示例创建一个具有摄取日志、指标、跟踪和综合监控权限的 API 密钥。

    {
      "standalone_agent": {
        "cluster": [
          "monitor"
        ],
        "indices": [
          {
            "names": [
              "logs-*-*", "metrics-*-*", "traces-*-*", "synthetics-*-*" 
            ],
            "privileges": [
              "auto_configure", "create_doc"
            ]
          }
        ]
      }
    }

    调整此列表以匹配您要收集的数据。例如,如果您不使用 APM 或综合监控,请从此列表中删除 "traces-*-*""synthetics-*-*"

  4. 要设置 API 密钥的过期日期,请选择 在一段时间后过期 并输入 API 密钥的有效期(以天为单位)。
  5. 单击 创建 API 密钥

    您将看到一条消息,指示密钥已创建,以及编码后的密钥。默认情况下,API 密钥使用 Base64 编码,但这不适用于 Elastic Agent。

  1. 单击 Base64 旁边的向下箭头,然后选择 Beats

    Message with field for copying API key
  2. 复制 API 密钥。您将在下一步中需要它,并且您将无法再次查看它。
  3. 要使用 API 密钥,请在 elastic-agent.yml 文件中指定 api_key 设置。例如:

    [...]
    outputs:
      default:
        type: elasticsearch
        hosts:
          - 'https://da4e3a6298c14a6683e6064ebfve9ace.us-central1.gcp.cloud.es.io:443'
        api_key: _Nj4oH0aWZVGqM7MGop8:349p_U1ERHyIc4Nm8_AYkw 
    [...]

    此密钥的格式为 <id>:<key>。此配置当前不支持 Base64 编码的 API 密钥。

有关在 Kibana 中创建 API 密钥的详细信息,请参阅 API 密钥

创建独立的 Agent 角色

编辑

尽管建议您使用 API 密钥而不是用户名和密码来访问 Elasticsearch(并且在 Serverless 环境中需要 API 密钥),但您可以创建具有所需权限的角色,将其分配给用户,并在 elastic-agent.yml 文件中指定用户的凭据。

  1. 在 Kibana 中,转到 Stack Management > 角色
  2. 单击 创建角色 并输入角色的名称。
  3. 集群权限 中,输入 monitor
  4. 索引权限 中,在 索引 字段中输入

    1. logs-*-*metrics-*-*traces-*-*synthetics-*-*

      调整此列表以匹配您要收集的数据。例如,如果您不使用 APM 或综合监控,请从此列表中删除 traces-*-*synthetics-*-*

    2. 权限 字段中输入 auto_configurecreate_doc

      Create role settings for a standalone agent role
  5. 创建角色并将其分配给用户。有关创建角色的详细信息,请参阅 Kibana 角色管理
  6. 要使用这些凭据,请在 elastic-agent.yml 文件中设置用户名和密码

    [...]
    outputs:
      default:
        type: elasticsearch
        hosts:
          - 'https://da4e3a6298c14a6683e6064ebfve9ace.us-central1.gcp.cloud.es.io:443'
        username: ES_USERNAME 
        password: ES_PASSWORD
    [...]

    出于安全原因,请指定具有此处所述最小权限的用户。建议您不要使用 elastic 超级用户。