

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

# 教程：使用 IAM 主用户和 Amazon Cognito 身份验证配置域
<a name="fgac-iam"></a>

本教程介绍了一个用于[精细访问控制的常见亚马逊 OpenSearch 服务用例：对控制](fgac.md)面板采用 Amazon Cognito 身份验证的 IAM 主用户。 OpenSearch 

在本教程中，我们将配置一个*主* IAM 角色和一个*受限* IAM 角色，然后将其与 Amazon Cognito 中的用户关联。然后，主用户可以登录控制 OpenSearch 面板，将受限用户映射到角色，并使用精细的访问控制来限制用户的权限。

![\[IAM roles and Amazon Cognito integration with OpenSearch Dashboards access control.\]](http://docs.amazonaws.cn/opensearch-service/latest/developerguide/images/fgac-cognito.png)


尽管这些步骤使用 Amazon Cognito 用户池进行身份验证，但相同的基本流程适用于任何 Cognito 身份验证提供商，从而允许您将不同的 IAM 角色分配给不同的用户。

在本教程中，您将完成以下步骤：

1. [创建主 IAM 角色和受限 IAM 角色](#fgac-iam-roles)

1. [使用 Cognito 身份验证创建域](#fgac-iam-domain)

1. [配置 Cognito 用户池和身份池](#fgac-iam-cognito)

1. [在 OpenSearch 仪表板中映射角色](#fgac-iam-dashboards)

1. [测试权限](#fgac-iam-test)

## 步骤 1：创建主 IAM 角色和受限 IAM 角色
<a name="fgac-iam-roles"></a>

导航到 Amazon Identity and Access Management (IAM) 控制台并创建两个单独的角色：
+ `MasterUserRole`：主用户，它将拥有针对集群的完全权限，并可管理角色和角色映射。
+ `LimitedUserRole`：更受限制的角色，您将以主用户身份为其授予有限访问权限。

有关创建角色的说明，请参阅《IAM 用户指南》**中的[使用自定义信任策略创建角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

这两个角色都必须具有以下信任策略，允许您的 Cognito 身份池代入这些角色：

------
#### [ 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"
      }
    }
  }]
}
```

------

**注意**  
将 `identity-pool-id` 替换为您的 Amazon Cognito 身份池的唯一标识符。例如 `us-east-1:0c6cdba7-3c3c-443b-a958-fb9feb207aa6`。

## 步骤 2：使用 Cognito 身份验证创建域
<a name="fgac-iam-domain"></a>

在[https://console.aws.amazon.com/aos/家中/ OpenSearch ](https://console.amazonaws.cn/aos/home/) 进入亚马逊服务控制台，然后使用以下设置[创建一个域名](createupdatedomains.md)：
+ OpenSearch 1.0 或更高版本，或 Elasticsearch 7.8 或更高版本
+ 公有访问权限
+ 以主用户（在上一步中创建）身份借助 `MasterUserRole` 启用的精细访问控制 
+ 控制面板启用了 Amazon Cognito 身份验证。 OpenSearch 有关启用 Cognito 身份验证以及选择用户和身份池的说明，请参阅 [将域配置为使用 Amazon Cognito 身份验证](cognito-auth.md#cognito-auth-config)。
+ 以下域访问策略：

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

****  

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

------
+ 所有到达域的流量所需的 HTTPS
+ Node-to-node 加密
+ 静态数据加密

## 步骤 3：配置 Cognito 用户
<a name="fgac-iam-cognito"></a>

创建域时，请按照 *Amazon Cognito开发人员指南*中的[创建用户池](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)配置 Amazon Cognito 的主用户和受限用户。最后，按照[在 Amazon Cognito 中创建身份池](https://docs.amazonaws.cn/cognito/latest/developerguide/getting-started-with-identity-pools.html#create-identity-pool)中的步骤配置您的身份池。用户池和身份池必须在同一个 Amazon Web Services 区域中。

## 步骤 4：在 OpenSearch 仪表板中映射角色
<a name="fgac-iam-dashboards"></a>

现在，您的用户已配置完毕，您可以以主用户身份登录 OpenSearch 仪表板并将用户映射到角色。

1. 返回 OpenSearch 服务控制台并导航到您创建的域名的控制 OpenSearch 面板 URL。URL 遵循此格式：`domain-endpoint/_dashboards/`。

1. 使用 `master-user` 凭证登录。

1. 选择 **Add sample data**（添加示例数据），然后添加示例飞行数据。

1. 在左侧导航窗格中，选择 **Security**（安全性）、**Roles**（角色）、**Create role**（创建角色）。

1. 将角色命名为 `new-role`。

1. 对于 **Index**（索引），指定 `opensearch_dashboards_sample_data_fli*`（Elasticsearch 域上的 `kibana_sample_data_fli*`）。

1. 对于 **Index permissions**（索引权限），选择 **read**（读取）。

1. 对于 **Document Level Security Query (文档级安全查询)**，请指定以下查询：

   ```
   {
     "match": {
       "FlightDelay": true
     }
   }
   ```

1. 对于字段级安全性，请选择 **Exclude（不包括）**并指定 `FlightNum`。

1. 对于**匿名**，指定 `Dest`。

1. 选择**创建**。

1. 选择**映射的用户**、**管理映射**。为 `LimitedUserRole` 添加 Amazon 资源名称（ARN）作为外部标识，然后选择 **Map**（映射）。

1. 返回角色列表，然后选择 **opensearch\$1dashboards\$1user**。选择**映射的用户**、**管理映射**。为 `LimitedUserRole` 添加 ARN 作为后端角色，然后选择**映射**。

## 步骤 5：测试权限
<a name="fgac-iam-test"></a>

角色正确映射后，您可以以受限用户身份登录并测试权限。

1. 在新的私有浏览器窗口中，导航到该域的 OpenSearch 仪表板网址，使用`limited-user`凭据登录，然后选择**自己浏览**。

1. 转到 **Dev Tools (开发人员工具)**，然后运行原定设置搜索：

   ```
   GET _search
   {
     "query": {
       "match_all": {}
     }
   }
   ```

   请注意权限错误。`limited-user` 没有运行集群范围内搜索的权限。

1. 运行另一个搜索：

   ```
   GET opensearch_dashboards_sample_data_flights/_search
   {
     "query": {
       "match_all": {}
     }
   }
   ```

   请注意，在所有匹配的文档中，有一个为 `true` 的 `FlightDelay` 字段，一个匿名化的 `Dest` 字段，但没有 `FlightNum` 字段。

1. 在原始浏览器窗口中，以 `master-user` 身份登录，选择 **Dev Tools (开发人员工具)**，然后执行相同的搜索。请注意权限、命中数、匹配文档和包含字段的差异。