

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

# 在 OpenSearch 服务中创建 Amazon S3 数据源集成
<a name="direct-query-s3-creating"></a>

您可以通过 AWS 管理控制台 或 API 为 OpenSearch 服务创建新的 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 服务域](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 日志创建表的示例，请参阅 [VPC [CloudTrail](https://github.com/opensearch-project/opensearch-catalog/blob/main/integrations/observability/aws_cloudtrail/assets/create_table_cloud-trail-records-1.0.0.sql)](https://github.com/opensearch-project/opensearch-catalog/blob/main/integrations/observability/amazon_vpc_flow/assets/create_table_vpc_schema-1.0.0.sql)、和 GitHub [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 角色。**您可以使用此角色以管理对数据来源的访问权限。或者，您可以让 S OpenSearch ervice 自动为您创建具有所需权限的角色。如果选择使用手动创建的 IAM 角色，请按照 [手动创建的 IAM 角色所需权限](#direct-query-s3-additional-resources-required-permissions) 中的指导进行操作。

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

您可以使用 AWS 管理控制台 或 OpenSearch 服务 API 在网域上设置直接查询数据源。

### 要使用设置数据源 AWS 管理控制台
<a name="creating-direct-query-s3-console-create"></a>

1. 导航到亚马逊 OpenSearch 服务控制台，网址为[https://console.aws.amazon.com/aos/](https://console.aws.amazon.com/aos/)。

1. 在左侧导航窗格中，选择 **域**。

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 仪表板 URL 的数据源详细信息屏幕。您可导航到此 URL 以完成后续步骤。

### OpenSearch 服务 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 仪表板
<a name="direct-query-s3-next-steps-dashboard"></a>

创建数据源后，S OpenSearch ervice 会为您提供 OpenSearch仪表板链接。您可以使用它来配置访问控制、定义表、安装 out-of-the-box集成和查询数据。

有关更多信息，请参阅 [在 OpenSearch 控制面板中配置和查询 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 控制面板” 的主菜单中，选择 “**安全**”、“**角色**” 和 “**创建角色**”。

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. 选择**映射的用户**、**管理映射**。

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 角色。

如果您使用手动创建的角色，则需为该角色关联正确的权限。这些权限必须允许访问特定数据源，并允许 S OpenSearch ervice 代入该角色。这是必需的，这样 OpenSearch 服务才能安全地访问您的数据并与之交互。

以下示例策略演示了创建和管理数据来源所需的最低权限。如果您拥有更广泛的权限，例如 `s3:*` 或 `AdminstratorAccess` 策略，则这些权限包含示例策略中的最低权限。

在以下示例政策中，*placeholder text *用您自己的信息替换。

------
#### [ 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 策略中包含一个条件并添加相应的账户。

在以下示例条件中，*placeholder text *用您自己的信息替换。

```
"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)。

如果您在 S OpenSearch ervice 中启用了细粒度访问控制，则将自动为您的数据源创建一个新的 OpenSearch细粒度访问控制角色。该新的精细访问控制角色名称将为 `AWS OpenSearchDirectQuery <name of data source>`。

默认情况下，该角色只能访问直接查询数据来源索引。尽管您可以配置该角色以限制或授予对数据来源的访问权限，但建议不要调整该角色的访问权限。**如果您删除数据来源，该角色也将被删除**。如果任何其他用户被映射到该角色，则将移除其访问权限。