在 OpenSearch 服务中创建 Amazon S3 数据源集成 - 亚马逊 OpenSearch 服务

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

在 OpenSearch 服务中创建 Amazon S3 数据源集成

您可以通过 AWS Management Console 或 API 为 OpenSearch 服务创建新的 Amazon S3 直接查询数据源。每个新数据源都使用 AWS Glue Data Catalog 来管理代表 Amazon S3 存储桶的表。

先决条件

在开始之前,请确保您已经阅读了以下文档:

在创建数据源之前,您必须拥有以下资源 AWS 账户:

  • 版本为 2.13 或更高版本的 OpenSearch 域名。这是设置直接查询集成的基础。有关相关设置的说明,请参阅 创建 OpenSearch 服务域

  • 一个或多个 S3 存储桶。您需要指定包含要查询的数据的存储桶,以及用于存储查询检查点的存储桶。有关创建 S3 存储桶的说明,请参阅 Amazon S3 用户指南中的创建存储桶。

  • (可选)一个或多个 AWS Glue 表。在 Amazon S3 上查询数据需要您设置表 AWS Glue Data Catalog 以指向 S3 数据。必须使用 OpenSearch 查询工作台创建表。现有的 Hive 表不兼容。

    如果这是您首次设置 Amazon S3 数据源,则必须创建一个管理数据源来配置所有 AWS Glue Data Catalog 表。为此,您可以安装 OpenSearch out-of-the-box集成或使用 OpenSearch Query Workbench 为高级用例创建自定义 SQL 表。有关为 VPC CloudTrail、和 AWS WAF 日志创建表的示例,请参阅 VPC CloudTrail、和 GitHub AWS WAF的文档。创建表后,您可以创建新的 Amazon S3 数据源并限制对有限表的访问权限。

  • (可选)手动创建的 IAM 角色。您可以使用此角色来管理对数据源的访问权限。或者,您可以让 S OpenSearch ervice 自动为您创建具有所需权限的角色。如果您选择使用手动创建的 IAM 角色,请按照中的指导进行操作手动创建的 IAM 角色所需的权限

过程

您可以使用 AWS Management Console 或 OpenSearch 服务 API 在网域上设置直接查询数据源。

  1. 导航到亚马逊 OpenSearch 服务控制台,网址为https://console.aws.amazon.com/aos/

  2. 在左侧导航窗格中,选择

  3. 选择要为其设置新数据来源的域。随即打开域详细信息页面。

  4. 选择一般域详细信息下方的连接选项卡,然后找到直接查询部分。

  5. 选择配置数据源

  6. 输入新数据源的名称和可选描述。

  7. 选择带有 Amazon S3 AWS Glue Data Catalog

  8. IAM 权限访问设置下,选择如何管理访问权限。

    1. 如果要自动为此数据源创建角色,请执行以下步骤:

      1. 选择 “创建新角色”。

      2. 输入 IAM 角色的名称。

      3. 选择一个或多个包含您要查询的数据的 S3 存储桶。

      4. 选择要在其中存储查询检查点的检查点 S3 存储桶。

      5. 选择一个或多个 AWS Glue 数据库或表来定义可以查询哪些数据。如果尚未创建表,请提供对默认数据库的访问权限。

    2. 如果您想使用自己管理的现有角色,请按照以下步骤操作:

      1. 选择使用现有角色

      2. 从下拉菜单中选择现有角色。

    注意

    使用自己的角色时,必须通过从 IAM 控制台附加必需的策略来确保其拥有所有必要的权限。有关更多信息,请参阅中的策略示例手动创建的 IAM 角色所需的权限

  9. 选择 配置。这将打开带有 OpenSearch 仪表板 URL 的数据源详细信息屏幕。您可导航到此 URL 以完成后续步骤。

使用 AddDataSourceAPI 操作在您的网域中创建新的数据源。

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" }

后续步骤

访问 OpenSearch仪表板

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

有关更多信息,请参阅 在 OpenSearch 控制面板中配置和查询 S3 数据源

映射 AWS Glue Data Catalog 角色

如果您在创建数据源后启用了精细访问控制,则必须将非管理员用户映射到具有 AWS Glue Data Catalog 访问权限的 IAM 角色才能运行直接查询。要手动创建可以映射到 IAM glue_access 角色的后端角色,请执行以下步骤:

注意

索引用于针对数据来源的任何查询。对给定数据来源的请求索引具有读取权限的用户可以读取针对该数据来源的所有查询。对结果索引具有读取权限的用户可以读取针对该数据来源的所有查询的结果。

  1. 从 “ OpenSearch 控制面板” 的主菜单中,选择 “安全”、“角色” 和 “创建角色”。

  2. 将该角色命名为 glue_access

  3. 对于集群权限,选择 indices:data/write/bulk*indices:data/read/scrollindices:data/read/scroll/clear

  4. 对于索引,输入想要授予具有角色访问权限的用户的以下索引:

    • .query_execution_request_<name of data source>

    • query_execution_result_<name of data source>

    • .async-query-scheduler

    • flint_*

  5. 对于索引权限,选择 indices_all

  6. 选择创建

  7. 选择映射的用户管理映射

  8. 后端角色下,添加需要权限才能调用域的 AWS Glue 角色的 ARN。

    arn:aws:iam::account-id:role/role-name
  9. 选择映射并确认在映射的用户下显示的角色。

有关表映射角色的更多信息,请参阅 将角色映射到用户

其他资源

手动创建的 IAM 角色所需的权限

在为您的域创建数据源时,您可以选择一个 IAM 角色来管理对数据的访问权限。您有两种选择:

  1. 自动创建新的 IAM 角色

  2. 使用您手动创建的现有 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" } ] }

有关创建角色的说明,请参阅使用自定义信任策略创建角色

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

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