翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS のサービス用の Amazon OpenSearch Service ML コネクタ
Amazon OpenSearch Service 機械学習 (ML) コネクタを別の AWS のサービスと使用する場合は、OpenSearch Service をそのサービスに安全に接続するための IAM ロールを設定する必要があります。AWS のサービスでは、Amazon SageMaker と Amazon Bedrock を含むようにコネクタを設定できるということです。このチュートリアルでは、OpenSearch Service から SageMaker ランタイムへのコネクタを作成する方法について説明します。コネクタの詳細については、「Supported connectors
前提条件
コネクタを作成するには、Amazon SageMaker ドメインエンドポイント、および OpenSearch Service へのアクセスを付与する IAM ロールが必要です。
Amazon SageMaker ドメインを設定する
機械学習モデルをデプロイするには、Amazon SageMaker 開発者ガイドの「Amazon SageMaker でモデルをデプロイする」を参照してください。AI コネクタを作成するために必要な、モデルのエンドポイント URL をメモしておきます。
IAM ロールを作成する
IAM ロールを設定して、SageMaker ランタイムのアクセス許可を OpenSearch Service に委任します。新しいロールを作成するには、IAM ユーザーガイドの「IAM ロール (コンソール) の作成」を参照してください。なお、同じ権限セットを持っていれば、既存のロールを使用できます。AWS マネージドロールを使用する代わりに新しいロールを作成する場合は、このチュートリアルの opensearch-sagemaker-role
を自分のロールの名前に置き換えます。
-
以下のマネージド IAM ポリシーを新しいロールにアタッチして、OpenSearch Service が SageMaker エンドポイントにアクセスできるようにします。ロールにポリシーをアタッチするには、「Adding IAM identity permissions」を参照してください。
{ "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 Dashboards に ML ロールをマッピングします (きめ細かなアクセスコントロールを使用している場合)
きめ細かいアクセス制御では、コネクタの設定時に追加の手順が必要になります。HTTP 基本認証を他のすべての目的で使用する場合でも、opensearch-sagemaker-role
を渡すための iam:PassRole
許可を持っている IAM ロールまたはユーザーに ml_full_access
ロールをマップする必要があります。
-
OpenSearch Service ドメインの OpenSearch Dashboards プラグインに移動します。OpenSearch Service コンソールのドメインダッシュボードに Dashboards エンドポイントがあります。
-
メインメニューから [セキュリティ]、[ロール] を選択し、[ml_full_access] ロールを選択します。
-
[マッピングされたユーザー]、[マッピングの管理] を選択します。
-
[バックエンドロール] で、
opensearch-sagemaker-role
を渡すためのアクセス許可があるロールの ARN を追加します。arn:aws:iam::
account-id
:role/role-name
-
[マップ] を選択し、ユーザーまたはロールが [マッピングされたユーザー] の下に表示されていることを確認します。
OpenSearch Service コネクタを作成する
コネクタを作成するには、OpenSearch Service ドメインのエンドポイントに 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 Service ドメインにアクセスできるかを確認するには、ウェブブラウザで 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)