Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document Field Level Security on Frozen Tier not working correctly #82044

Closed
madisonb opened this issue Dec 22, 2021 · 20 comments · Fixed by #82521
Closed

Document Field Level Security on Frozen Tier not working correctly #82044

madisonb opened this issue Dec 22, 2021 · 20 comments · Fixed by #82521
Labels
>bug :Security/Authorization Roles, Privileges, DLS/FLS, RBAC/ABAC Team:Security Meta label for security team

Comments

@madisonb
Copy link

Elasticsearch version (bin/elasticsearch --version): 7.16.2 (running inside Elastic Cloud)

Plugins installed: []

JVM version (java -version): n/a (Elastic Cloud)

OS version (uname -a if on a Unix-like system): n/a (Elastic Cloud)

Description of the problem including expected versus actual behavior:

I seem to be running into an issue where Field Level Security throws a null exception when operating on frozen indices.

I have a simple ILM policy for my index that moves data from Hot to Frozen after 12 hours. Within that data set, I would like to grant access to all fields except for a few specific ones that I would like to remain internal only.

If I create a new user and grant them a custom role with field level security (allowing and denying specific fields), that user cannot search for anything beyond my hot data tier without getting the following exception back

"reason": "unsupported_operation_exception: null"

Within the data access role, If I disable Grant access to specific fields, the user can see and return results from the frozen tier.

I will note that in my current environment, this role also is using a Grant read privileges to specific documents templated query, however that does not seem to have an impact on this issue. I have tried to produce a working example below that does not involve that privilege.

Steps to reproduce:

  1. Create a simple ILM policy that rolls data out of a hot index and into a frozen index

  2. Index data into your ILM managed index so that you have both hot data AND frozen data within your cluster. If my ILM index alias was called pulse, my underlying indices are pulse-0001, pulse-0002, etc and the frozen indices look like partial-pulse-0001, partial-pulse-0002... etc

  3. Create a new role that grants read access to you your desired indices, like below (I am using Kibana):

Screen Shot 2021-12-22 at 1 24 46 PM

  1. Create a new user, and assign them typical access to a kibana space and grant them the data role from step 3

  2. In a new private browser, log in as your new user and validate they have access to your frozen tier data and hot tier data, by viewing the Discover panel and looking at a timerange that spans hot and frozen tiers. (24 hrs in my case, see below as an example)

Screen Shot 2021-12-22 at 1 29 14 PM

  1. Go back to the role you created as an admin, and check the box Grant access to specific fields. Deny a field in your data (see below as an example)

Screen Shot 2021-12-22 at 1 30 29 PM

  1. Back as your new user, refresh the page to see shard exceptions being thrown for all your frozen indices (even though my time range is still set to 24 hours, I get exceptions for my entire frozen tier)

Screen Shot 2021-12-22 at 1 31 46 PM

Note in the screenshot above that my data is cut off arbitrarily, right near my frozen tier rollover line from my ILM policy

  1. Investigate the exception further and you get the following

image

  1. Clicking the tab for "Request" shows very normal request, and the "Response" tab looks like below:

Screen Shot 2021-12-22 at 1 35 18 PM

  1. From the command line, I can search the cluster easily if I use a simple count search on a hot tier index
curl https://user:pass@my-cluster.es.us-east-1.aws.found.io:9243/pulse-000252/_count
# returns
{"count":<real number here>,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0}}

But if I try to do an operation on the whole alias that includes frozen shards, I get shard exceptions.

