

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为控制面板配置 Amazon Cognito 身份验证 OpenSearch
<a name="cognito-auth"></a>

您可以使用 Amazon [Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) 对您在亚马逊 OpenSearch 服务中默认安装的 OpenSearch控制面板进行身份验证和保护。Amazon Cognito 身份验证是可选的，仅适用于使用 OpenSearch 或 Elasticsearch 5.1 或更高版本的域名。如果不配置 Amazon Cognito 身份验证，您仍可使用 [基于 IP 的访问策略](ac.md#ac-types-ip)和[代理服务器](dashboards.md#dashboards-proxy)、HTTP 基本身份验证或 [SAML](saml.md)。

大部分身份验证过程都在 Amazon Cognito 中进行，但本节提供了有关配置 Amazon Cognito 资源以使用 OpenSearch 服务域的指南和要求。[标准定价](https://aws.amazon.com/cognito/pricing/)适用于所有 Amazon Cognito 资源。

**提示**  
首次将域配置为使用 OpenSearch 控制面板的 Amazon Cognito 身份验证时，我们建议您使用控制台。Amazon Cognito 资源的可定制程度极高，并且控制台可以帮助您确定和理解对您重要的功能。

**Topics**
+ [先决条件](#cognito-auth-prereq)
+ [将域配置为使用 Amazon Cognito 身份验证](#cognito-auth-config)
+ [允许经过身份验证的角色](#cognito-auth-config-ac)
+ [配置身份提供商](#cognito-auth-identity-providers)
+ [（可选）配置精细访问](#cognito-auth-granular)
+ [（可选）自定义登录页面](#cognito-auth-customize)
+ [（可选）配置高级安全](#cognito-auth-advanced)
+ [测试](#cognito-auth-testing)
+ [配额](#cognito-auth-limits)
+ [常见配置问题](#cognito-auth-troubleshooting)
+ [禁用控制面板的 Amazon Cognito 身份验证 OpenSearch](#cognito-auth-disable)
+ [删除在控制面板中使用 Amazon Cognito 身份验证的域名 OpenSearch](#cognito-auth-delete)

## 先决条件
<a name="cognito-auth-prereq"></a>

在为 OpenSearch 控制面板配置 Amazon Cognito 身份验证之前，您必须满足几个先决条件。 OpenSearch 服务控制台有助于简化这些资源的创建，但了解每种资源的用途有助于配置和故障排除。用于仪表板的 Amazon Cognito 身份验证需要以下资源：
+ Amazon Cognito [用户池](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html)
+ Amazon Cognito [身份池](https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html)
+ IAM 角色已附加了 `AmazonOpenSearchServiceCognitoAccess` 策略 (`CognitoAccessForAmazonOpenSearch`)

**注意**  
用户池和身份池必须在同一个 AWS 区域中。您可以使用相同的用户池、身份池和 IAM 角色将控制面板的 Amazon Cognito 身份验证添加到多个 OpenSearch 服务域。要了解更多信息，请参阅[配额](#cognito-auth-limits)。

### 关于用户池
<a name="cognito-auth-prereq-up"></a>

用户池有两个主要功能：创建和管理用户目录、让用户注册和登录。有关创建用户池的说明，请参阅《Amazon Cognito 开发人员指南》**中的[用户池入门](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-user-pools.html)。

在创建要与 S OpenSearch ervice 配合使用的用户池时，请考虑以下几点：
+ 您的 Amazon Cognito 用户池必须有一个[域名](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-domain.html)。 OpenSearch 服务使用此域名将用户重定向到登录页面以访问仪表板。除了域名外，用户池不需要任何非默认配置。
+ 您必须指定池的必需[标准属性](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#cognito-user-pools-standard-attributes)——名称、出生日期、电子邮件地址和电话号码等属性。创建用户池之后您将不能更改这些属性，因此此时请选择对您重要的属性。
+ 在创建用户池时，请选择用户能否创建自己的账户、账户的最小密码强度以及是否启用多因素身份验证。如果您计划使用[外部身份提供商](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html)，这些设置无关紧要。从技术上说，您可以启用用户池作为身份提供商，*同时*启用外部身份提供商，但大多数人更愿意选其中一项。

用户池的 IDs 形式为`region_ID`。如果您计划使用 AWS CLI 或 S AWS DK 来配置 OpenSearch 服务，请记下该 ID。

### 关于身份池
<a name="cognito-auth-prereq-ip"></a>

借助身份池，您可以在用户登录后向用户分配临时性的受限权限角色。有关创建身份池的说明，请参阅《Amazon Cognito 开发人员指南》**中的[身份池控制台概述](https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html)。创建用于 OpenSearch 服务的身份池时，请考虑以下几点：
+ 如果您使用 Amazon Cognito 控制台，则必须选中 **Enable access to unauthenticated identities** (启用未经验证的身份的访问权限) 复选框来创建身份池。在您创建身份池并配置 OpenSearch 服务域之后，Amazon Cognito 会禁用此设置。
+ 您无需向身份池添加[外部身份提供商](https://docs.aws.amazon.com/cognito/latest/developerguide/external-identity-providers.html)。当您将 OpenSearch 服务配置为使用 Amazon Cognito 身份验证时，它会将身份池配置为使用您刚刚创建的用户池。
+ 创建身份池后，您必须选择未经身份验证和经过身份验证的 IAM 角色。这些角色会指定用户在登录之前和之后拥有的访问策略。如果您使用 Amazon Cognito 控制台，它可以为您创建这些角色。在创建经过身份验证的角色后，请记下 ARN，采用以下格式：`arn:aws:iam::123456789012:role/Cognito_identitypoolnameAuth_Role`。

身份池的 IDs 形式为`region:ID-ID-ID-ID-ID`。如果您计划使用 AWS CLI 或 S AWS DK 来配置 OpenSearch 服务，请记下该 ID。

### 关于这个 CognitoAccessForAmazonOpenSearch 角色
<a name="cognito-auth-role"></a>

OpenSearch 服务需要权限才能配置 Amazon Cognito 用户和身份池并使用它们进行身份验证。为此`AmazonOpenSearchServiceCognitoAccess`，您可以使用（一种 AWS 托管策略）。 `AmazonESCognitoAccess`是一项旧政策，在服务重命名为 Amazon OpenSearch 服务`AmazonOpenSearchServiceCognitoAccess`时已被取代。两个策略均提供最低 Amazon Cognito 权限，以便启用 Amazon Cognito 身份验证。有关策略的详细信息，请参阅[AmazonOpenSearchServiceCognitoAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonOpenSearchServiceCognitoAccess.html)《*AWS 托管策略参考指南》*。

如果您使用控制台创建或配置您的 OpenSearch 服务域，它会为您创建一个 IAM 角色并将`AmazonOpenSearchServiceCognitoAccess`策略（如果是 Elasticsearch 域，则为该`AmazonESCognitoAccess`策略）附加到该角色。此角色的默认名称为 `CognitoAccessForAmazonOpenSearch`。

角色权限策略`AmazonOpenSearchServiceCognitoAccess`以及`AmazonESCognitoAccess`两者都允许 S OpenSearch ervice 在所有身份和用户池上完成以下操作：
+ 操作：`cognito-idp:DescribeUserPool`
+ 操作：`cognito-idp:CreateUserPoolClient`
+ 操作：`cognito-idp:DeleteUserPoolClient`
+ 操作：`cognito-idp:UpdateUserPoolClient`
+ 操作：`cognito-idp:DescribeUserPoolClient`
+ 操作：`cognito-idp:AdminInitiateAuth`
+ 操作：`cognito-idp:AdminUserGlobalSignOut`
+ 操作：`cognito-idp:ListUserPoolClients`
+ 操作：`cognito-identity:DescribeIdentityPool`
+ 操作：`cognito-identity:SetIdentityPoolRoles`
+ 操作：`cognito-identity:GetIdentityPoolRoles`

如果您使用 AWS CLI 或其中一个 AWS SDKs，则必须在配置 OpenSearch 服务域时创建自己的角色、附加策略并为此角色指定 ARN。角色必须拥有以下信任关系：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "opensearchservice.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

有关说明，请参阅 I [AM 用户指南中的创建角色以向 AWS 服务委派权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)[*和添加和删除 IAM* 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

## 将域配置为使用 Amazon Cognito 身份验证
<a name="cognito-auth-config"></a>

完成先决条件后，您可以将 OpenSearch 服务域配置为使用 Amazon Cognito 控制面板。

**注意**  
亚马逊 Cognito 并非全部可用。 AWS 区域有关受支持的区域列表，请参阅 Amazon Cognito 的[服务端点](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html#cognito_identity_region)。在 Amazon Cognito 中，您无需使用与服务相同的区域。 OpenSearch 

### 配置 Amazon Cognito 身份验证（控制台）
<a name="cognito-auth-config-console"></a>

由于控制台会为您创建 `CognitoAccessForAmazonOpenSearch` 角色，因此控制台可提供最简单的配置体验。除了标准的 OpenSearch 服务权限外，您还需要以下一组权限才能使用控制台创建使用 Amazon Cognito 身份验证控制面板的 OpenSearch 域。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeVpcs",
        "cognito-identity:ListIdentityPools",
        "cognito-idp:ListUserPools",
        "iam:CreateRole",
        "iam:AttachRolePolicy"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:GetRole",
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::123456789012:role/service-role/CognitoAccessForAmazonOpenSearch"
    }
  ]
}
```

------

有关向身份（用户、用户组或角色）添加权限的说明，请参阅[添加 IAM 身份权限（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)。

如果 `CognitoAccessForAmazonOpenSearch` 已存在，则您需要较少的权限：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeVpcs",
        "cognito-identity:ListIdentityPools",
        "cognito-idp:ListUserPools"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:GetRole",
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::123456789012:role/service-role/CognitoAccessForAmazonOpenSearch"
    }
  ]
}
```

------

**要为控制面板配置 Amazon Cognito 身份验证（控制台）**

1. 在家中打开亚马逊 OpenSearch 服务控制台 [https://console.aws.amazon.com/aos//](https://console.aws.amazon.com/aos/home/)。

1. 在 **Domains（域）**下，选择要配置的域。

1. 选择 **Actions（操作）**、**Edit security configuration（编辑安全配置）**。

1. 选择**启用 Amazon Cognito 身份验证**。

1. 对于**区域**，选择 AWS 区域 包含您的 Amazon Cognito 用户池和身份池的。

1. 对于 **Cognito user pool（Cognito 用户池）**，选择一个用户池或创建一个。有关更多信息，请参阅 [关于用户池](#cognito-auth-prereq-up)。

1. 对于 **Cognito identity pool（Cognito 身份池）**，选择一个身份池或创建一个。有关更多信息，请参阅 [关于身份池](#cognito-auth-prereq-ip)。
**注意**  
**Create user pool（创建用户池）**和 **Create identity pool（创建身份池）**链接会将您定向到 Amazon Cognito 控制台，并需要您手动创建这些资源。此过程不是自动的。有关更多信息，请参阅 [先决条件](#cognito-auth-prereq)。

1. 于 **IAM role name（IAM 角色名称）**，请使用默认值 `CognitoAccessForAmazonOpenSearch`（推荐）或输入新名称。有关更多信息，请参阅 [关于这个 CognitoAccessForAmazonOpenSearch 角色](#cognito-auth-role)。

1. 选择**保存更改**。

在您的域完成处理后，请参阅[允许经过身份验证的角色](#cognito-auth-config-ac)和[配置身份提供商](#cognito-auth-identity-providers)，了解更多配置步骤。

### 配置 Amazon Cognito 身份验证 (AWS CLI)
<a name="cognito-auth-config-cli"></a>

使用`--cognito-options`参数配置您的 OpenSearch 服务域。`create-domain` 和 `update-domain-config` 命令均使用以下语法：

```
--cognito-options Enabled=true,UserPoolId="user-pool-id",IdentityPoolId="identity-pool-id",RoleArn="arn:aws:iam::123456789012:role/CognitoAccessForAmazonOpenSearch"
```

**示例**

以下示例使用 `CognitoAccessForAmazonOpenSearch` 角色在启用用于 Amazon Cognito 的身份验证的 `us-east-1` 区域中创建一个域并向该域提供对 `Cognito_Auth_Role` 的访问权限：

```
aws opensearch create-domain --domain-name my-domain --region us-east-1 --access-policies '{ "Version": "2012-10-17",		 	 	  "Statement":[{"Effect":"Allow","Principal":{"AWS": ["arn:aws:iam::123456789012:role/Cognito_Auth_Role"]},"Action":"es:ESHttp*","Resource":"arn:aws:es:us-east-1:123456789012:domain/*" }]}' --engine-version "OpenSearch_1.0" --cluster-config InstanceType=m4.xlarge.search,InstanceCount=1 --ebs-options EBSEnabled=true,VolumeSize=10 --cognito-options Enabled=true,UserPoolId="us-east-1_123456789",IdentityPoolId="us-east-1:12345678-1234-1234-1234-123456789012",RoleArn="arn:aws:iam::123456789012:role/CognitoAccessForAmazonOpenSearch"
```

在您的域完成处理后，请参阅[允许经过身份验证的角色](#cognito-auth-config-ac)和[配置身份提供商](#cognito-auth-identity-providers)，了解更多配置步骤。

### 配置 Amazon Cognito 身份验证 ()AWS SDKs
<a name="cognito-auth-config-sdk"></a>

 AWS SDKs （Android 和 iOS 除外 SDKs）支持《[亚马逊 OpenSearch 服务 API 参考](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/Welcome.html)》中定义的所有`UpdateDomainConfig`操作，包括`CreateDomain`和操作的`CognitoOptions`参数。有关安装和使用的更多信息 AWS SDKs，请参阅[AWS 软件开发套件](https://aws.amazon.com/code)。

在您的域完成处理后，请参阅[允许经过身份验证的角色](#cognito-auth-config-ac)和[配置身份提供商](#cognito-auth-identity-providers)，了解更多配置步骤。

## 允许经过身份验证的角色
<a name="cognito-auth-config-ac"></a>

默认情况下，您按照中的指南配置的经过身份验证的 IAM 角色[关于身份池](#cognito-auth-prereq-ip)没有访问 OpenSearch 控制面板所需的权限。您必须为该角色提供额外权限。

**注意**  
如果您配置了[精细访问控制](fgac.md)，并使用开放的或基于 IP 的访问策略，则可以跳过此步骤。

您可以将这些权限包含在[基于身份](ac.md#ac-types-identity)的策略中，但是除非您希望经过身份验证的用户有权访问所有 OpenSearch 服务域，否则将[基于资源的](ac.md#ac-types-resource)策略附加到单个域是更好的方法。

对于 `Principal`，请为您按照 [关于身份池](#cognito-auth-prereq-ip) 中的指导原则配置的、经过 Cognito 身份验证的角色指定 ARN。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "AWS":[
               "arn:aws:iam::111122223333:role/Cognito_identitypoolname/Auth_Role"
            ]
         },
         "Action":[
            "es:ESHttp*"
         ],
         "Resource":"arn:aws:es:us-east-1:111122223333:domain/domain-name/*"
      }
   ]
}
```

------

 有关向 OpenSearch 服务域添加基于资源的策略的说明，请参阅[配置访问策略](createupdatedomains.md#createdomain-configure-access-policies)。

## 配置身份提供商
<a name="cognito-auth-identity-providers"></a>

当您将域配置为使用控制面板的 Amazon Cognito 身份验证时， OpenSearch 服务会向用户池中添加[应用程序客户端](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html)，并将用户池作为身份验证提供者添加到身份池中。

**警告**  
请勿重命名或删除应用程序客户端。

根据用户池的配置情况，您可能需要手动创建用户账户，或者用户可能能够自行创建。如果这些设置可接受，您无需再采取进一步操作。但是，很多人都倾向于使用外部身份提供商。

要启用 SAML 2.0 身份提供商，您必须提供 SAML 元数据文档。要启用 Login with Amazon、Facebook 和 Google 等社交身份提供商，您必须拥有一个应用程序 ID 和来自提供商的应用程序密钥。您可以启用身份提供商的任意组合。

配置用户池的最简单方法是使用 Amazon Cognito 控制台。有关说明，请参阅《Amazon Cognito 开发人员指南》**中的[使用第三方身份提供商登录用户池](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html)和[使用应用程序客户端进行应用程序特定设置](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-idp-settings.html)。

## （可选）配置精细访问
<a name="cognito-auth-granular"></a>

您可能已经注意到，默认身份池设置为每位登录同一 IAM 角色的用户分配了同一 IAM 角色 (`Cognito_identitypoolAuth_Role`)，这意味着每个用户都可以访问相同的 AWS 资源。如果要将[精细访问控制](fgac.md)与 Amazon Cognito 结合使用，例如，如果您希望组织的分析人员具有对多个索引的只读访问权限，同时希望开发人员具有对所有索引的写入访问权限您有两种选择：
+ 创建用户组并配置您的身份提供商，以根据用户的身份验证令牌选择 IAM 角色（推荐）。
+ 配置身份提供商，以根据一个或多个规则选择 IAM 角色。

有关包含精细访问控制的演练，请参阅[教程：使用 IAM 主用户和 Amazon Cognito 身份验证配置域](fgac-iam.md)。

**重要**  
与默认角色一样，Amazon Cognito 必须是每个附加角色的信任关系的一部分。有关详细信息，请参阅《Amazon Cognito 开发人员指南》**中的[为角色映射创建角色](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html#creating-roles-for-role-mapping)。

### 用户组和令牌
<a name="cognito-auth-granular-tokens"></a>

当您创建用户组时，您会为该组的成员选择 IAM 角色。有关创建组的信息，请参阅《Amazon Cognito 开发人员指南》**中的[向用户池添加组](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-user-groups.html)。

创建一个或多个用户组后，您可以对您的身份验证提供商进行配置，以便为用户分配其组的角色，而不是身份池的默认角色。选择**从令牌选择角色**，然后**选择使用默认身份验证角色**或**拒绝**以指定身份池如何处理不属于组的用户。

### Rules
<a name="cognito-auth-granular-rules"></a>

规则实质上是由 Amazon Cognito 按顺序评估的一系列 `if` 语句。例如，如果一个用户的电子邮件地址包含 `@corporate`，Amazon Cognito 则为该用户分配 `Role_A`。如果一个用户的电子邮件地址包含 `@subsidiary`，则为该用户分配 `Role_B`。否则，它会为该用户分配默认的经过身份验证的角色。

要了解更多信息，请参阅《Amazon Cognito 开发人员指南》**中的[使用基于规则的映射为用户分配角色](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html#using-rules-to-assign-roles-to-users)。

## （可选）自定义登录页面
<a name="cognito-auth-customize"></a>

您可以使用 Amazon Cognito 控制台上传自定义徽标并对登录页进行 CSS 更改。有关说明和 CSS 属性的完整列表，请参阅《Amazon Cognito 开发人员指南》**中的[自定义托管用户界面（经典版）品牌](https://docs.aws.amazon.com/cognito/latest/developerguide/hosted-ui-classic-branding.html)。

## （可选）配置高级安全
<a name="cognito-auth-advanced"></a>

Amazon Cognito 用户池支持高级安全功能，如多重验证、盗用凭证检查和自适应身份验证。要了解更多信息，请参阅《Amazon Cognito 开发人员指南》**中的[使用 Amazon Cognito 用户池安全功能](https://docs.aws.amazon.com/cognito/latest/developerguide/managing-security.html)。

## 测试
<a name="cognito-auth-testing"></a>

对配置感到满意后，请验证用户体验是否符合的预期。

**访问 OpenSearch 控制面板**

1. 在 Web 浏览器中导航到 `https://opensearch-domain/_dashboards`。若要直接登录到特定租户，请将 `?security_tenant=tenant-name` 附加到 URL。

1. 使用首选凭证进行登录。

1.  OpenSearch 仪表板加载后，至少配置一种索引模式。控制面板使用这些模式来标识要分析的索引。输入 `*`，选择 **Next step** (下一步)，然后选择 **Create index pattern** (创建索引模式)。

1. 要搜索或查看您的数据，请选择 **Discover** (发现)。

如果此过程的任何步骤失败，请参阅[常见配置问题](#cognito-auth-troubleshooting)了解故障排除信息。

## 配额
<a name="cognito-auth-limits"></a>

Amazon Cognito 对于它的许多资源都有软限制。如果您想为大量 OpenSearch 服务域启用控制面板身份验证，请查看 [Amazon Cognito 中的配额](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html)，并[根据需要请求提高限制](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)。

每个 OpenSearch 服务域都会向用户池中添加一个[应用程序客户端](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html)，从而向[身份池中添加一个身份验证提供商](https://docs.aws.amazon.com/cognito/latest/developerguide/external-identity-providers.html)。如果您为超过 10 个域启用 OpenSearch 控制面板身份验证，则可能会遇到 “每个身份池的最大 Amazon Cognito 用户池提供者数量” 限制。**如果您超过限制，则您尝试配置为使用控制面板的 Amazon Cognito 身份验证的任何 OpenSearch 服务域都可能陷入正在处理的配置状态。**

## 常见配置问题
<a name="cognito-auth-troubleshooting"></a>

下表列出了常见的配置问题和解决方案。


**配置 OpenSearch 服务**  

| 问题 | 解决方案 | 
| --- | --- | 
|  `OpenSearch Service can't create the role` (console)  | 您没有正确的 IAM 权限。请添加[配置 Amazon Cognito 身份验证（控制台）](#cognito-auth-config-console)中指定的权限。 | 
|  `User is not authorized to perform: iam:PassRole on resource CognitoAccessForAmazonOpenSearch` (console)  | 您没有该[CognitoAccessForAmazonOpenSearch](#cognito-auth-role)角色的iam:PassRole权限。将以下策略附加到您的账户中：  JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::123456789012:role/service-role/CognitoAccessForAmazonOpenSearch"
    }
  ]
}
```    您也可以附加 `IAMFullAccess` 策略。 | 
|  `User is not authorized to perform: cognito-identity:ListIdentityPools on resource`  |  您没有 Amazon Cognito 的读取权限。将 `AmazonCognitoReadOnly` 策略附加到您的账户。  | 
|  `An error occurred (ValidationException) when calling the CreateDomain operation: OpenSearch Service must be allowed to use the passed role`  |  OpenSearch `CognitoAccessForAmazonOpenSearch`角色的信任关系中未指定服务。检查您的角色是否使用了[关于这个 CognitoAccessForAmazonOpenSearch 角色](#cognito-auth-role)指定的信任关系。也可以使用控制台来配置 Amazon Cognito 身份验证。控制台将为您创建一个角色。  | 
|  `An error occurred (ValidationException) when calling the CreateDomain operation: User is not authorized to perform: cognito-idp:action on resource: user pool`  | --cognito-options 中指定的角色无权访问 Amazon Cognito。检查该角色是否已附加 AWS 托管AmazonOpenSearchServiceCognitoAccess策略。也可以使用控制台来配置 Amazon Cognito 身份验证。控制台将为您创建一个角色。 | 
| An error occurred (ValidationException) when calling the CreateDomain operation: User pool does not exist |  OpenSearch 服务找不到用户池。确认您已创建一个用户池并具有正确的 ID。要查找 ID，你可以使用 Amazon Cognito 控制台或以下命令： AWS CLI  <pre>aws cognito-idp list-user-pools --max-results 60 --region region</pre>  | 
|  `An error occurred (ValidationException) when calling the CreateDomain operation: IdentityPool not found`  |  OpenSearch 服务找不到身份池。确认您已创建一个用户池并具有正确的 ID。要查找 ID，你可以使用 Amazon Cognito 控制台或以下命令： AWS CLI  <pre>aws cognito-identity list-identity-pools --max-results 60 --region region</pre>  | 
|  `An error occurred (ValidationException) when calling the CreateDomain operation: Domain needs to be specified for user pool`  | 用户池没有域名。您可以使用 Amazon Cognito 控制台或以下 AWS CLI 命令配置一个：<pre>aws cognito-idp create-user-pool-domain --domain name --user-pool-id id</pre> | 


**访问 OpenSearch 仪表板**  

| 问题 | 解决方案 | 
| --- | --- | 
| 登录页不显示我的首选身份提供商。 |  检查您是否按照中的指定为 OpenSearch 服务应用程序客户端启用了身份提供商[配置身份提供商](#cognito-auth-identity-providers)。  | 
|  登录页看上去与我的组织无关。  |  请参阅[（可选）自定义登录页面](#cognito-auth-customize)。  | 
| 我的登录凭证不起作用。 |  检查您是否按照[配置身份提供商](#cognito-auth-identity-providers)中指定的方式配置了身份提供商。 如果您使用用户池作为身份提供商，请检查 Amazon Cognito 控制台上是否存在账户。  | 
|  OpenSearch 仪表板要么根本无法加载，要么无法正常工作。  |  Amazon Cognito 身份验证角色需要阈 (`/*`) 的 `es:ESHttp*` 权限才能访问和使用控制面板。检查您是否按照[允许经过身份验证的角色](#cognito-auth-config-ac)中指定的方式添加了访问策略。  | 
|  当我从一个选项卡注销 OpenSearch 仪表板时，其余选项卡会显示一条消息，指出刷新令牌已被撤销。  |  当您在使用 Amazon Cognito 身份验证时退出 OpenSearch 控制面板会话时， OpenSearch 服务会运行一项[AdminUserGlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUserGlobalSignOut.html)操作，使您退出*所有*活动的 OpenSearch 控制面板会话。  | 
| Invalid identity pool configuration. Check assigned IAM roles for this pool. | Amazon Cognito 不具有代表经过身份验证的用户代入 IAM 角色的权限。修改角色的信任关系以包括：  JSON   

****  

```
{
  "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"
      }
    }
  }
 ]
}
```     | 
| Token is not from a supported provider of this identity pool. | 在从用户池删除应用程序客户端时，会出现这个不常见的错误。尝试在新的浏览器会话中打开控制面板。 | 

## 禁用控制面板的 Amazon Cognito 身份验证 OpenSearch
<a name="cognito-auth-disable"></a>

使用以下过程可对控制面板禁用 Amazon Cognito 身份验证。

**要为控制面板（控制台）禁用 Amazon Cognito 身份验证**

1. 打开[亚马逊 OpenSearch 服务控制台](https://console.aws.amazon.com/aos/home/)。

1. 在 **Domains**（域）下，选择要配置的域。

1. 选择 **Actions（操作）**、**Edit security configuration（编辑安全配置）**。

1. 取消选择**启用 Amazon Cognito 身份验证**。

1. 选择**保存更改**。

**重要**  
如果您不再需要 Amazon Cognito 用户池和身份池，请将其删除。否则，您将继续产生费用。

## 删除在控制面板中使用 Amazon Cognito 身份验证的域名 OpenSearch
<a name="cognito-auth-delete"></a>

为防止使用控制面板的 Amazon Cognito 身份验证的域名停留在 “**处理**中” 的配置状态，请在删除其关联的 Amazon Cognito 用户和身份池*之前*删除 OpenSearch 服务域。