更新跨集群 API 密钥 API

编辑

更新跨集群 API 密钥 API

编辑

更新用于基于 API 密钥的远程集群访问的现有跨集群 API 密钥。

请求

编辑

PUT /_security/cross_cluster/api_key/<id>

先决条件

编辑
  • 要使用此 API,您必须至少拥有 manage_security 集群特权。用户只能更新他们创建的 API 密钥。要更新其他用户的 API 密钥,请使用 run_as 功能代表其他用户提交请求。

无法使用 API 密钥作为此 API 的身份验证凭据。要更新 API 密钥,需要所有者用户的凭据。

描述

编辑

使用此 API 更新由创建跨集群 API 密钥 API 创建的跨集群 API 密钥。无法更新过期的 API 密钥,或已被使 API 密钥失效作废的 API 密钥。

此 API 支持更新 API 密钥的访问范围、元数据和过期时间。所有者用户的信息(例如 usernamerealm)也会在每次调用时自动更新。

此 API 无法更新 REST API 密钥,应通过 更新 API 密钥批量更新 API 密钥 API 进行更新。

路径参数

编辑
id
(必需,字符串)要更新的 API 密钥的 ID。

请求主体

编辑

您可以在请求主体中指定以下参数。这些参数是可选的。但它们不能全部缺失。

access
(可选,对象)要授予此 API 密钥的访问权限。访问权限由跨集群搜索和跨集群复制的权限组成。必须指定至少一个。指定后,新的访问分配将完全替换以前分配的访问权限。有关字段的结构,请参阅创建跨集群 API 密钥 API 的相同参数
metadata
(可选,对象)您要与 API 密钥关联的任意元数据。它支持嵌套的数据结构。在 metadata 对象中,以 _ 开头的顶级键保留给系统使用。指定后,此参数将完全替换以前与 API 密钥关联的元数据。
expiration
(可选,字符串)API 密钥的过期时间。默认情况下,API 密钥永不过期。可以省略以保持不变。

响应主体

编辑
updated
(布尔值)如果为 true,则 API 密钥已更新。如果为 false,则 API 密钥没有更改,因为未检测到任何更改。

示例

编辑

如果按如下方式创建跨集群 API 密钥

resp = client.perform_request(
    "POST",
    "/_security/cross_cluster/api_key",
    headers={"Content-Type": "application/json"},
    body={
        "name": "my-cross-cluster-api-key",
        "access": {
            "search": [
                {
                    "names": [
                        "logs*"
                    ]
                }
            ]
        },
        "metadata": {
            "application": "search"
        }
    },
)
print(resp)
const response = await client.transport.request({
  method: "POST",
  path: "/_security/cross_cluster/api_key",
  body: {
    name: "my-cross-cluster-api-key",
    access: {
      search: [
        {
          names: ["logs*"],
        },
      ],
    },
    metadata: {
      application: "search",
    },
  },
});
console.log(response);
POST /_security/cross_cluster/api_key
{
  "name": "my-cross-cluster-api-key",
  "access": {
    "search": [
      {
        "names": ["logs*"]
      }
    ]
  },
  "metadata": {
    "application": "search"
  }
}

成功调用将返回一个 JSON 结构,其中提供了 API 密钥信息。例如

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

可以使用获取 API 密钥信息 API来检查 API 密钥的信息,包括其确切的角色描述符。

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

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

{
  "api_keys": [
    {
      "id": "VuaCfGcBCdbkQm-e5aOx",
      "name": "my-cross-cluster-api-key",
      "type": "cross_cluster",
      "creation": 1548550550158,
      "expiration": null,
      "invalidated": false,
      "username": "myuser",
      "realm": "native1",
      "metadata": {
        "application": "search"
      },
      "role_descriptors": {
        "cross_cluster": {  
          "cluster": [
              "cross_cluster_search"
          ],
          "indices": [
            {
              "names": [
                "logs*"
              ],
              "privileges": [
                "read", "read_cross_cluster", "view_index_metadata"
              ],
              "allow_restricted_indices": false
            }
          ],
          "applications": [ ],
          "run_as": [ ],
          "metadata": { },
          "transient_metadata": {
            "enabled": true
          }
        }
      },
      "access": {  
        "search": [
          {
            "names": [
              "logs*"
            ],
            "allow_restricted_indices": false
          }
        ]
      }
    }
  ]
}

在创建时与指定的 access 范围相对应的角色描述符。在此示例中,它授予了 logs* 索引模式的跨集群搜索权限。

access 对应于 API 密钥创建时指定的值。

以下示例更新了上面创建的 API 密钥,为其分配了新的访问范围和元数据

resp = client.perform_request(
    "PUT",
    "/_security/cross_cluster/api_key/VuaCfGcBCdbkQm-e5aOx",
    headers={"Content-Type": "application/json"},
    body={
        "access": {
            "replication": [
                {
                    "names": [
                        "archive"
                    ]
                }
            ]
        },
        "metadata": {
            "application": "replication"
        }
    },
)
print(resp)
const response = await client.transport.request({
  method: "PUT",
  path: "/_security/cross_cluster/api_key/VuaCfGcBCdbkQm-e5aOx",
  body: {
    access: {
      replication: [
        {
          names: ["archive"],
        },
      ],
    },
    metadata: {
      application: "replication",
    },
  },
});
console.log(response);
PUT /_security/cross_cluster/api_key/VuaCfGcBCdbkQm-e5aOx
{
  "access": {
    "replication": [
      {
        "names": ["archive"]
      }
    ]
  },
  "metadata": {
    "application": "replication"
  }
}

成功调用将返回一个 JSON 结构,指示 API 密钥已更新

{
  "updated": true
}

更新后,可以使用获取 API 密钥信息 API再次检查 API 密钥的权限,结果将是

{
  "api_keys": [
    {
      "id": "VuaCfGcBCdbkQm-e5aOx",
      "name": "my-cross-cluster-api-key",
      "type": "cross_cluster",
      "creation": 1548550550158,
      "expiration": null,
      "invalidated": false,
      "username": "myuser",
      "realm": "native1",
      "metadata": {
        "application": "replication"
      },
      "role_descriptors": {
        "cross_cluster": {  
          "cluster": [
              "cross_cluster_replication"
          ],
          "indices": [
            {
              "names": [
                "archive*"
              ],
              "privileges": [
                "cross_cluster_replication", "cross_cluster_replication_internal"
              ],
              "allow_restricted_indices": false
            }
          ],
          "applications": [ ],
          "run_as": [ ],
          "metadata": { },
          "transient_metadata": {
            "enabled": true
          }
        }
      },
      "access": {  
        "replication": [
          {
            "names": [
              "archive*"
            ],
            "allow_restricted_indices": false
          }
        ]
      }
    }
  ]
}

角色描述符已更新为更新时指定的 access 范围。在此示例中,它已更新为授予 archive* 索引模式的跨集群复制权限。

access 对应于 API 密钥更新时指定的值。