

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

# 在 OpenSearch Service 中建立 Amazon S3 資料來源整合
<a name="direct-query-s3-creating"></a>

您可以透過 AWS 管理主控台 或 API 為 OpenSearch Service 建立新的 Amazon S3 直接查詢資料來源。每個新資料來源都會使用 AWS Glue Data Catalog 來管理代表 Amazon S3 儲存貯體的資料表。

**Topics**
+ [先決條件](#direct-query-s3-prereq)
+ [程序](#direct-query-s3-create)
+ [後續步驟](#direct-query-s3-next-steps)
+ [映射 AWS Glue Data Catalog 角色](#direct-query-s3-permissions)
+ [其他資源](#direct-query-s3-additional-resources)

## 先決條件
<a name="direct-query-s3-prereq"></a>

開始之前，請確定您已檢閱下列文件：
+ [限制](direct-query-s3-overview.md#direct-query-s3-limitations)
+ [建議](direct-query-s3-overview.md#direct-query-s3-recommendations)
+ [配額](direct-query-s3-overview.md#direct-query-s3-quotas)

您必須先在 中擁有下列資源，才能建立資料來源 AWS 帳戶：
+ **2.13 版或更新版本的 OpenSearch 網域。**這是設定直接查詢整合的基礎。如需設定的指示，請參閱 [建立 OpenSearch Service 網域](createupdatedomains.md#createdomains)。
+ **一或多個 S3 儲存貯體。**您需要指定包含要查詢之資料的儲存貯體，以及存放查詢檢查點的儲存貯體。如需建立 S3 儲存貯體的指示，請參閱《Amazon S3 使用者指南》中的[建立儲存貯](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)體。
+ **（選用） 一或多個 AWS Glue 資料表。 **在 Amazon S3 上查詢資料時，您必須在 中設定資料表 AWS Glue Data Catalog 以指向 S3 資料。您必須使用 OpenSearch Query Workbench 建立資料表。現有的 Hive 資料表不相容。

  如果這是您第一次設定 Amazon S3 資料來源，您必須建立管理員資料來源來設定所有 AWS Glue Data Catalog 資料表。您可以安裝 OpenSearch out-of-the-box整合，或使用 OpenSearch Query Workbench 為進階使用案例建立自訂 SQL 資料表。如需為 VPC、CloudTrail 和 AWS WAF 日誌建立資料表的範例，請參閱 GitHub for [VPC](https://github.com/opensearch-project/opensearch-catalog/blob/main/integrations/observability/amazon_vpc_flow/assets/create_table_vpc_schema-1.0.0.sql)、[CloudTrail](https://github.com/opensearch-project/opensearch-catalog/blob/main/integrations/observability/aws_cloudtrail/assets/create_table_cloud-trail-records-1.0.0.sql) 和 上的文件[AWS WAF](https://github.com/opensearch-project/opensearch-catalog/blob/main/integrations/observability/aws_waf/assets/create_table-1.0.0.sql)。建立資料表之後，您可以建立新的 Amazon S3 資料來源，並限制對有限資料表的存取。
+ **（選用） 手動建立的 IAM 角色。 **您可以使用此角色來管理對資料來源的存取。或者，您可以讓 OpenSearch Service 自動為您建立具有所需許可的角色。如果您選擇使用手動建立的 IAM 角色，請遵循 中的指引[手動建立 IAM 角色的必要許可](#direct-query-s3-additional-resources-required-permissions)。

## 程序
<a name="direct-query-s3-create"></a>

您可以使用 AWS 管理主控台 或 OpenSearch Service API 在網域上設定直接查詢資料來源。

### 使用 設定資料來源 AWS 管理主控台
<a name="creating-direct-query-s3-console-create"></a>

1. 在 [https://console.aws.amazon.com/aos/](https://console.aws.amazon.com/aos/) 瀏覽至 Amazon OpenSearch Service 主控台。

1. 在左側導覽窗格中選擇 **Domains** (網域)。

1. 選取您要為其設定新資料來源的網域。這會開啟網域詳細資訊頁面。

1. 選擇一般網域詳細資訊下方的**連線**索引標籤，然後尋找**直接查詢**區段。

1. 選擇**設定資料來源**。

1. 輸入新資料來源的名稱和選用描述。

1. 選擇**使用 的 Amazon S3 AWS Glue Data Catalog**。

1. 在 **IAM 許可存取設定**下，選擇如何管理存取。

   1. 如果您想要自動為此資料來源建立角色，請遵循下列步驟：

      1. 選取**建立新角色**。

      1. 輸入 IAM 角色的名稱。

      1. 選取一或多個包含您要查詢之資料的 S3 儲存貯體。

      1. 選取要存放查詢檢查點的檢查點 S3 儲存貯體。

      1. 選取一或多個 AWS Glue 資料庫或資料表，以定義可查詢的資料。如果尚未建立資料表，請提供預設資料庫的存取權。

   1. 如果您想要使用自己管理的現有角色，請遵循下列步驟：

      1. 選取**使用現有角色**。

      1. 從下拉式功能表中選取現有角色。
**注意**  
使用您自己的角色時，您必須從 IAM 主控台連接必要的政策，以確保它具有所有必要的許可。如需詳細資訊，請參閱 中的範例政策[手動建立 IAM 角色的必要許可](#direct-query-s3-additional-resources-required-permissions)。

1. 選擇**設定**。這會使用 OpenSearch Dashboards URL 開啟資料來源詳細資訊畫面。您可以導覽至此 URL 以完成後續步驟。

### OpenSearch Service API
<a name="creating-direct-query-s3-api-create"></a>

使用 [AddDataSource](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_AddDataSource.html) API 操作在您的網域中建立新的資料來源。

```
POST https://es.region.amazonaws.com/2021-01-01/opensearch/domain/domain-name/dataSource

{
   "DataSourceType": {
        "S3GlueDataCatalog": {
            "RoleArn": "arn:aws:iam::account-id:role/role-name"
        }
    }
   "Description": "data-source-description",
   "Name": "my-data-source"
}
```

## 後續步驟
<a name="direct-query-s3-next-steps"></a>

### 造訪 OpenSearch Dashboards
<a name="direct-query-s3-next-steps-dashboard"></a>

建立資料來源之後，OpenSearch Service 會為您提供 OpenSearch Dashboards 連結。您可以使用此功能來設定存取控制、定義資料表、安裝out-of-the-box整合，以及查詢您的資料。

如需詳細資訊，請參閱[在 OpenSearch Dashboards 中設定和查詢 S3 資料來源](direct-query-s3-configure.md)。

## 映射 AWS Glue Data Catalog 角色
<a name="direct-query-s3-permissions"></a>

如果您在建立資料來源後已啟用[精細存取控制](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html)，則必須將非管理員使用者對應至具有 AWS Glue Data Catalog 存取權的 IAM 角色，才能執行直接查詢。若要手動建立可映射至 IAM `glue_access`角色的後端角色，請執行下列步驟：

**注意**  
索引用於對資料來源的任何查詢。具有特定資料來源請求索引的讀取存取權的使用者可以針對該資料來源讀取*所有*查詢。具有結果索引讀取存取權的使用者可以針對該資料來源讀取*所有*查詢的結果。

1. 從 OpenSearch Dashboards 的主選單中，選擇**安全性**、**角色**和**建立角色**。

1. 為角色命名 **glue\$1access**。

1. 針對**叢集許可**，選取 `indices:data/write/bulk*`、`indices:data/read/scroll`、`indices:data/read/scroll/clear`。

1. 針對**索引**，輸入您要授予使用者角色存取權的下列索引：
   + `.query_execution_request_<name of data source>`
   + `query_execution_result_<name of data source>`
   + `.async-query-scheduler`
   + `flint_*`

1. 針對**索引許可**，選取 `indices_all`。

1. 選擇**建立**。

1. 選擇 **Mapped users** (已映射的使用者)、**Manage mapping** (管理映射)。

1. 在**後端角色**下，新增需要呼叫網域許可之角色的 AWS Glue ARN。

   ```
   arn:aws:iam::account-id:role/role-name
   ```

1. 選取**映射**，並確認已**映射使用者**下顯示該角色。

如需映射角色的詳細資訊，請參閱 [將角色映射至使用者](fgac.md#fgac-mapping)。

## 其他資源
<a name="direct-query-s3-additional-resources"></a>

### 手動建立 IAM 角色的必要許可
<a name="direct-query-s3-additional-resources-required-permissions"></a>

 為您的網域建立資料來源時，您可以選擇 IAM 角色來管理對資料的存取。您有兩種選擇：

1. 自動建立新的 IAM 角色

1. 使用您手動建立的現有 IAM 角色

如果您使用手動建立的角色，則需要將正確的許可連接到角色。許可必須允許存取特定資料來源，並允許 OpenSearch Service 擔任該角色。這是必要的，以便 OpenSearch Service 可以安全地存取您的資料並與之互動。

下列範例政策示範建立和管理資料來源所需的最低權限許可。如果您有更廣泛的許可，例如 `s3:*`或 `AdminstratorAccess`政策，這些許可會包含範例政策中最低權限的許可。

在下列範例政策中，將*預留位置文字*取代為您自己的資訊。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"HttpActionsForOpenSearchDomain",
         "Effect":"Allow",
         "Action":"es:ESHttp*",
"Resource":"arn:aws:es:us-east-1:111122223333:domain/example.com/*"
      },
      {
         "Sid":"AmazonOpenSearchS3GlueDirectQueryReadAllS3Buckets",
         "Effect":"Allow",
         "Action":[
            "s3:GetObject",
            "s3:GetObjectVersion",
            "s3:ListBucket"
         ],
         "Condition":{
            "StringEquals":{
               "aws:ResourceAccount":"111122223333"
            }
         },
         "Resource":"*"
      },
      {
         "Sid":"AmazonOpenSearchDirectQueryGlueCreateAccess",
         "Effect":"Allow",
         "Action":[
            "glue:CreateDatabase",
            "glue:CreatePartition",
            "glue:CreateTable",
            "glue:BatchCreatePartition"
         ],
         "Resource":"*"
      },
      {
         "Sid":"AmazonOpenSearchS3GlueDirectQueryModifyAllGlueResources",
         "Effect":"Allow",
         "Action":[
            "glue:DeleteDatabase",
            "glue:DeletePartition",
            "glue:DeleteTable",
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:GetPartition",
            "glue:GetPartitions",
            "glue:GetTable",
            "glue:GetTableVersions",
            "glue:GetTables",
            "glue:UpdateDatabase",
            "glue:UpdatePartition",
            "glue:UpdateTable",
            "glue:BatchGetPartition",
            "glue:BatchDeletePartition",
            "glue:BatchDeleteTable"
         ],
         "Resource":[
            "arn:aws:glue:us-east-1:111122223333:table/*",
            "arn:aws:glue:us-east-1:111122223333:database/*",
            "arn:aws:glue:us-east-1:111122223333:catalog",
            "arn:aws:es:us-east-1:111122223333:domain/domain_name"
         ],
         "Condition":{
            "StringEquals":{
               "aws:ResourceAccount":"111122223333"
            }
         }
      },
      {
         "Sid":"ReadAndWriteActionsForS3CheckpointBucket",
         "Effect":"Allow",
         "Action":[
            "s3:ListMultipartUploadParts",
            "s3:DeleteObject",
            "s3:GetObject",
            "s3:PutObject",
            "s3:GetBucketLocation",
            "s3:ListBucket"
         ],
         "Condition":{
            "StringEquals":{
               "aws:ResourceAccount":"111122223333"
            }
         },
         "Resource":[
            "arn:aws:s3:::amzn-s3-demo-bucket",
            "arn:aws:s3:::amzn-s3-demo-bucket/*"
         ]
      }
   ]
}
```

------

若要支援不同帳戶中的 Amazon S3 儲存貯體，您需要將條件包含在 Amazon S3 政策中，並新增適當的帳戶。

在下列範例條件中，將*預留位置文字*取代為您自己的資訊。

```
"Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "{{accountId}}"
                }
```

角色也必須具有下列信任政策，指定目標 ID。

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

****  

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

------

如需建立角色的指示，請參閱[使用自訂信任政策建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

如果您在 OpenSearch Service 中啟用了精細存取控制，系統會自動為您的資料來源建立新的 OpenSearch 精細存取控制角色。新的精細存取控制角色的名稱將是 `AWS OpenSearchDirectQuery <name of data source>`。

根據預設，角色只能存取直接查詢資料來源索引。雖然您可以設定角色來限制或授予對資料來源的存取權，但建議您不要調整此角色的存取權。**如果您刪除資料來源，則會刪除此角色**。如果任何其他使用者映射到角色，這將移除其存取權。