获取 API 密钥信息 API

编辑

检索一个或多个 API 密钥的信息。

请求

编辑

GET /_security/api_key

先决条件

编辑
  • 要使用此 API,您必须至少具有 manage_own_api_keyread_security 集群权限。

    • 如果您只有 manage_own_api_key 权限,此 API 只返回您拥有的 API 密钥。

      使用具有 manage_own_api_key 权限的 API 密钥进行身份验证不允许检索已验证用户的密钥。相反,请使用基本凭据对用户进行身份验证。

    • 如果您拥有 read_securitymanage_api_key 或更高的权限(包括 manage_security),此 API 将返回所有 API 密钥,无论其所有权如何。

描述

编辑

可以使用此 API 检索由创建 API 密钥创建的 API 密钥的信息。

路径参数

编辑

以下参数可以在 GET 请求的查询参数中指定,并与检索 API 密钥有关

id
(可选,字符串)API 密钥 ID。此参数不能与任何 namerealm_nameusername 一起使用。
name
(可选,字符串)API 密钥名称。此参数不能与任何 idrealm_nameusername 一起使用。它支持使用通配符进行前缀搜索。
realm_name
(可选,字符串)身份验证领域的名称。当 owner 标志设置为 true 时,此参数不能与 idname 一起使用。
username
(可选,字符串)用户的用户名。当 owner 标志设置为 true 时,此参数不能与 idname 一起使用。
owner
(可选,布尔值)一个布尔标志,可用于查询当前经过身份验证的用户拥有的 API 密钥。默认为 false。当此参数设置为 true 时,不能指定 realm_nameusername 参数,因为它们被假定为当前经过身份验证的用户。
with_limited_by
(可选,布尔值)一个布尔标志,用于返回与 API 密钥关联的所有者用户的角色描述符的快照。API 密钥的实际权限是其分配的角色描述符和所有者用户的角色描述符(实际上受其限制)的交集。API 密钥必须具有 manage_api_key 或更高的权限才能检索任何 API 密钥(包括其自身)的受限角色描述符。
with_profile_uid
(可选,布尔值)确定是否也检索 API 密钥所有者用户的用户配置文件 uid。如果存在,则每个 API 密钥的 profile_uid 响应字段下会返回配置文件 uid。默认为 false
active_only
(可选,布尔值)一个布尔标志,可用于查询当前处于活动状态的 API 密钥。如果 API 密钥在查询时既未失效也未过期,则认为它是活动的。您可以与其他参数(例如 ownername)一起指定此参数。如果 active_onlyfalse,则响应将包括活动和非活动(过期或失效)的密钥。默认为 false

如果未指定任何参数“id”、“name”、“username”和“realm_name”,并且“owner”设置为 false,则如果用户已获得授权,它将检索所有 API 密钥。如果用户未被授权检索其他用户的 API 密钥,则将返回错误。

示例

编辑

如果您按如下方式创建 API 密钥

resp = client.security.create_api_key(
    name="my-api-key",
    role_descriptors={},
    metadata={
        "application": "myapp"
    },
)
print(resp)
const response = await client.security.createApiKey({
  name: "my-api-key",
  role_descriptors: {},
  metadata: {
    application: "myapp",
  },
});
console.log(response);
POST /_security/api_key
{
  "name": "my-api-key",
  "role_descriptors": {},
  "metadata": {
    "application": "myapp"
  }
}

成功调用会返回一个 JSON 结构,该结构提供 API 密钥信息。例如

{
  "id":"VuaCfGcBCdbkQm-e5aOx",
  "name":"my-api-key",
  "api_key":"ui2lp2axTNmsyakw9tvNnw",
  "encoded": "VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw=="
}

您可以使用以下示例按 ID 检索 API 密钥

resp = client.security.get_api_key(
    id="VuaCfGcBCdbkQm-e5aOx",
    with_limited_by=True,
)
print(resp)
const response = await client.security.getApiKey({
  id: "VuaCfGcBCdbkQm-e5aOx",
  with_limited_by: "true",
});
console.log(response);
GET /_security/api_key?id=VuaCfGcBCdbkQm-e5aOx&with_limited_by=true

成功调用会返回一个 JSON 结构,其中包含 API 密钥的信息

{
  "api_keys": [ 
    {
      "id": "VuaCfGcBCdbkQm-e5aOx", 
      "name": "my-api-key", 
      "creation": 1548550550158, 
      "expiration": 1548551550158, 
      "invalidated": false, 
      "username": "myuser", 
      "realm": "native1", 
      "realm_type": "native",
      "metadata": { 
        "application": "myapp"
      },
      "role_descriptors": { }, 
      "limited_by": [  
        {
          "role-power-user": {
            "cluster": [
              "monitor"
            ],
            "indices": [
              {
                "names": [
                  "*"
                ],
                "privileges": [
                  "read"
                ],
                "allow_restricted_indices": false
              }
            ],
            "applications": [ ],
            "run_as": [ ],
            "metadata": { },
            "transient_metadata": {
              "enabled": true
            }
          }
        }
      ]
    }
  ]
}