curl https://user:pass@my-cluster.es.us-east-1.aws.found.io:9243/pulse/_count
# returns 
{"count":<partial number here>,"_shards":{"total":248,"successful":14,"skipped":0,"failed":234,"failures":[{"shard":0,"index":"partial-pulse-000015","node":"XCRMYhdLR3KHuHxm74vlCg","reason":{"type":"unsupported_operation_exception","reason":"unsupported_operation_exception: null"}},{"shard":0,"index":"partial-pulse-000016","node":"9SNaA5L9TCqZ8l0BA39c1Q","reason":{"type":"unsupported_operation_exception","reason":"unsupported_operation_exception: null"}},{"shard":0,"index":"partial-pulse-000017","node":"XCRMYhdLR3KHuHxm74vlCg","reason":{"type":"unsupported_operation_exception","reason":"unsupported_operation_exception: null"}},.....
  1. For sanity you can go back to your role configuration and uncheck "Grant access to specific fields" and run that _count command again:
curl https://user:pass@my-cluster.es.us-east-1.aws.found.io:9243/pulse/_count
{"count":<real number here>,"_shards":{"total":248,"successful":248,"skipped":0,"failed":0}}

and it works.

I have also tried combing through the built in roles for Elastic, as well as the built in index priviledges to see if there was anything related to the frozen tier specifically that causes this behavior, without much luck.

Provide logs (if relevant):

I have tried to comb the logs inside of Elastic Cloud but the UI does not seem to be surfacing this exception where I can find it.

@madisonb madisonb added >bug needs:triage Requires assignment of a team area label labels Dec 22, 2021
@andreidan andreidan added :Security/Authorization Roles, Privileges, DLS/FLS, RBAC/ABAC and removed needs:triage Requires assignment of a team area label labels Dec 30, 2021
@elasticmachine elasticmachine added the Team:Security Meta label for security team label Dec 30, 2021
@elasticmachine
Copy link
Collaborator

Pinging @elastic/es-security (Team:Security)

@albertzaharovits
Copy link
Contributor

albertzaharovits commented Jan 3, 2022

@madisonb Thank you for reporting problems with Elasticsearch!

Unfortunately I'm having trouble replicating the issue.
Can you please share more details about the role and the index settings and mappings?
Does it work if you query directly the partially mounted indices rather than the alias?

@albertzaharovits
Copy link
Contributor

For the record, I have tried on a local 7.16.2 node, with the following settings:

path.repo: "/tmp/elasticsearch"
xpack.searchable.snapshot.shared_cache.size: "100mb"
xpack.license.self_generated.type: "trial"

the following commands:

# create index
curl -k -u 'elastic:password' -X PUT "http://localhost:9200/twitter/_doc/1" -H 'Content-Type: application/json' -d'
{
  "category": "click", "tag": "one"
}
'
curl -k -u 'elastic:password' -X PUT "http://localhost:9200/twitter/_doc/2" -H 'Content-Type: application/json' -d'
{
  "category": "click", "tag": "two"
}
'

# create repo
 curl -k -u 'elastic:password' -X PUT "http://localhost:9200/_snapshot/fsbackup?pretty" -H 'Content-Type: application/json' -d'
{
  "type": "fs",
  "settings": {
    "location": "/tmp/elasticsearch",
    "compress": true
  }
}
'

# create ILM policy
curl -k -u 'elastic:password' -X PUT "http://localhost:9200/_ilm/policy/ilmpolicy?pretty" -H 'Content-Type: application/json' -d'
{
  "policy": {
    "phases": {
      "frozen": {
        "actions": {
          "searchable_snapshot" : {
            "snapshot_repository" : "fsbackup"
          }
        }
      }
    }
  }
}
'

# manually apply the ILM policy to the index
curl -k -u 'elastic:password' -X PUT "http://localhost:9200/twitter*/_settings?pretty" -H 'Content-Type: application/json' -d'
{
  "index": {
    "lifecycle": {
      "name": "ilmpolicy"
    }
  }
}
'
# NB on my setup the ILM policy takes a LONG time to be applied, root cause unknown

# create security role
curl -k -u 'elastic:password' -X POST "http://localhost:9200/_security/role/role1?pretty" -H 'Content-Type: application/json' -d'
{
  "indices": [
    {
      "names": [ "twitter*", "partial-twitter*" ],
      "privileges": [ "read" ],
      "field_security" : {
        "grant" : [ "*" ],
        "except" : [ "category" ]
      }
    }
  ]
}
'

# create user
curl -k -u 'elastic:password' -X POST "http://localhost:9200/_security/user/jacknich?pretty" -H 'Content-Type: application/json' -d'
{
  "password" : "password",
  "roles" : [ "role1" ]
}
'

# search by the user
curl -k -u 'jacknich:password' -X GET "http://localhost:9200/*/_search?pretty"

@madisonb You would help us a lot if you could narrow down the reproduction a bit.
I think the index mapping and the role definition should suffice.

@ywelsch do you have any idea or hint on the issue on this?

@ywelsch
Copy link
Contributor

ywelsch commented Jan 4, 2022

@madisonb can you run the same failing command again with error_trace=true. This will provide more detailed information . Also can you share more details about the mappings / role configurations with @albertzaharovits so it's easier to reproduce? A diagnostics dump would help.

@madisonb
Copy link
Author

madisonb commented Jan 4, 2022

@albertzaharovits did you push data up into the index and let it roll over into the frozen tier? My issue is when actual data rolls into the partial tier

Is there something specific you would like to see from the index mapping? The setup is using a component template and is roughly 800 lines long, and I would prefer not to post the entire thing as it exposes how our product is configured (for better or worse). I'm happy to provide a select/specific section if you'd like; we have dynamic templates, aliases, and traditional properties with all kinds of complex mappings that cover text, vectors, numbers, field data filters, geo, custom normalizers, etc.

@ywelsch Running the following command:

curl "https://user:pass@my-cluster.es.us-east-1.aws.found.io:9243/pulse/_count?error_trace=true"

doesn't seem to produce an error trace... Here's a snippet:

{"count":<partial number>,"_shards":{"total":309,"successful":14,"skipped":0,"failed":295,"failures":[{"shard":0,"index":"partial-pulse-000015","node":"XCRMYhdLR3KHuHxm74vlCg","reason":{"type":"unsupported_operation_exception","reason":"unsupported_operation_exception: null"}},
...
,{"shard":0,"index":"partial-pulse-000307","node":"XCRMYhdLR3KHuHxm74vlCg","reason":{"type":"unsupported_operation_exception","reason":"unsupported_operation_exception: null"}},{"shard":0,"index":"partial-pulse-000308","node":"9SNaA5L9TCqZ8l0BA39c1Q","reason":{"type":"unsupported_operation_exception","reason":"unsupported_operation_exception: null"}},{"shard":0,"index":"partial-pulse-000309","node":"XCRMYhdLR3KHuHxm74vlCg","reason":{"type":"unsupported_operation_exception","reason":"unsupported_operation_exception: null"}}]}}

Do I have that right?

Role definition that fails from my example above

GET /_security/role/pulse_data2

# returns
{
  "pulse_data2" : {
    "cluster" : [ ],
    "indices" : [
      {
        "names" : [
          "partial-*",
          "pulse",
          "pulse-*"
        ],
        "privileges" : [
          "read"
        ],
        "field_security" : {
          "grant" : [
            "*"
          ],
          "except" : [
            "type"
          ]
        },
        "allow_restricted_indices" : false
      }
    ],
    "applications" : [ ],
    "run_as" : [ ],
    "metadata" : { },
    "transient_metadata" : {
      "enabled" : true
    }
  }
}

Updating the role via Kibana to allow the _count query to return without failures is the following role (I've removed the field security except clause)

GET /_security/role/pulse_data2

# returns
{
  "pulse_data2" : {
    "cluster" : [ ],
    "indices" : [
      {
        "names" : [
          "partial-*",
          "pulse",
          "pulse-*"
        ],
        "privileges" : [
          "read"
        ],
        "field_security" : {
          "grant" : [
            "*"
          ],
          "except" : [ ]
        },
        "allow_restricted_indices" : false
      }
    ],
    "applications" : [ ],
    "run_as" : [ ],
    "metadata" : { },
    "transient_metadata" : {
      "enabled" : true
    }
  }
}

I can flip between these two role configurations to toggle the errors off and on for the user.

The other interesting thing as I am trying to get a better error trace for you is that I seem to be able to directly query the indices I care about that I know are frozen when the erroneous role is turned on without issue, but querying the partial indices don't work. Do I simply have my permissions incorrect and I shouldn't need the partial-* permission?

@ywelsch
Copy link
Contributor

ywelsch commented Jan 4, 2022

Do you get an error stack trace if you specify partial-pulse-000307 directly as index (instead of just pulse)?

@albertzaharovits
Copy link
Contributor

@madisonb Thanks for the details so far. Alas, I'm still unable to reproduce.

did you push data up into the index and let it roll over into the frozen tier?

I have applied the policy manually, and my test policy triggers the searchable_snapshot action immediately.

I have created an alias (like 'pulse'), that points to both partially mounted indices and regular indices (indices that are in the frozen state, but not yet snapshotted and mounted, ie in the 'wait-for-shard-history-leases' and 'segment-count' steps), and querying the alias works fine for me.

I seem to be able to directly query the indices I care about that I know are frozen when the erroneous role is turned on without issue

I understand that the issue only manifests when querying the alias only? Can you confirm?

If we can't have the mapping, can you show the out of GET /_alias/pulse and GET _ilm/policy/<policy_id>.
Can you please double check that there are no stack exceptions in the node logs (this would be very odd)?

Are you able to contact Elastic support and mention this issue (I assume you'd be more comfortable sharing the information that way).

@madisonb
Copy link
Author

madisonb commented Jan 4, 2022

@ywelsch

  1. a direct query against partial-pulse-000307 works, no errors
  2. a direct query against pulse-000307 works, no errors
  3. a query against partial-pulse-* fails, and 000307 is included in the exception logs per my above comment
  4. a query against the alias pulse fails just like prior
  5. a query against pulse-* fails like prior

So perhaps I am having issues somewhere within the index pattern permissions or alias configuration?

@albertzaharovits

GET /_alias/pulse

# returns
{
  "partial-pulse-000145" : {
    "aliases" : {
      "pulse" : { }
    }
  },
  "partial-pulse-000169" : {
    "aliases" : {
      "pulse" : { }
    }
  },
  "partial-pulse-000097" : {
    "aliases" : {
      "pulse" : { }
    }
  },
.... (repeats for all indices)

ILM Policy

GET _ilm/policy/pulse


# see attached for return value

I can contact Elastic Support and reference this ticket as well.

ilm_policy.txt

@albertzaharovits
Copy link
Contributor

a direct query against pulse-000307 works, no errors
a query against partial-pulse-* fails, and 000307 is included in the exception logs per my above comment

I take from this that the issue also manifests when the search ONLY includes searchable_snapshot shards. Moreover the same search request issued against selected searchable_snapshot shards encounters no such errors. In addition, the issue only happens if the user has FLS controls.

I haven't seen anything suspicious in the ILM policy.
The stuff that differs from my reproduction is that my cluster has a single node, and my index has one shard one segment. Plus the snapshot repository type, and ofc the index mapping.

This is an odd one.
I propose we continue the troubleshooting over the support ticket, but in the meantime can you also please run:

for index in $(curl -X GET "https://user:pass@my-cluster.es.us-east-1.aws.found.io:9243/_cat/indices/partial-pulse-*"); do
echo "try search $index"
curl -X GET "https://user:pass@my-cluster.es.us-east-1.aws.found.io:9243/$index/count"
done

, to verify if there's one single index/shard in a funny state, and which is then tripping the whole search request?

@madisonb
Copy link
Author

madisonb commented Jan 5, 2022

So my specific user I've created does not have permission to _cat/indices, so I used another user to execute the _cat portion and then the regular user per above to do the _count

for index in $(curl -X GET "https://user2:pass2@my-cluster.es.us-east-1.aws.found.io:9243/_cat/indices/partial-pulse-*?h=index"); do
echo "try search $index"
curl -X GET "https://user:pass@my-cluster.es.us-east-1.aws.found.io:9243/$index/_count"
done

Returns

...
{"count":<>,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0}}
try search partial-pulse-000210
{"count":<>,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0}}
try search partial-pulse-000219
{"count":<>,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0}}
try search partial-pulse-000217
{"count":<>,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0}}
try search partial-pulse-000218
{"count":2698412,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0}}
...

All indices were successful, no errors.

@ywelsch
Copy link
Contributor

ywelsch commented Jan 12, 2022

@madisonb what if you select more than one index at once (but not via the alias)?

For example, what does

curl -X GET "https://user:pass@my-cluster.es.us-east-1.aws.found.io:9243/partial-pulse-000218,partial-pulse-000219/_count"

return?

@ywelsch
Copy link
Contributor

ywelsch commented Jan 12, 2022

Let's also see if there are other ways to get the stack trace for the exception.

Can you try the following command to check if that returns a stack trace as part of the error response?

curl "https://user:pass@my-cluster.es.us-east-1.aws.found.io:9243/pulse/_search?size=0&track_total_hits=true&allow_partial_search_results=false&error_trace=true"

As last alternative (if the above does not yield a stack trace), you can try temporarily setting the log level of org.elasticsearch.action.search to DEBUG to capture the stack trace in the logs.

@madisonb
Copy link
Author

@ywelsch

curl -X GET "https://user:pass@my-cluster.es.us-east-1.aws.found.io:9243/partial-pulse-000218,partial-pulse-000219/_count"
{"count":<real number>,"_shards":{"total":2,"successful":2,"skipped":0,"failed":0}}

I tried a couple of different combinations of numbers (I have no real guess as to what corrupted index might be here) and stumbled upon something. It looks like index 000001-000005 all have the same exception thrown (below):

curl -X GET "https://user:pass@my-cluster.es.us-east-1.aws.found.io:9243/partial-pulse-000001,partial-pulse-000219/_count?error_trace=true"
{"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [partial-pulse-000001]","resource.type":"index_or_alias","resource.id":"partial-pulse-000001","index_uuid":"_na_","index":"partial-pulse-000001","stack_trace":"[partial-pulse-000001] IndexNotFoundException[no such index [partial-pulse-000001]]\n\tat org.elasticsearch.cluster.metadata.IndexNameExpressionResolver$WildcardExpressionResolver.indexNotFoundException(IndexNameExpressionResolver.java:1250)\n\tat org.elasticsearch.cluster.metadata.IndexNameExpressionResolver$WildcardExpressionResolver.innerResolve(IndexNameExpressionResolver.java:1188)\n\tat org.elasticsearch.cluster.metadata.IndexNameExpressionResolver$WildcardExpressionResolver.resolve(IndexNameExpressionResolver.java:1144)\n\tat org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:292)\n\tat org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:266)\n\tat org.elasticsearch.action.search.TransportSearchAction.resolveLocalIndices(TransportSearchAction.java:891)\n\tat org.elasticsearch.action.search.TransportSearchAction.executeSearch(TransportSearchAction.java:948)\n\tat org.elasticsearch.action.search.TransportSearchAction.executeLocalSearch(TransportSearchAction.java:761)\n\tat org.elasticsearch.action.search.TransportSearchAction.lambda$executeRequest$6(TransportSearchAction.java:397)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.index.query.Rewriteable.rewriteAndFetch(Rewriteable.java:112)\n\tat org.elasticsearch.index.query.Rewriteable.rewriteAndFetch(Rewriteable.java:77)\n\tat org.elasticsearch.action.search.TransportSearchAction.executeRequest(TransportSearchAction.java:485)\n\tat org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:283)\n\tat org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:99)\n\tat org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:179)\n\tat org.elasticsearch.action.support.ActionFilter$Simple.apply(ActionFilter.java:53)\n\tat org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:177)\n\tat org.elasticsearch.xpack.security.action.filter.SecurityActionFilter.lambda$applyInternal$3(SecurityActionFilter.java:190)\n\tat org.elasticsearch.action.ActionListener$DelegatingFailureActionListener.onResponse(ActionListener.java:219)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:577)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.FieldAndDocumentLevelSecurityRequestInterceptor.intercept(FieldAndDocumentLevelSecurityRequestInterceptor.java:85)\n\tat org.elasticsearch.xpack.security.authz.interceptor.ShardSearchRequestInterceptor.intercept(ShardSearchRequestInterceptor.java:26)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:575)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.DlsFlsLicenseRequestInterceptor.intercept(DlsFlsLicenseRequestInterceptor.java:85)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:575)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.FieldAndDocumentLevelSecurityRequestInterceptor.intercept(FieldAndDocumentLevelSecurityRequestInterceptor.java:85)\n\tat org.elasticsearch.xpack.security.authz.interceptor.UpdateRequestInterceptor.intercept(UpdateRequestInterceptor.java:27)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:575)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.SearchRequestInterceptor.disableFeatures(SearchRequestInterceptor.java:71)\n\tat org.elasticsearch.xpack.security.authz.interceptor.FieldAndDocumentLevelSecurityRequestInterceptor.intercept(FieldAndDocumentLevelSecurityRequestInterceptor.java:80)\n\tat org.elasticsearch.xpack.security.authz.interceptor.SearchRequestInterceptor.intercept(SearchRequestInterceptor.java:26)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:575)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.ResizeRequestInterceptor.intercept(ResizeRequestInterceptor.java:103)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:575)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.BulkShardRequestInterceptor.intercept(BulkShardRequestInterceptor.java:87)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:575)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.IndicesAliasesRequestInterceptor.intercept(IndicesAliasesRequestInterceptor.java:128)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.runRequestInterceptors(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.handleIndexActionAuthorizationResult(AuthorizationService.java:556)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.lambda$authorizeAction$11(AuthorizationService.java:450)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$AuthorizationResultListener.onResponse(AuthorizationService.java:967)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$AuthorizationResultListener.onResponse(AuthorizationService.java:931)\n\tat org.elasticsearch.action.support.ContextPreservingActionListener.onResponse(ContextPreservingActionListener.java:31)\n\tat org.elasticsearch.xpack.security.authz.RBACEngine.lambda$authorizeIndexAction$3(RBACEngine.java:352)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.common.util.concurrent.ListenableFuture.notifyListenerDirectly(ListenableFuture.java:113)\n\tat org.elasticsearch.common.util.concurrent.ListenableFuture.addListener(ListenableFuture.java:55)\n\tat org.elasticsearch.common.util.concurrent.ListenableFuture.addListener(ListenableFuture.java:41)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$CachingAsyncSupplier.getAsync(AuthorizationService.java:1015)\n\tat org.elasticsearch.xpack.security.authz.RBACEngine.authorizeIndexAction(RBACEngine.java:343)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.authorizeAction(AuthorizationService.java:443)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.maybeAuthorizeRunAs(AuthorizationService.java:371)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.lambda$authorize$1(AuthorizationService.java:256)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.action.support.ContextPreservingActionListener.onResponse(ContextPreservingActionListener.java:31)\n\tat org.elasticsearch.xpack.security.authz.RBACEngine.lambda$resolveAuthorizationInfo$1(RBACEngine.java:138)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.security.authz.store.CompositeRolesStore.roles(CompositeRolesStore.java:173)\n\tat org.elasticsearch.xpack.security.authz.store.CompositeRolesStore.getRoles(CompositeRolesStore.java:279)\n\tat org.elasticsearch.xpack.security.authz.RBACEngine.getRoles(RBACEngine.java:144)\n\tat org.elasticsearch.xpack.security.authz.RBACEngine.resolveAuthorizationInfo(RBACEngine.java:127)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.authorize(AuthorizationService.java:258)\n\tat org.elasticsearch.xpack.security.action.filter.SecurityActionFilter.lambda$applyInternal$4(SecurityActionFilter.java:186)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.action.ActionListener$MappedActionListener.onResponse(ActionListener.java:101)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.authenticateAsync(AuthenticatorChain.java:102)\n\tat org.elasticsearch.xpack.security.authc.AuthenticationService.authenticate(AuthenticationService.java:171)\n\tat org.elasticsearch.xpack.security.action.filter.SecurityActionFilter.applyInternal(SecurityActionFilter.java:182)\n\tat org.elasticsearch.xpack.security.action.filter.SecurityActionFilter.apply(SecurityActionFilter.java:124)\n\tat org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:177)\n\tat org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:154)\n\tat org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:82)\n\tat org.elasticsearch.client.node.NodeClient.executeLocally(NodeClient.java:95)\n\tat org.elasticsearch.client.node.NodeClient.doExecute(NodeClient.java:73)\n\tat org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:407)\n\tat org.elasticsearch.client.support.AbstractClient.search(AbstractClient.java:547)\n\tat org.elasticsearch.rest.action.search.RestCountAction.lambda$prepareRequest$1(RestCountAction.java:93)\n\tat org.elasticsearch.rest.BaseRestHandler.handleRequest(BaseRestHandler.java:109)\n\tat org.elasticsearch.xpack.security.rest.SecurityRestFilter.lambda$handleRequest$0(SecurityRestFilter.java:90)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.security.authc.support.SecondaryAuthenticator.lambda$authenticateAndAttachToContext$2(SecondaryAuthenticator.java:84)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.security.authc.support.SecondaryAuthenticator.authenticate(SecondaryAuthenticator.java:94)\n\tat org.elasticsearch.xpack.security.authc.support.SecondaryAuthenticator.authenticateAndAttachToContext(SecondaryAuthenticator.java:78)\n\tat org.elasticsearch.xpack.security.rest.SecurityRestFilter.lambda$handleRequest$2(SecurityRestFilter.java:85)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.action.ActionListener$MappedActionListener.onResponse(ActionListener.java:101)\n\tat org.elasticsearch.action.ActionListener$RunBeforeActionListener.onResponse(ActionListener.java:389)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.writeAuthToContext(AuthenticatorChain.java:376)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.finishAuthentication(AuthenticatorChain.java:352)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.maybeLookupRunAsUser(AuthenticatorChain.java:205)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.lambda$doAuthenticate$1(AuthenticatorChain.java:128)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.onResponse(IteratingActionListener.java:141)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.lambda$getAuthenticatorConsumer$3(AuthenticatorChain.java:175)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.security.authc.RealmsAuthenticator.lambda$consumeToken$3(RealmsAuthenticator.java:219)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.action.support.ContextPreservingActionListener.onResponse(ContextPreservingActionListener.java:31)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.onResponse(IteratingActionListener.java:141)\n\tat org.elasticsearch.xpack.security.authc.RealmsAuthenticator.lambda$consumeToken$0(RealmsAuthenticator.java:164)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.security.authc.support.CachingUsernamePasswordRealm.lambda$authenticateWithCache$1(CachingUsernamePasswordRealm.java:155)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.security.authc.support.CachingUsernamePasswordRealm.handleCachedAuthentication(CachingUsernamePasswordRealm.java:242)\n\tat org.elasticsearch.xpack.security.authc.support.CachingUsernamePasswordRealm.lambda$authenticateWithCache$2(CachingUsernamePasswordRealm.java:139)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.common.util.concurrent.ListenableFuture.notifyListenerDirectly(ListenableFuture.java:113)\n\tat org.elasticsearch.common.util.concurrent.ListenableFuture.addListener(ListenableFuture.java:55)\n\tat org.elasticsearch.xpack.security.authc.support.CachingUsernamePasswordRealm.authenticateWithCache(CachingUsernamePasswordRealm.java:134)\n\tat org.elasticsearch.xpack.security.authc.support.CachingUsernamePasswordRealm.authenticate(CachingUsernamePasswordRealm.java:105)\n\tat org.elasticsearch.xpack.security.authc.RealmsAuthenticator.lambda$consumeToken$2(RealmsAuthenticator.java:148)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.run(IteratingActionListener.java:117)\n\tat org.elasticsearch.xpack.security.authc.RealmsAuthenticator.consumeToken(RealmsAuthenticator.java:233)\n\tat org.elasticsearch.xpack.security.authc.RealmsAuthenticator.authenticate(RealmsAuthenticator.java:84)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.lambda$getAuthenticatorConsumer$5(AuthenticatorChain.java:171)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.onResponse(IteratingActionListener.java:135)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.lambda$getAuthenticatorConsumer$5(AuthenticatorChain.java:165)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.onResponse(IteratingActionListener.java:135)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.lambda$getAuthenticatorConsumer$5(AuthenticatorChain.java:165)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.onResponse(IteratingActionListener.java:135)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.lambda$getAuthenticatorConsumer$5(AuthenticatorChain.java:165)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.run(IteratingActionListener.java:117)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.doAuthenticate(AuthenticatorChain.java:143)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.authenticateAsync(AuthenticatorChain.java:104)\n\tat org.elasticsearch.xpack.security.authc.AuthenticationService.authenticate(AuthenticationService.java:149)\n\tat org.elasticsearch.xpack.security.authc.AuthenticationService.authenticate(AuthenticationService.java:127)\n\tat org.elasticsearch.xpack.security.rest.SecurityRestFilter.handleRequest(SecurityRestFilter.java:79)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:327)\n\tat org.elasticsearch.rest.RestController.tryAllHandlers(RestController.java:393)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:245)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.dispatchRequest(AbstractHttpServerTransport.java:382)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.handleIncomingRequest(AbstractHttpServerTransport.java:461)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.incomingRequest(AbstractHttpServerTransport.java:357)\n\tat org.elasticsearch.http.netty4.Netty4HttpRequestHandler.channelRead0(Netty4HttpRequestHandler.java:32)\n\tat org.elasticsearch.http.netty4.Netty4HttpRequestHandler.channelRead0(Netty4HttpRequestHandler.java:18)\n\tat io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat org.elasticsearch.http.netty4.Netty4HttpPipeliningHandler.channelRead(Netty4HttpPipeliningHandler.java:48)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)\n\tat io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1374)\n\tat io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1237)\n\tat io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1286)\n\tat io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:507)\n\tat io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:446)\n\tat io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)\n\tat io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:620)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:583)\n\tat io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat java.base/java.lang.Thread.run(Thread.java:833)\n"}],"type":"index_not_found_exception","reason":"no such index [partial-pulse-000001]","resource.type":"index_or_alias","resource.id":"partial-pulse-000001","index_uuid":"_na_","index":"partial-pulse-000001","stack_trace":"[partial-pulse-000001] IndexNotFoundException[no such index [partial-pulse-000001]]\n\tat org.elasticsearch.cluster.metadata.IndexNameExpressionResolver$WildcardExpressionResolver.indexNotFoundException(IndexNameExpressionResolver.java:1250)\n\tat org.elasticsearch.cluster.metadata.IndexNameExpressionResolver$WildcardExpressionResolver.innerResolve(IndexNameExpressionResolver.java:1188)\n\tat org.elasticsearch.cluster.metadata.IndexNameExpressionResolver$WildcardExpressionResolver.resolve(IndexNameExpressionResolver.java:1144)\n\tat org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:292)\n\tat org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:266)\n\tat org.elasticsearch.action.search.TransportSearchAction.resolveLocalIndices(TransportSearchAction.java:891)\n\tat org.elasticsearch.action.search.TransportSearchAction.executeSearch(TransportSearchAction.java:948)\n\tat org.elasticsearch.action.search.TransportSearchAction.executeLocalSearch(TransportSearchAction.java:761)\n\tat org.elasticsearch.action.search.TransportSearchAction.lambda$executeRequest$6(TransportSearchAction.java:397)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.index.query.Rewriteable.rewriteAndFetch(Rewriteable.java:112)\n\tat org.elasticsearch.index.query.Rewriteable.rewriteAndFetch(Rewriteable.java:77)\n\tat org.elasticsearch.action.search.TransportSearchAction.executeRequest(TransportSearchAction.java:485)\n\tat org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:283)\n\tat org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:99)\n\tat org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:179)\n\tat org.elasticsearch.action.support.ActionFilter$Simple.apply(ActionFilter.java:53)\n\tat org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:177)\n\tat org.elasticsearch.xpack.security.action.filter.SecurityActionFilter.lambda$applyInternal$3(SecurityActionFilter.java:190)\n\tat org.elasticsearch.action.ActionListener$DelegatingFailureActionListener.onResponse(ActionListener.java:219)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:577)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.FieldAndDocumentLevelSecurityRequestInterceptor.intercept(FieldAndDocumentLevelSecurityRequestInterceptor.java:85)\n\tat org.elasticsearch.xpack.security.authz.interceptor.ShardSearchRequestInterceptor.intercept(ShardSearchRequestInterceptor.java:26)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:575)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.DlsFlsLicenseRequestInterceptor.intercept(DlsFlsLicenseRequestInterceptor.java:85)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:575)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.FieldAndDocumentLevelSecurityRequestInterceptor.intercept(FieldAndDocumentLevelSecurityRequestInterceptor.java:85)\n\tat org.elasticsearch.xpack.security.authz.interceptor.UpdateRequestInterceptor.intercept(UpdateRequestInterceptor.java:27)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:575)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.SearchRequestInterceptor.disableFeatures(SearchRequestInterceptor.java:71)\n\tat org.elasticsearch.xpack.security.authz.interceptor.FieldAndDocumentLevelSecurityRequestInterceptor.intercept(FieldAndDocumentLevelSecurityRequestInterceptor.java:80)\n\tat org.elasticsearch.xpack.security.authz.interceptor.SearchRequestInterceptor.intercept(SearchRequestInterceptor.java:26)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:575)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.ResizeRequestInterceptor.intercept(ResizeRequestInterceptor.java:103)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:575)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.BulkShardRequestInterceptor.intercept(BulkShardRequestInterceptor.java:87)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:575)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$1.onResponse(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.interceptor.IndicesAliasesRequestInterceptor.intercept(IndicesAliasesRequestInterceptor.java:128)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.runRequestInterceptors(AuthorizationService.java:571)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.handleIndexActionAuthorizationResult(AuthorizationService.java:556)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.lambda$authorizeAction$11(AuthorizationService.java:450)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$AuthorizationResultListener.onResponse(AuthorizationService.java:967)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$AuthorizationResultListener.onResponse(AuthorizationService.java:931)\n\tat org.elasticsearch.action.support.ContextPreservingActionListener.onResponse(ContextPreservingActionListener.java:31)\n\tat org.elasticsearch.xpack.security.authz.RBACEngine.lambda$authorizeIndexAction$3(RBACEngine.java:352)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.common.util.concurrent.ListenableFuture.notifyListenerDirectly(ListenableFuture.java:113)\n\tat org.elasticsearch.common.util.concurrent.ListenableFuture.addListener(ListenableFuture.java:55)\n\tat org.elasticsearch.common.util.concurrent.ListenableFuture.addListener(ListenableFuture.java:41)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService$CachingAsyncSupplier.getAsync(AuthorizationService.java:1015)\n\tat org.elasticsearch.xpack.security.authz.RBACEngine.authorizeIndexAction(RBACEngine.java:343)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.authorizeAction(AuthorizationService.java:443)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.maybeAuthorizeRunAs(AuthorizationService.java:371)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.lambda$authorize$1(AuthorizationService.java:256)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.action.support.ContextPreservingActionListener.onResponse(ContextPreservingActionListener.java:31)\n\tat org.elasticsearch.xpack.security.authz.RBACEngine.lambda$resolveAuthorizationInfo$1(RBACEngine.java:138)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.security.authz.store.CompositeRolesStore.roles(CompositeRolesStore.java:173)\n\tat org.elasticsearch.xpack.security.authz.store.CompositeRolesStore.getRoles(CompositeRolesStore.java:279)\n\tat org.elasticsearch.xpack.security.authz.RBACEngine.getRoles(RBACEngine.java:144)\n\tat org.elasticsearch.xpack.security.authz.RBACEngine.resolveAuthorizationInfo(RBACEngine.java:127)\n\tat org.elasticsearch.xpack.security.authz.AuthorizationService.authorize(AuthorizationService.java:258)\n\tat org.elasticsearch.xpack.security.action.filter.SecurityActionFilter.lambda$applyInternal$4(SecurityActionFilter.java:186)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.action.ActionListener$MappedActionListener.onResponse(ActionListener.java:101)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.authenticateAsync(AuthenticatorChain.java:102)\n\tat org.elasticsearch.xpack.security.authc.AuthenticationService.authenticate(AuthenticationService.java:171)\n\tat org.elasticsearch.xpack.security.action.filter.SecurityActionFilter.applyInternal(SecurityActionFilter.java:182)\n\tat org.elasticsearch.xpack.security.action.filter.SecurityActionFilter.apply(SecurityActionFilter.java:124)\n\tat org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:177)\n\tat org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:154)\n\tat org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:82)\n\tat org.elasticsearch.client.node.NodeClient.executeLocally(NodeClient.java:95)\n\tat org.elasticsearch.client.node.NodeClient.doExecute(NodeClient.java:73)\n\tat org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:407)\n\tat org.elasticsearch.client.support.AbstractClient.search(AbstractClient.java:547)\n\tat org.elasticsearch.rest.action.search.RestCountAction.lambda$prepareRequest$1(RestCountAction.java:93)\n\tat org.elasticsearch.rest.BaseRestHandler.handleRequest(BaseRestHandler.java:109)\n\tat org.elasticsearch.xpack.security.rest.SecurityRestFilter.lambda$handleRequest$0(SecurityRestFilter.java:90)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.security.authc.support.SecondaryAuthenticator.lambda$authenticateAndAttachToContext$2(SecondaryAuthenticator.java:84)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.security.authc.support.SecondaryAuthenticator.authenticate(SecondaryAuthenticator.java:94)\n\tat org.elasticsearch.xpack.security.authc.support.SecondaryAuthenticator.authenticateAndAttachToContext(SecondaryAuthenticator.java:78)\n\tat org.elasticsearch.xpack.security.rest.SecurityRestFilter.lambda$handleRequest$2(SecurityRestFilter.java:85)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.action.ActionListener$MappedActionListener.onResponse(ActionListener.java:101)\n\tat org.elasticsearch.action.ActionListener$RunBeforeActionListener.onResponse(ActionListener.java:389)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.writeAuthToContext(AuthenticatorChain.java:376)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.finishAuthentication(AuthenticatorChain.java:352)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.maybeLookupRunAsUser(AuthenticatorChain.java:205)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.lambda$doAuthenticate$1(AuthenticatorChain.java:128)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.onResponse(IteratingActionListener.java:141)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.lambda$getAuthenticatorConsumer$3(AuthenticatorChain.java:175)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.security.authc.RealmsAuthenticator.lambda$consumeToken$3(RealmsAuthenticator.java:219)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.action.support.ContextPreservingActionListener.onResponse(ContextPreservingActionListener.java:31)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.onResponse(IteratingActionListener.java:141)\n\tat org.elasticsearch.xpack.security.authc.RealmsAuthenticator.lambda$consumeToken$0(RealmsAuthenticator.java:164)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.security.authc.support.CachingUsernamePasswordRealm.lambda$authenticateWithCache$1(CachingUsernamePasswordRealm.java:155)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.xpack.security.authc.support.CachingUsernamePasswordRealm.handleCachedAuthentication(CachingUsernamePasswordRealm.java:242)\n\tat org.elasticsearch.xpack.security.authc.support.CachingUsernamePasswordRealm.lambda$authenticateWithCache$2(CachingUsernamePasswordRealm.java:139)\n\tat org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:136)\n\tat org.elasticsearch.common.util.concurrent.ListenableFuture.notifyListenerDirectly(ListenableFuture.java:113)\n\tat org.elasticsearch.common.util.concurrent.ListenableFuture.addListener(ListenableFuture.java:55)\n\tat org.elasticsearch.xpack.security.authc.support.CachingUsernamePasswordRealm.authenticateWithCache(CachingUsernamePasswordRealm.java:134)\n\tat org.elasticsearch.xpack.security.authc.support.CachingUsernamePasswordRealm.authenticate(CachingUsernamePasswordRealm.java:105)\n\tat org.elasticsearch.xpack.security.authc.RealmsAuthenticator.lambda$consumeToken$2(RealmsAuthenticator.java:148)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.run(IteratingActionListener.java:117)\n\tat org.elasticsearch.xpack.security.authc.RealmsAuthenticator.consumeToken(RealmsAuthenticator.java:233)\n\tat org.elasticsearch.xpack.security.authc.RealmsAuthenticator.authenticate(RealmsAuthenticator.java:84)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.lambda$getAuthenticatorConsumer$5(AuthenticatorChain.java:171)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.onResponse(IteratingActionListener.java:135)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.lambda$getAuthenticatorConsumer$5(AuthenticatorChain.java:165)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.onResponse(IteratingActionListener.java:135)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.lambda$getAuthenticatorConsumer$5(AuthenticatorChain.java:165)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.onResponse(IteratingActionListener.java:135)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.lambda$getAuthenticatorConsumer$5(AuthenticatorChain.java:165)\n\tat org.elasticsearch.xpack.core.common.IteratingActionListener.run(IteratingActionListener.java:117)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.doAuthenticate(AuthenticatorChain.java:143)\n\tat org.elasticsearch.xpack.security.authc.AuthenticatorChain.authenticateAsync(AuthenticatorChain.java:104)\n\tat org.elasticsearch.xpack.security.authc.AuthenticationService.authenticate(AuthenticationService.java:149)\n\tat org.elasticsearch.xpack.security.authc.AuthenticationService.authenticate(AuthenticationService.java:127)\n\tat org.elasticsearch.xpack.security.rest.SecurityRestFilter.handleRequest(SecurityRestFilter.java:79)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:327)\n\tat org.elasticsearch.rest.RestController.tryAllHandlers(RestController.java:393)\n\tat org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:245)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.dispatchRequest(AbstractHttpServerTransport.java:382)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.handleIncomingRequest(AbstractHttpServerTransport.java:461)\n\tat org.elasticsearch.http.AbstractHttpServerTransport.incomingRequest(AbstractHttpServerTransport.java:357)\n\tat org.elasticsearch.http.netty4.Netty4HttpRequestHandler.channelRead0(Netty4HttpRequestHandler.java:32)\n\tat org.elasticsearch.http.netty4.Netty4HttpRequestHandler.channelRead0(Netty4HttpRequestHandler.java:18)\n\tat io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat org.elasticsearch.http.netty4.Netty4HttpPipeliningHandler.channelRead(Netty4HttpPipeliningHandler.java:48)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)\n\tat io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1374)\n\tat io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1237)\n\tat io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1286)\n\tat io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:507)\n\tat io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:446)\n\tat io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)\n\tat io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:620)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:583)\n\tat io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat java.base/java.lang.Thread.run(Thread.java:833)\n"},"status":404}

