如何排查 Kibana 的 Amazon Cognito 身份验证问题?

上次更新时间:2020 年 2 月 11 日

我无法通过 Amazon Elasticsearch Service (Amazon ES) 域上的 Amazon Cognito 访问 Kibana。 

解决方法

我在尝试启用 Amazon Cognito 身份验证时收到一条错误消息。

  • “Amazon ES 无法创建角色”:验证 AWS Identity and Access Management (IAM) 用户的 Amazon Cognito 角色进行了正确配置
  • “调用 CreateElasticsearchDomain 操作时发生错误 (ValidationException):需要指定用户池的域”:验证域名称已指定。您可以使用托管的用户池域,或者可以添加自定义域。Amazon ES 使用域名将用户重定向到登录页面以进行 Kibana 访问。

输入 Kibana URL 时,我没有看到登录页面。我被直接转到 Kibana 控制面板。

不需要进行 Amazon Cognito 身份验证。发生以下情况时,您将被重定向到 Kibana 登录页面:

  • 您可以使用基于 IP 的域访问策略,以允许您的本地计算机公有 IP 地址访问 Kibana。
  • 允许的 IAM 用户或角色对请求进行签署。
  • 您的 Amazon ES 域位于 Virtual Private Cloud (VPC) 中,且该域拥有开放访问策略。在此情况下,所有的 VPC 用户可以在不进行 Amazon Cognito 身份验证的情况下访问 Kibana 和域。

要确认需要进行 Amazon Cognito 身份验证,请更改您的域访问策略。有关更多信息,请参阅配置访问策略

我输入 Kibana URL 时,收到 redirect_mismatch 错误。

  1. 登录 Amazon Cognito 控制台
  2. 选择管理用户池,然后选择您要编辑的用户池。
  3. 在页面左侧的导航栏上,选择应用程序客户端
  4. 验证回调 URL注销 URL 进行了正确配置,就像在此示例中一样:
your-kibana-endpoint/app/kibana

注意:将 your-kibana-endpoint 替换为您的终端节点名称。

我被重定向到 Kibana 登录页面,但我无法登录。

我能够登录,但看不到 Kibana。

我登录到 Kibana 后,收到一条错误消息,如下所示:

User: arn:aws:sts:: 123456789012:assumed-role/Cognito_identitypoolAuth_Role/CognitoIdentityCredentials is not authorized to perform: es:ESHttpGet

默认情况下,经过身份验证的身份池 IAM 角色不包括访问 Kibana 所需的权限。您可以通过以下操作找到经过身份验证的角色的名称,并将其添加到 Amazon ES 访问策略:

  1. 登录 Amazon Cognito 控制台
  2. 选择管理身份池,然后选择您要编辑的用户池。
  3. 控制面板页面的右上角,选择编辑身份池
  4. 将经过身份验证的角色添加到 Amazon ES 域访问策略中。

注意:最佳实践是将基于资源的策略用于经过身份验证的用户。经过身份验证的角色仅控制 Kibana 的 Amazon Cognito 身份验证。因此,请勿从域访问策略中删除其他资源。

有关其他问题排查情景,请参阅常见配置问题