向 Amazon OpenSearch Ingestion 管道授予访问集合的权限 - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

向 Amazon OpenSearch Ingestion 管道授予访问集合的权限

Amazon OpenSearch Ingestion 管道可以写入 OpenSearch 无服务器公有集合或 VPC 集合。要提供对集合的访问权限,您需要配置一个包含授予集合访问权限的权限策略的 Amazon Identity and Access Management(IAM)管道角色。在管道配置中指定该角色之前,必须为其配置相应的信任关系,然后通过数据访问策略授予数据访问权限。

在创建管道期间,OpenSearch Ingestion 会在管道和 OpenSearch 无服务器集合之间创建一个 Amazon PrivateLink 连接。来自管道的所有流量都将通过此 VPC 端点并路由到集合。要连接到集合,必须通过网络访问策略向端点授予访问该集合的权限。

OpenSearch Ingestion pipeline connecting to OpenSearch Serverless collection via PrivateLink VPC endpoint.

向管道提供网络访问权限

您在 OpenSearch 无服务器中创建的每个集合至少关联了一个网络访问策略。网络访问策略决定了是否可以通过互联网从公共网络访问该集合,还是必须以私有方式访问该集合。更多有关网络策略的信息,请参阅针对 Amazon OpenSearch 无服务器的网络访问权限

在网络访问策略中,只能指定由 OpenSearch 无服务器托管的 VPC 端点。有关更多信息,请参阅 使用接口端点访问 Amazon OpenSearch 无服务器(Amazon PrivateLink)。但是,为了使管道能够写入集合,该策略还必须授予对 OpenSearch Ingestion 在管道和集合之间自动创建的 VPC 端点的访问权限。因此,在创建具有 OpenSearch 无服务器集合接收器的管道时,必须使用 network_policy_name 选项提供关联网络策略的名称。

例如:

... sink: - opensearch: hosts: [ "https://collection-id.region.aoss.amazonaws.com" ] index: "my-index" aws: serverless: true serverless_options: network_policy_name: "network-policy-name"

在创建管道期间,OpenSearch Ingestion 会检查指定的网络策略是否存在。如果不存在,OpenSearch Ingestion 将创建该策略。如果已经存在,OpenSearch Ingestion 会通过向其添加新规则来进行更新。添加的规则会授予对连接管道和集合的 VPC 端点的访问权限。

例如:

{ "Rules":[ { "Resource":[ "collection/my-collection" ], "ResourceType":"collection" } ], "SourceVPCEs":[ "vpce-0c510712627e27269" # The ID of the VPC endpoint that OpenSearch Ingestion creates between the pipeline and collection ], "Description":"Created by Data Prepper" }

在控制台中,OpenSearch Ingestion 添加到网络策略中的所有规则都命名为 Created by Data Prepper

Configuration details for OpenSearch endpoint access, including VPC endpoint and resources.
注意

通常,为集合指定公有访问权限的规则将会覆盖指定私有访问权限的规则。因此,如果策略已经配置了公有访问权限,OpenSearch Ingestion 添加的这条新规则实际上并不会改变策略的行为。有关更多信息,请参阅 策略优先顺序

如果您停止或删除管道,OpenSearch Ingestion 会删除管道与集合之间的 VPC 端点。此外还会修改网络策略,将 VPC 端点从允许的端点列表中移除。如果您重启管道,则会重新创建 VPC 端点,并使用端点 ID 重新更新网络策略。

步骤 1:创建管道角色

您在管道配置的 sts_role_arn 参数中指定的角色必须具有允许其向集合接收器发送数据的附加权限策略。同时,还必须具有允许 OpenSearch Ingestion 担任角色的信任关系。有关如何附加角色策略的说明,请参阅 IAM 用户指南中的添加 IAM 身份权限

以下示例策略演示了您可以在管道配置的 sts_role_arn 角色中为其提供写入集合的最低权限

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": [ "aoss:APIAccessAll", "aoss:BatchGetCollection", "aoss:CreateSecurityPolicy", "aoss:GetSecurityPolicy", "aoss:UpdateSecurityPolicy" ], "Resource": "*" } ] }

角色必须具有以下信任关系,从而允许 OpenSearch Ingestion 担任角色:

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

步骤 2:创建集合

使用以下设置创建 OpenSearch 无服务器集合。有关创建集合的说明,请参阅创建集合

数据访问策略

为集合创建一个向管道角色授予所需权限的数据访问策略。例如:

[ { "Rules": [ { "Resource": [ "index/collection-name/*" ], "Permission": [ "aoss:CreateIndex", "aoss:UpdateIndex", "aoss:DescribeIndex", "aoss:WriteDocument" ], "ResourceType": "index" } ], "Principal": [ "arn:aws:iam::account-id:role/pipeline-role" ], "Description": "Pipeline role access" } ]
注意

Principal 元素中,指定您在上一步中创建的管道角色的 Amazon 资源名称 (ARN)。

网络访问策略

为集合创建网络访问策略。您可以将数据摄入公有集合或 VPC 集合。例如,以下策略将提供对单个 OpenSearch 无服务器托管 VPC 端点的访问权限:

[ { "Description":"Rule 1", "Rules":[ { "ResourceType":"collection", "Resource":[ "collection/collection-name" ] } ], "AllowFromPublic": false, "SourceVPCEs":[ "vpce-050f79086ee71ac05" ] } ]
重要

必须在管道配置的 network_policy_name 选项中指定网络策略的名称。在创建管道时,OpenSearch Ingestion 会更新此网络策略,以允许访问其在管道和集合之间自动创建的 VPC 端点。示例管道配置详见步骤 3。有关更多信息,请参阅 向管道提供网络访问权限

步骤 3:创建管道

最后,创建管道并在其中指定管道角色和集合详细信息。管道担任此角色,以便签署对 OpenSearch 无服务器集合接收器的请求。

务必执行以下操作:

  • 对于 hosts 选项,指定您在步骤 2 中创建的集合的端点。

  • 对于 sts_role_arn 选项,指定您在步骤 1 中创建的管道角色的 Amazon 资源名称 (ARN)。

  • serverless 选项设置为 true

  • network_policy_name 选项设置为附加到集合的网络策略的名称。OpenSearch Ingestion 会自动更新此网络策略,以允许从其在管道和集合之间自动创建的 VPC 进行访问。有关更多信息,请参阅 向管道提供网络访问权限

version: "2" log-pipeline: source: http: path: "/log/ingest" processor: - date: from_time_received: true destination: "@timestamp" sink: - opensearch: hosts: [ "https://collection-id.region.aoss.amazonaws.com" ] index: "my-index" aws: serverless: true serverless_options: network_policy_name: "network-policy-name" # If the policy doesn't exist, a new policy is created. region: "us-east-1" sts_role_arn: "arn:aws:iam::account-id:role/pipeline-role"

有关必要参数和不支持的参数的完整参考,请参阅 Amazon OpenSearch Ingestion 管道支持的插件和选项