I was hoping this was a lead, but it looks like the ILM policy, and pulse alias are all correctly updated and contain no references to those original 5 indices. I suspect this was me testing and I deleted and restarted the policy at 000006. This would also not explain the behavior using the * pattern, but I wanted to document it anyways.

So I went back to trying to use the * pattern to find some kind of odd index, and immediately honed in on something inside of 00005*

curl -X GET "https://user:pass@my-cluster.es.us-east-1.aws.found.io:9243//partial-pulse-00005*/_count?error_trace=true"
{"count":<real>,"_shards":{"total":10,"successful":9,"skipped":0,"failed":1,"failures":[{"shard":0,"index":"partial-pulse-000058","node":"VrDC1TuCTeKCDAoxHEnxiA","reason":{"type":"unsupported_operation_exception","reason":"unsupported_operation_exception: null"}}]}}

I tried all 10 combinations of those indices to see if there was something off, but nothing hit in terms of a nice exception for you

# combinations using explicit indices all 00005x came back fine
.../partial-pulse-000059,partial-pulse-000060/....

Moving on to your second comment with the additional query parameters did yield something

curl -X GET "https://user:pass@my-cluster.es.us-east-1.aws.found.io:9243//pulse/_search?size=0&track_total_hits=true&allow_partial_search_results=false&error_trace=true"

