Amazon OpenSearch 服务 ML 连接器适用于 AWS 服务 - 亚马逊 OpenSearch 服务

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

Amazon OpenSearch 服务 ML 连接器适用于 AWS 服务

当您将 Amazon S OpenSearch ervice 机器学习 (ML) 连接器与其他连接器一起使用时 AWS 服务,您需要设置一个IAM角色才能将 OpenSearch 服务安全地连接到该服务。 AWS 服务 你可以设置一个连接器来包含 Amazon A SageMaker I 和 Amazon Bedrock。在本教程中,我们将介绍如何创建从 OpenSearch 服务到 SageMaker 运行时的连接器。有关连接器的更多信息,请参阅受支持的连接器

先决条件

要创建连接器,您必须拥有 Amazon SageMaker AI 域终端节点和授予 OpenSearch 服务访问权限的IAM角色。

设置亚马逊 A SageMaker I 域名

部署您的机器学习模型,请参阅亚马逊 SageMaker A SageMaker I 开发人员指南中的在 Ama zon AI 中部署模型。记下模型URL的终端节点,这是创建 AI 连接器所必需的。

创建 IAM 角色

设置IAM角色以将 SageMaker 运行时权限委托给 OpenSearch 服务。要创建新角色,请参阅《IAM用户指南》中的创建IAM角色(控制台)。或者,您可以使用现有角色,前提是该角色具有相同的权限集。如果您确实创建了新角色而不是使用 AWS 托管角色,请将本教程opensearch-sagemaker-role中的角色名称替换为您自己的角色名称。

  1. 将以下托管IAM策略附加到您的新角色以允许 OpenSearch 服务访问您的 SageMaker AI 终端节点。要将策略附加到角色,请参阅添加IAM身份权限

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpointAsync", "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "*" } ] }
  2. 按照修改角色信任策略中的说明编辑角色的信任关系。您必须在Principal语句中指定 “ OpenSearch 服务”:

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

    建议您使用aws:SourceAccountaws:SourceArn条件密钥来限制对某个具体域的访问。SourceAccount是属于域名所有者的 AWS 账户 ID,SourceArn是域名所有者ARN的 ID。例如,您可以将以下条件块添加到信任策略:

    "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:es:region:account-id:domain/domain-name" } }

配置 权限

要创建连接器,您需要权限才能将IAM角色传递给 S OpenSearch ervice。还需要对 es:ESHttpPost 操作的访问权限。要授予这两个权限,请将以下策略附加到使用其证书签署请求的IAM角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id:role/opensearch-sagemaker-role" }, { "Effect": "Allow", "Action": "es:ESHttpPost", "Resource": "arn:aws:es:region:account-id:domain/domain-name/*" } ] }

如果您的用户或角色没有 iam:PassRole 权限传递您的角色,则在下一步骤中尝试注册存储库时,您可能会遇到授权错误:

在 OpenSearch 仪表板中映射 ML 角色(如果使用精细的访问控制)

设置连接器时,精细访问控制会引入额外的步骤。即使您将HTTP基本身份验证用于所有其他目的,也需要将ml_full_access角色映射到具有传递iam:PassRole权限的IAM角色opensearch-sagemaker-role

  1. 导航到您的 OpenSearch 服务域的 OpenSearch 仪表板插件。您可以在 OpenSearch 服务控制台的域控制面板上找到控制面板终端节点。

  2. 从主菜单中选择安全角色,然后选择 ml_full_access 角色。

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

  4. 在 “后端角色” ARN 下,添加有权传递的角色opensearch-sagemaker-role

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

创建 OpenSearch 服务连接器

要创建连接器,请向 OpenSearch 服务域终端节点发送POST请求。您可以使用 curl、示例 Python 客户端、Postman 或其他方法来发送已签名的请求。请注意,您无法在 Kibana 控制台中使用 POST 请求。 请求的格式如下:

POST domain-endpoint/_plugins/_ml/connectors/_create { "name": "sagemaker: embedding", "description": "Test connector for Sagemaker embedding model", "version": 1, "protocol": "aws_sigv4", "credential": { "roleArn": "arn:aws:iam::account-id:role/opensearch-sagemaker-role" }, "parameters": { "region": "region", "service_name": "sagemaker" }, "actions": [ { "action_type": "predict", "method": "POST", "headers": { "content-type": "application/json" }, "url": "https://runtime.sagemaker.region.amazonaws.com/endpoints/endpoint-id/invocations", "request_body": "{ \"inputs\": { \"question\": \"${parameters.question}\", \"context\": \"${parameters.context}\" } }" } ] }

如果您的域位于虚拟私有云中 (VPC),则必须将您的计算机连接到,请求才能成功创建 AI 连接器。VPC访问因网络配置VPC而异,但通常需要连接到VPN或公司网络。要检查您是否可以访问您的 OpenSearch 服务域,请在 Web 浏览器https://your-vpc-domain.region.es.amazonaws.com中导航到并确认您是否收到了默认JSON响应。

示例 Python 客户端

Python 客户端比 HTTP 请求更容易自动化,并且具有更好的可重用性。要使用 Python 客户端创建 AI 连接器,请将以下示例代码保存到 Python 文件中。客户端需要 AWS SDK for Python (Boto3)requestsrequests-aws4auth 程序包。

import boto3 import requests from requests_aws4auth import AWS4Auth host = 'domain-endpoint/' region = 'region' service = 'es' credentials = boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) # Register repository path = '_plugins/_ml/connectors/_create' url = host + path payload = { "name": "sagemaker: embedding", "description": "Test connector for Sagemaker embedding model", "version": 1, "protocol": "aws_sigv4", "credential": { "roleArn": "arn:aws:iam::account-id:role/opensearch-sagemaker-role" }, "parameters": { "region": "region", "service_name": "sagemaker" }, "actions": [ { "action_type": "predict", "method": "POST", "headers": { "content-type": "application/json" }, "url": "https://runtime.sagemaker.region.amazonaws.com/endpoints/endpoint-id/invocations", "request_body": "{ \"inputs\": { \"question\": \"${parameters.question}\", \"context\": \"${parameters.context}\" } }" } ] } headers = {"Content-Type": "application/json"} r = requests.post(url, auth=awsauth, json=payload, headers=headers) print(r.status_code) print(r.text)