更新跨集群 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 密钥的访问范围、元数据和过期时间。所有者用户的信息(例如 username
、realm
)也会在每次调用时自动更新。
此 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 } ] } } ] }
以下示例更新了上面创建的 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 } ] } } ] }