如何排查 OpenSearch 控制面板的 Amazon Cognito 身份验证问题?

2 分钟阅读
0

我正在尝试在 Amazon OpenSearch Service 集群上使用 Amazon Cognito 身份验证访问 OpenSearch 控制面板。但是,我收到错误消息或遇到登录问题。

解决方法

输入 OpenSearch 控制面板 URL 时,未显示登录页面

出于以下几个原因,您可能会从 OpenSearch 控制面板 URL 重新导向到控制面板:

  • 您使用了基于 IP 的域访问策略,该策略允许本地计算机的公有 IP 地址访问控制面板。因此,请务必在域访问策略中添加经过 Amazon Cognito 身份验证的角色。如果不添加经过身份验证的角色,则访问策略的行为将类似于普通策略。
  • 请求由允许的 AWS Identity Access Management(IAM)用户或角色签署。访问控制面板 URL 时,请避免使用任何控制面板代理方法来签署您的请求。
  • 您的 OpenSearch Service 域位于 Virtual Private Cloud (VPC) 中,并且您的域具有开放访问策略。在此情况下,所有 VPC 用户都可以在不进行 Amazon Cognito 身份验证的情况下访问控制面板和域。

**注意:**不需要进行 Amazon Cognito 身份验证。如需要求进行 Amazon Cognito 身份验证,请更改您的域访问策略。有关更多信息,请参阅配置访问策略

如果您被重定向到 OpenSearch 控制面板登录页面但无法登录,则说明 Amazon Cognito 的配置不正确。要解决此问题,请考虑以下方法:

“Missing Role(缺少角色)”错误

如果您在 OpenSearch Service 域中的 OpenSearch 控制面板上启用了精细访问控制(FGAC),则可能会收到以下错误消息:

"Missing Role
No roles available for this user, please contact your system administrator."

当您的 IAM 主用户或潜在用户与正在代入的 Amazon Cognito 角色之间不匹配时,就会出现上述错误消息。从 Amazon Cognito 身份池代入的角色必须与您为主用户或潜在用户指定的 IAM 角色相匹配。

要使主用户或潜在用户的 IAM 角色与代入的 Amazon Cognito 角色相匹配,请完成以下步骤:

1.打开 OpenSearch Service 控制台

2.在导航窗格的 Managed clusters(托管集群)下,选择 Domains(域)。

3.选择操作

4.选择 Edit security configuration(编辑安全配置)。

5.在精细访问控制下,选择 **Set IAM role (将 IAM 角色设置为)**主用户或潜在用户。确保指定 Amazon Cognito 身份验证角色的 ARN。

6.(可选)如果忘记了主用户或潜在用户的 ARN(或角色的其他配置详细信息),请修改主用户或潜在用户。重新配置主用户或潜在用户时,可以指定新的 IAM ARN。

7.选择 Submit (提交)

身份池配置无效错误

使用 Amazon Cognito 成功验证登录信息后,您可能仍会收到以下错误消息:

com.amazonaws.services.cognitoidentity.model.InvalidIdentityPoolConfigurationException:
Invalid identity pool configuration. Check assigned IAM roles for this pool.
(Service: AmazonCognitoIdentity; Status Code: 400; Error Code:
InvalidIdentityPoolConfigurationException; Request ID:
xxxxx-xxxx-xxxx-xxxx-xxxxx)

当 Amazon Cognito 没有适当权限代表经过身份验证的用户代入 IAM 角色时,就会出现上述错误消息。修改 IAM 角色的信任关系:

1.打开 Amazon IAM 控制台

2.选择角色

3.选择您的 IAM 角色。

4.选择信任关系选项卡。

5.选择 Edit trust relationship (编辑信任关系)。确保您的 Amazon Cognito 身份池可以担任 IAM 角色。

例如:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "identity-pool-id"
       },
       "ForAnyValue:StringLike": {
         "cognito-identity.amazonaws.com:amr": "authenticated"
       }
      }
    }
  ]
}

6.选择 Update Trust Policy(更新信任策略)。

有关在启用精细访问控制(FGAC)的情况下更新 IAM 角色策略的更多信息,请参阅教程:使用 IAM 主用户和 Amazon Cognito 身份验证配置域

重定向不匹配错误

当您尝试使用控制面板 URL 或自定义端点 URL 访问 OpenSearch Service 中的 OpenSearch 控制面板时,可能会收到以下错误消息:

"An error was encountered with the requested page"

当您缺少 Amazon Cognito 的应用程序客户端设置中的回调 URL 配置时,就会出现上述错误消息。

要检查您的应用程序客户端设置是否配置正确,请执行以下步骤:

1.打开 Amazon Cognito console(Amazon Cognito 控制台)。

2.选择 Manage User Pools (管理用户池)

3.选择要编辑的用户池。

4.在控制台左侧的 App integration(应用程序集成)下,从 App client(应用程序客户端)中选择 OpenSearch App Client(应用程序客户端)。

5.确认回调 URL注销 URL 是否配置正确。例如:

<dashboards-endpoint>/_dashboards/app/home

对于启用自定义端点的域,callback URL(回调 URL)和 sign out URL(注销 URL)与以下内容类似:

<domain-custom-endpoint>/_dashboards/app/home

Amazon Cognito 身份池授权角色错误

如果 OpenSearch 控制面板既无法登录也无法显示,则可能会收到以下错误消息:

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

默认情况下,经过身份验证的身份池 IAM 角色不包括访问控制面板所需的权限。完成以下步骤以查找经过身份验证的角色名称,并将其添加到 OpenSearch Service 访问策略:

1.打开 Amazon Cognito console(Amazon Cognito 控制台)。

2.选择 Manage Identity Pools (管理身份池)

3.在控制台的右上角,选择 Edit identity pool (编辑身份池)

4.将经过身份验证的角色添加到 OpenSearch Service 域访问策略中。

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


相关信息

常见配置问题

AWS 官方
AWS 官方已更新 1 年前