attached is the exception that I hope you will find helpful

exception.txt

I have not applied the org.elasticsearch.action.search config setting at this point in time.

@ywelsch
Copy link
Contributor

ywelsch commented Jan 13, 2022

attached is the exception that I hope you will find helpful

excellent. This was exactly what I was looking for. Will do some digging and get back to you.

@ywelsch
Copy link
Contributor

ywelsch commented Jan 13, 2022

It's a bug (indirectly) introduced by #78988 (can_match now applies the security wrappers). We will need to add lazy initialization for the fieldNamesFilterTerms in FieldSubsetReader similar to what was done for DocumentSubsetReader in #48036, so that the security wrappers properly interact with RewriteCachingDirectoryReader.

@ywelsch
Copy link
Contributor

ywelsch commented Jan 13, 2022

The reason this was so hard to reproduce is that it came only into play with a lot of shards, where we needed results of some shards to trigger an optimization (can_match check) on later shards (introduced by #51708) that ultimately ran into the problem here.

@ywelsch
Copy link
Contributor

ywelsch commented Jan 13, 2022

Interestingly enough, only the optimization in #51708 brought the issue to light (as it results in a hard failure), as regular can-match phases that fail just silently fall back to full query phases (= extra work).

@ywelsch
Copy link
Contributor

ywelsch commented Jan 13, 2022

Fix in the works here: #82521

ywelsch added a commit that referenced this issue Jan 13, 2022
Field level security was interacting in bad ways with the can-match phase on frozen tier shards (interaction between
FieldSubsetReader and RewriteCachingDirectoryReader). This made can-match phase fail, which in the normal case
would result in extra load on the frozen tier, and in the extreme case (in interaction with #51708) made searches fail.

This is a bug that was indirectly introduced by #78988.

Closes #82044
ywelsch added a commit to ywelsch/elasticsearch that referenced this issue Jan 13, 2022
Field level security was interacting in bad ways with the can-match phase on frozen tier shards (interaction between
FieldSubsetReader and RewriteCachingDirectoryReader). This made can-match phase fail, which in the normal case
would result in extra load on the frozen tier, and in the extreme case (in interaction with elastic#51708) made searches fail.

This is a bug that was indirectly introduced by elastic#78988.

Closes elastic#82044
@madisonb
Copy link
Author

@ywelsch thank you for your assistance, I wasn't crazy! Looks like the fix is slated for 7.17 and beyond, cheers.

ywelsch added a commit to ywelsch/elasticsearch that referenced this issue Jan 13, 2022
Field level security was interacting in bad ways with the can-match phase on frozen tier shards (interaction between
FieldSubsetReader and RewriteCachingDirectoryReader). This made can-match phase fail, which in the normal case
would result in extra load on the frozen tier, and in the extreme case (in interaction with elastic#51708) made searches fail.

This is a bug that was indirectly introduced by elastic#78988.

Closes elastic#82044
@ywelsch
Copy link
Contributor

ywelsch commented Jan 13, 2022

Looks like the fix is slated for 7.17 and beyond, cheers.

correct! Thanks again for reporting this bug and all the help on getting us this important stack trace.

ywelsch added a commit that referenced this issue Jan 14, 2022
Field level security was interacting in bad ways with the can-match phase on frozen tier shards (interaction between
FieldSubsetReader and RewriteCachingDirectoryReader). This made can-match phase fail, which in the normal case
would result in extra load on the frozen tier, and in the extreme case (in interaction with #51708) made searches fail.

This is a bug that was indirectly introduced by #78988.

Closes #82044
ywelsch added a commit that referenced this issue Jan 14, 2022
Field level security was interacting in bad ways with the can-match phase on frozen tier shards (interaction between
FieldSubsetReader and RewriteCachingDirectoryReader). This made can-match phase fail, which in the normal case
would result in extra load on the frozen tier, and in the extreme case (in interaction with #51708) made searches fail.

This is a bug that was indirectly introduced by #78988.

Closes #82044

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
>bug :Security/Authorization Roles, Privileges, DLS/FLS, RBAC/ABAC Team:Security Meta label for security team
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants