服务帐户编辑

Elastic Stack 安全功能提供专门用于与连接到 Elasticsearch 的外部服务(例如 Fleet 服务器)集成的*服务帐户*。服务帐户具有一组固定的权限,在您为其创建服务帐户令牌之前无法进行身份验证。此外,服务帐户在代码中预定义,并且始终启用。

服务帐户对应于特定的外部服务。您可以为服务帐户创建服务帐户令牌。然后,该服务可以使用该令牌进行身份验证并执行相关操作。例如,Fleet 服务器可以使用其服务令牌对 Elasticsearch 进行身份验证,然后管理其自己的 API 密钥。

您可以为同一个服务帐户创建多个服务令牌,这可以防止在同一个外部服务的多个实例之间共享凭据。每个实例可以使用其自己的不同服务令牌进行身份验证,同时承担相同的身份。

内置用户 相比,服务帐户提供了更高的灵活性,因为它们

  • 不依赖于 内部 native 领域,并且不要求始终依赖于 .security 索引
  • 使用以服务帐户主体命名的 角色描述符,而不是传统角色
  • 通过服务帐户令牌支持多个凭据

服务帐户不包含在 获取用户 API 的响应中。要检索服务帐户,请使用 获取服务帐户 API。使用 获取服务帐户凭据 API 检索服务帐户的所有服务凭据。

服务帐户的使用编辑

服务帐户具有 唯一主体,其格式为 <命名空间>/<服务>,其中 命名空间 是服务帐户的顶级分组,服务 是服务的名称,并且在其命名空间内必须唯一。

服务帐户在代码中预定义。以下服务帐户可用

elastic/fleet-server
Fleet 服务器用于与 Elasticsearch 通信的服务帐户。
elastic/kibana
Kibana 用于与 Elasticsearch 通信的服务帐户。
elastic/enterprise-search-server
Enterprise Search 用于与 Elasticsearch 通信的服务帐户。

不要尝试使用服务帐户对单个用户进行身份验证。服务帐户只能使用服务令牌进行身份验证,而服务令牌不适用于普通用户。

服务帐户令牌编辑

服务帐户令牌(或服务令牌)是服务用于对 Elasticsearch 进行身份验证的唯一字符串。对于给定的服务帐户,每个令牌必须具有唯一的名称。由于令牌包含访问凭据,因此使用它们的任何客户端都应始终对其保密。

服务令牌可以由 .security 索引(推荐)或 service_tokens 文件支持。您可以为单个服务帐户创建多个服务令牌,这使得同一个服务的多个实例可以使用不同的凭据运行。

您必须创建服务令牌才能使用服务帐户。您可以使用以下任一方法创建服务令牌:

  • 创建服务帐户令牌 API,它将新的服务令牌保存在 .security 索引中,并在 HTTP 响应中返回承载令牌。
  • elasticsearch-service-tokens CLI 工具,它将新的服务令牌保存在 $ES_HOME/config/service_tokens 文件中,并将承载令牌输出到您的终端

我们建议您通过 REST API 而不是 CLI 创建服务令牌。API 将服务令牌存储在 .security 索引中,这意味着这些令牌可用于所有节点上的身份验证,并将备份在集群快照中。CLI 的使用适用于存在外部编排流程(例如 Elastic Cloud EnterpriseElastic Cloud on Kubernetes)的情况,这些流程将管理 service_tokens 文件的创建和分发。

这两种方法(API 和 CLI)都会创建一个服务令牌,其保证的密钥字符串长度为 22。服务令牌的密钥字符串的最小可接受长度为 10。如果密钥字符串不满足此最小长度,则对 Elasticsearch 的身份验证将失败,甚至不会检查服务令牌的值。

服务令牌永不过期。如果不再需要它们,您必须主动将其 删除

使用服务令牌进行身份验证编辑

服务帐户当前不支持基本身份验证。

要使用服务帐户令牌,请在请求中包含生成的令牌值,并使用 Authorization: Bearer 标头

curl -H "Authorization: Bearer AAEAAWVsYXN0aWM...vZmxlZXQtc2VydmVyL3Rva2VuMTo3TFdaSDZ" https://127.0.0.1:9200/_security/_authenticate

成功的身份验证响应包含一个 token 字段,其中包含一个用于服务令牌名称的 name 字段和一个用于服务令牌类型的 type 字段

{
  "username": "elastic/fleet-server",
  "roles": [],
  "full_name": "Service account - elastic/fleet-server",
  "email": null,
  "token": {
    "name": "token1",                 
    "type": "_service_account_index"  
  },
  "metadata": {
    "_elastic_service_account": true
  },
  "enabled": true,
  "authentication_realm": {
    "name": "_service_account",
    "type": "_service_account"
  },
  "lookup_realm": {
    "name": "_service_account",
    "type": "_service_account"
  },
  "authentication_type": "token"
}

服务帐户令牌的名称。

服务帐户令牌的类型。该值始终以 _service_account_ 开头,后跟一个字符串,该字符串指示正在使用的服务令牌后端(可以是 fileindex)。