更新跨集群 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

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

{
  "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 密钥更新时指定的值。