--- title: "提供的授权凭证不支持 run-as - 如何解决此 Elasticsearch 异常" date: 2026-01-02 lastmod: 2026-01-02 description: "当 Elasticsearch 用户尝试使用没有必要权限的凭证执行 run-as 命令时,会出现此错误。本文介绍了如何通过提供正确的凭证或修改用户权限来解决这个问题。" tags: ["Elasticsearch安全", "权限管理", "run-as功能", "身份验证", "异常处理"] summary: "版本: 8.4-8.9 简要来说,当 Elasticsearch 用户尝试使用没有必要权限的凭证执行"run-as"命令时,会发生此错误。“run-as"功能允许一个用户以另一个用户的身份执行命令。要解决此问题,您可以提供具有"run-as"权限的正确凭证,或者修改现有用户的权限以包含"run-as”。另外,如果不需要"run-as"功能,也可以禁用它。在分配权限时,务必确保遵循最小权限原则,以避免潜在的安全风险。 日志上下文 # 日志"the provided grant credentials do not support run-as"的类名是 TransportGrantAction.java。 我们从 Elasticsearch 源代码中提取了以下内容,供那些寻求深入了解上下文的人参考: if (authentication.isRunAs()) { final String effectiveUsername = authentication.getEffectiveSubject().getUser().principal(); if (runAsUsername != null && false == runAsUsername.equals(effectiveUsername)) { // runAs is ignored listener.onFailure( new ElasticsearchStatusException("the provided grant credentials do not support run-as"; RestStatus.BAD_REQUEST) ); } else { // Authentication can be run-as even when runAsUsername is null. // This can happen when the authentication itself is a run-as client-credentials token." --- > **版本:** 8.4-8.9 简要来说,当 Elasticsearch 用户尝试使用没有必要权限的凭证执行"run-as"命令时,会发生此错误。"run-as"功能允许一个用户以另一个用户的身份执行命令。要解决此问题,您可以提供具有"run-as"权限的正确凭证,或者修改现有用户的权限以包含"run-as"。另外,如果不需要"run-as"功能,也可以禁用它。在分配权限时,务必确保遵循最小权限原则,以避免潜在的安全风险。 日志上下文 ----------- 日志"the provided grant credentials do not support run-as"的类名是 [TransportGrantAction.java。](https://www.geeksforgeeks.org/java-lang-class-class-java-set-1/) 我们从 Elasticsearch 源代码中提取了以下内容,供那些寻求深入了解上下文的人参考: ```java if (authentication.isRunAs()) { final String effectiveUsername = authentication.getEffectiveSubject().getUser().principal(); if (runAsUsername != null && false == runAsUsername.equals(effectiveUsername)) { // runAs is ignored listener.onFailure( new ElasticsearchStatusException("the provided grant credentials do not support run-as"; RestStatus.BAD_REQUEST) ); } else { // Authentication can be run-as even when runAsUsername is null. // This can happen when the authentication itself is a run-as client-credentials token. assert runAsUsername != null || "access_token".equals(request.getGrant().getType()); ```