提问者:小点点

OpenSearch/ElasticSearch-仅使用通配符删除别名的授权错误


我正在尝试做一些相当简单的事情——我有一个可能与一个或多个索引相关联的别名,我想删除所有关联并添加一个。这是我正在做的一个例子(如这里所建议的):

POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "*",          // or "index": "_all"
        "alias": "my_index"
      }
    },
    {
      "add": {
        "index": "my_index_2023_01_05_17_18_29",
        "alias": "my_index"
      }
    }
  ]
}

我使用的是管理员用户,由于某种原因,我收到以下错误消息:

{
  "error" : {
    "root_cause" : [
      {
        "type" : "security_exception",
        "reason" : "no permissions for [] and User [name=admin, backend_roles=[], requestedTenant=]"
      }
    ],
    "type" : "security_exception",
    "reason" : "no permissions for [] and User [name=admin, backend_roles=[], requestedTenant=]"
  },
  "status" : 403
}

有点奇怪的消息-它没有指定失败的操作是什么(没有[]的权限),所以我无法找出我缺少哪些权限……

无论哪种方式,如果不使用通配符("index": "*"),我做一些类似"index"的事情:"my_index*"它起作用-它不完全是我想要的,但它执行。

知道为什么会发生这种情况吗?我该如何解决这个问题?

谢谢!

(使用OpenSearch 2.3)


共1个答案

匿名用户

当您将index_pattern指定为"*"时,系统索引也包括在内。即使使用管理员用户,默认情况下也不能更改系统索引的设置。您可以使用“index_name”*或“2022”等参数而不是“*”来删除别名。例如:

POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "index_name*",
        "alias": "my_index"
      }
    }
  ]
}

编辑:您可以使用以下API删除所有没有系统索引的别名。

DELETE *,.-*/_alias/my-alias

您可以在删除它们之前检查API是否正确

GET *,-.*/_alias/my-alias

参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-delete-alias.html

注意:不幸的是,在POST_aliases中无法使用像*,.-*这样的表达式_aliases