本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
適用於 的 Amazon OpenSearch Service ML 連接器 AWS 服務
當您將 Amazon OpenSearch Service Machine Learning (ML) 連接器與另一個連接器搭配使用時 AWS 服務,您需要設定 IAM角色,以安全地將 OpenSearch Service 連線至該服務。 AWS 服務 您可以設定連接器以包含 Amazon SageMaker AI 和 Amazon Bedrock。在本教學課程中,我們將介紹如何建立從 OpenSearch Service 到 SageMaker Runtime 的連接器。如需連接器的詳細資訊,請參閱支援的連接器
必要條件
若要建立連接器,您必須具有 Amazon SageMaker AI 網域端點和授予 OpenSearch 服務存取權IAM的角色。
設定 Amazon SageMaker AI 網域
請參閱《Amazon SageMaker AI 開發人員指南》中的在 Amazon AI 中部署模型,以部署機器學習模型。 SageMaker 記下模型URL的端點,您需要此端點才能建立 AI 連接器。
建立 IAM 角色
設定IAM角色以將 SageMaker 執行期許可委派給 OpenSearch Service。若要建立新的角色,請參閱IAM《 使用者指南》中的建立IAM角色 (主控台)。或者,只要現有角色具有相同的權限集,您就可以使用該角色。如果您確實建立新的角色,而不是使用 AWS 受管角色,請在本教學opensearch-sagemaker-role
課程中將 取代為您自己的角色名稱。
-
將下列受管IAM政策連接至您的新角色,以允許 OpenSearch Service 存取您的 SageMaker AI 端點。若要將政策連接至角色,請參閱新增IAM身分許可。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpointAsync", "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "*" } ] }
-
遵循修改角色信任政策中的指示,以編輯角色的信任關係。您必須在
Principal
陳述式中指定 OpenSearch Service:{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sts:AssumeRole" ], "Effect": "Allow", "Principal": { "Service": [ "opensearchservice.amazonaws.com" ] } } ] }
我們建議您使用
aws:SourceAccount
和aws:SourceArn
條件金鑰來限制對特定網域的存取。SourceAccount
是屬於網域擁有者的 AWS 帳戶 ID,而SourceArn
是網域ARN的 。例如,您可以將下列條件區塊新增至信任政策:"Condition": { "StringEquals": { "aws:SourceAccount": "
account-id
" }, "ArnLike": { "aws:SourceArn": "arn:aws:es:region
:account-id
:domain/domain-name
" } }
設定許可
若要建立連接器,您需要將IAM角色傳遞給 OpenSearch Service 的許可。您也需要存取 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
。
-
導覽至 OpenSearch 服務網域的 OpenSearch Dashboards 外掛程式。您可以在 OpenSearch 服務主控台的網域儀表板上找到儀表板端點。
-
從主選單選擇安全性、角色,然後選取 ml_full_access 角色。
-
選擇 Mapped users (已映射的使用者)、Manage mapping (管理映射)。
-
在後端角色下,新增具有傳遞 許可之角色ARN的
opensearch-sagemaker-role
。arn:aws:iam::
account-id
:role/role-name
-
選擇 Map (映射),並確認使用者或角色顯示在 Mapped users (已映射的使用者) 中。
建立 OpenSearch 服務連接器
若要建立連接器,請將POST
請求傳送至 OpenSearch Service 網域端點。您可以使用 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) 中,您的電腦必須連線至 VPC ,才能成功建立 AI 連接器。存取 會因網路組態VPC而異,但通常涉及連線至 VPN或公司網路。若要檢查您是否可以到達 OpenSearch 服務網域,請在 Web 瀏覽器https://
中導覽至 ,並驗證您是否收到預設JSON回應。your-vpc-domain
.region
.es.amazonaws.com
Python 用戶端範例
Python 用戶端比HTTP請求更易於自動化,且具有更好的可重複使用性。若要使用 Python 用戶端建立 AI 連接器,請將下列範例程式碼儲存至 Python 檔案。用戶端需要 AWS SDK for Python (Boto3)requests
requests-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)