

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 教學課程：使用 IAM 主要使用者和 Amazon Cognito 身分驗證設定網域
<a name="fgac-iam"></a>

此本學課程涵蓋適用於[精細存取控制](fgac.md)的熱門 Amazon OpenSearch Service 使用案例：適用於 OpenSearch Dashboards 的 IAM 主要使用者與 Amazon Cognito 身分驗證。

在本教學課程中，我們將設定*主要* IAM 角色和*有限的* IAM 角色，然後我們將它們與 Amazon Cognito 中的使用者建立關聯。然後，主要使用者可以登入 OpenSearch Dashboards，將有限的使用者對應至角色，並使用精細存取控制來限制使用者的許可。

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


雖然這些步驟會使用 Amazon Cognito 使用者集區進行身分驗證，但相同的基本程序也適用於任何可讓您將不同 IAM 角色指派給不同使用者的 Cognito 身分驗證提供者。

在本教學課程中，您會完成下列步驟：

1. [建立主要和有限的 IAM 角色](#fgac-iam-roles)

1. [使用 Cognito 身分驗證建立網域](#fgac-iam-domain)

1. [設定 Cognito 使用者集區和身分集區](#fgac-iam-cognito)

1. [在 OpenSearch Dashboards 中對應角色](#fgac-iam-dashboards)

1. [測試許可](#fgac-iam-test)

## 步驟 1：建立主要和有限的 IAM 角色
<a name="fgac-iam-roles"></a>

導覽至 AWS Identity and Access Management (IAM) 主控台並建立兩個不同的角色：
+ `MasterUserRole`：具備叢集完整許可並管理角色與角色映射的主要使用者。
+ `LimitedUserRole`：更受限制的角色，您將向其授予作為主要使用者的有限存取權。

如需建立角色的指示，請參閱《*IAM 使用者指南*》中的[使用自訂信任政策建立角色](https://docs.aws.amazon.com/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"
      }
    }
  }]
}
```

------

**注意**  
使用 Amazon Cognito 身分集區的唯一識別符取代 `identity-pool-id`。例如 `us-east-1:0c6cdba7-3c3c-443b-a958-fb9feb207aa6`。

## 步驟 2：使用 Cognito 身分驗證建立網域
<a name="fgac-iam-domain"></a>

導覽至位於 https：//[https://console.aws.amazon.com/aos/home/](https://console.aws.amazon.com/aos/home/) 的 Amazon OpenSearch Service 主控台，並使用[下列設定建立網域](createupdatedomains.md)：
+ OpenSearch 1.0 或更高版本，或者 Elasticsearch 7.8 或更高版本
+ 公開存取
+ 以 `MasterUserRole` 作為主要使用者啟用的精細存取控制 (在上一個步驟中建立) 
+ 已為 OpenSearch Dashboards 啟用 Amazon Cognito 身分驗證。如需啟用 Cognito 身分驗證，以及選取使用者和身分集區的說明，請參閱[設定網域以使用 Amazon Cognito 身分驗證](cognito-auth.md#cognito-auth-config)。
+ 以下網域存取政策：

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

****  

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

------
+ 要求所有前往網域的流量皆使用 HTTPS
+ 節點對節點加密
+ 靜態資料加密

## 步驟 3：設定 Cognito 使用者
<a name="fgac-iam-cognito"></a>

建立網域時，請依照《Amazon Cognito *開發人員指南》中的 Amazon Cognito*[建立使用者集區，在 Amazon Cognito 內設定主要和受限使用者](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)。最後，請依照在 [Amazon Cognito 中建立身分集區中的步驟來設定身分集區](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html#create-identity-pool)。使用者集區和身分集區必須在相同的 AWS 區域。

## 步驟 4：在 OpenSearch Dashboards 中映射角色
<a name="fgac-iam-dashboards"></a>

現在已設定您的使用者，您可以主要使用者身分登入 OpenSearch Dashboards，並將使用者映射至角色。

1. 返回 OpenSearch Service 主控台，然後導覽至您所建立網域的 OpenSearch Dashboards 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** (文件層級安全)，指定以下查詢：

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

1. 如需欄位層級的安全性，請選擇 **Exclude** (排除)，然後指定 `FlightNum`。

1. 對於 **Anonymization** (匿名化)，請指定 `Dest`。

1. 選擇**建立**。

1. 選擇 **Mapped users** (已映射的使用者)、**Manage mapping** (管理映射)。新增 `LimitedUserRole` 的 Amazon Resource Name (ARN) 作為外部身分，然後選擇 **Map** (映射)。

1. 傳回角色清單，然後選擇 **opensearch\$1dashboards\$1user**。選擇 **Mapped users** (已映射的使用者)、**Manage mapping** (管理映射)。新增 `LimitedUserRole` 的 ARN 作為後端角色，並選擇 **Map** (映射)。

## 步驟 5：測試許可
<a name="fgac-iam-test"></a>

當您的角色映射正確時，您可以有限使用者身分登入並測試許可。

1. 在新的私有瀏覽器視窗中，導覽至網域的 OpenSearch Dashboards URL，使用 `limited-user` 憑證登入，然後選擇 **Explore on my own** (自行探索)。

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 (開發工具)**，然後執行相同的搜尋。注意許可、命中數、相符文件以及所包含欄位中的差異。