如何排查 Amazon Elasticsearch 集群中的精细访问控制错误?

上次更新时间:2021 年 3 月 5 日

我的 Amazon Elasticsearch (Amazon ES) 集群遇到访问控制错误。如何排查并解决访问控制错误?

简短描述

您可能会在 Amazon ES 集群中遇到以下精细访问控制错误之一:

  • "security_exception","reason":"no permissions" 403 错误
  • "User: anonymous is not authorized to perform: iam:PassRole"
  • “无法找到任何 Elasticsearch 数据”
  • 401 未授权错误

除了这些错误的排查之外,本文还将向您展示如何使用 Amazon ES 完成以下任务:

  • 在启用字段粒度的访问控制后将其他 AWS 服务与 Amazon ES 集成
  • 使用精细访问控制允许匿名访问
  • 根据用户租赁提供对特定索引、控制面板和可视化的精细访问
  • 使用字段级别的精细访问控制

解决方法

"security_exception","reason":"no permissions" 403 错误

要解决此错误,首先检查 Amazon ES 集群中的用户或后端角色是否具有所需的权限。然后,将用户或后端角色映射到角色

"User: anonymous is not authorized to perform: iam:PassRole"

尝试注册手动快照时,可能会收到此错误。除了用于注册手动快照的 Amazon Identity and Access Management (IAM) 角色所需的正常权限外,您还必须将 manage_snapshots 角色映射到 IAM 角色。然后,使用该 IAM 角色向域发送已签名的请求。

“无法找到任何 Elasticsearch 数据”

升级到 Amazon ES 7.9 后,当您尝试创建索引模式时,可能会收到此错误。在 Amazon ES 7.9 中,您必须使用 /_resolve API 在您在精细访问控制集群中创建新索引模式时将“indices:admin/resolve/index”添加到所有的索引和别名中。由于缺少此权限,Amazon ES 引发 403 错误状态代码。该代码反过来又映射到来自 Kibana 的 500 错误状态代码。因此,这些索引没有列出。

401 未授权错误

当您在主凭证中使用“$”或“!”字符并使用 curl -u “user:password” <ES-ENDPOINT> 时,您可能会收到 401 未授权错误。请务必将凭证放在单引号中,如以下示例所示:

curl -u 'user:password' <ES-ENDPOINT>

在启用字段粒度的访问控制后将其他 AWS 服务与 Amazon ES 集成

要在启用字段粒度访问控制时将另一项 AWS 服务与 Amazon ES 集成,您必须为这些服务的 IAM 角色授予适当的权限。有关详细信息,请参阅以下有关使用具有精细访问控制的集成的文档。

使用精细访问控制允许匿名访问

由于 Amazon ES 的托管性质,目前不支持匿名访问。

根据用户租赁提供对特定索引、控制面板和可视化的精细访问

要提供对特定索引、控制面板或可视化的精细访问,您必须将用户映射到对租户 Kibana 索引拥有权限的角色:

.kibana_<hash>_<tenant_name>

有关更多信息,请参阅管理 Kibana 索引

使用字段级别的精细访问控制

要在字段级别使用精细访问控制,请设置具有所需字段级别安全性的角色。然后,将用户映射到您创建的角色。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?