为此请求检索的 API 密钥列表。

API 密钥的 ID

API 密钥的名称

API 密钥的创建时间(以毫秒为单位)

API 密钥的可选过期时间(以毫秒为单位)

API 密钥的失效状态。如果密钥已失效,则其值为 true,并且有一个附加字段,其中包含以毫秒为单位的 invalidation 时间。否则,它为 false

为其创建此 API 密钥的主体

为其创建此 API 密钥的主体的领域名称

API 密钥的元数据

在此 API 密钥创建或上次更新时分配给此 API 密钥的角色描述符。空的角色描述符表示 API 密钥继承所有者用户的权限。

与 API 密钥关联的所有者用户的权限。它是创建和后续更新时捕获的时间点快照。API 密钥的有效权限是其分配的权限和所有者用户的权限的交集。

您可以使用以下示例按名称检索 API 密钥

resp = client.security.get_api_key(
    name="my-api-key",
)
print(resp)
const response = await client.security.getApiKey({
  name: "my-api-key",
});
console.log(response);
GET /_security/api_key?name=my-api-key

API 密钥名称支持使用通配符进行前缀搜索

resp = client.security.get_api_key(
    name="my-*",
)
print(resp)
const response = await client.security.getApiKey({
  name: "my-*",
});
console.log(response);
GET /_security/api_key?name=my-*

以下示例检索 native1 领域的全部 API 密钥

resp = client.security.get_api_key(
    realm_name="native1",
)
print(resp)
const response = await client.security.getApiKey({
  realm_name: "native1",
});
console.log(response);
GET /_security/api_key?realm_name=native1

以下示例检索所有领域中用户 myuser 的全部 API 密钥

resp = client.security.get_api_key(
    username="myuser",
)
print(resp)
const response = await client.security.getApiKey({
  username: "myuser",
});
console.log(response);
GET /_security/api_key?username=myuser

以下示例检索当前经过身份验证的用户拥有的全部 API 密钥

resp = client.security.get_api_key(
    owner=True,
)
print(resp)
const response = await client.security.getApiKey({
  owner: "true",
});
console.log(response);
GET /_security/api_key?owner=true

如果用户已获得授权,则以下示例检索全部 API 密钥

resp = client.security.get_api_key()
print(resp)
const response = await client.security.getApiKey();
console.log(response);
GET /_security/api_key

如果用户已获得授权,则以下示例检索全部活动 API 密钥

resp = client.security.get_api_key(
    active_only=True,
)
print(resp)
const response = await client.security.getApiKey({
  active_only: "true",
});
console.log(response);
GET /_security/api_key?active_only=true

以下代码创建一个 API 密钥

resp = client.security.create_api_key(
    name="my-api-key-1",
    metadata={
        "application": "my-application"
    },
)
print(resp)
const response = await client.security.createApiKey({
  name: "my-api-key-1",
  metadata: {
    application: "my-application",
  },
});
console.log(response);
POST /_security/api_key
{
  "name": "my-api-key-1",
  "metadata": {
    "application": "my-application"
  }
}

如果指定的 id 由当前经过身份验证的用户拥有,则以下示例检索该 API 密钥

resp = client.security.get_api_key(
    id="VuaCfGcBCdbkQm-e5aOx",
    owner=True,
)
print(resp)
const response = await client.security.getApiKey({
  id: "VuaCfGcBCdbkQm-e5aOx",
  owner: "true",
});
console.log(response);
GET /_security/api_key?id=VuaCfGcBCdbkQm-e5aOx&owner=true

最后,以下示例立即检索 native1 领域中用户 myuser 的全部 API 密钥

resp = client.security.get_api_key(
    username="myuser",
    realm_name="native1",
)
print(resp)
const response = await client.security.getApiKey({
  username: "myuser",
  realm_name: "native1",
});
console.log(response);
GET /_security/api_key?username=myuser&realm_name=native1

成功调用会返回一个 JSON 结构,其中包含检索到的一个或多个 API 密钥的信息。

{
  "api_keys": [
    {
      "id": "0GF5GXsBCXxz2eDxWwFN",
      "name": "hadoop_myuser_key",
      "creation": 1548550550158,
      "expiration": 1548551550158,
      "invalidated": false,
      "username": "myuser",
      "realm": "native1",
      "realm_type": "native",
      "metadata": {
        "application": "myapp"
      },
      "role_descriptors": {
        "role-a": {
          "cluster": [
            "monitor"
          ],
          "indices": [
            {
              "names": [
                "index-a"
              ],
              "privileges": [
                "read"
              ],
              "allow_restricted_indices": false
            }
          ],
          "applications": [ ],
          "run_as": [ ],
          "metadata": { },
          "transient_metadata": {
            "enabled": true
          }
        }
      }
    },
    {
      "id": "6wHJmcQpReKBa42EHV5SBw",
      "name": "api-key-name-2",
      "creation": 1548550550158,
      "invalidated": false,
      "username": "user-y",
      "realm": "realm-2",
      "metadata": {},
      "role_descriptors": { }
    }
  ]
}