Amazon OpenSearch Service ML-Konnektoren für AWS-Services - OpenSearch Amazon-Dienst

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Amazon OpenSearch Service ML-Konnektoren für AWS-Services

Wenn Sie Amazon OpenSearch Service Machine-Learning-Konnektoren (ML) mit einem anderen verwenden AWS-Service, müssen Sie eine IAM Rolle einrichten, um Service sicher mit diesem OpenSearch Service zu verbinden. AWS-Services dass Sie einen Connector einrichten können, der Amazon SageMaker und Amazon Bedrock einschließt. In diesem Tutorial erfahren Sie, wie Sie einen Connector von OpenSearch Service zu SageMaker Runtime erstellen. Weitere Informationen zu Konnektoren finden Sie unter Unterstützte Konnektoren.

Voraussetzungen

Um einen Connector zu erstellen, benötigen Sie einen Amazon SageMaker Domain-Endpunkt und eine IAM Rolle, die OpenSearch Servicezugriff gewährt.

Richten Sie eine SageMaker Amazon-Domain ein

Informationen zur Bereitstellung Ihres Machine-Learning-Modells finden Sie unter Bereitstellen eines Modells SageMaker in Amazon im Amazon SageMaker Developer Guide. Notieren Sie sich den Endpunkt URL für Ihr Modell, den Sie benötigen, um einen KI-Konnektor zu erstellen.

Erstellen Sie eine IAM-Rolle

Richten Sie eine IAM Rolle ein, um SageMaker Runtime-Berechtigungen an den OpenSearch Service zu delegieren. Informationen zum Erstellen einer neuen Rolle finden Sie unter Erstellen einer IAM Rolle (Konsole) im IAMBenutzerhandbuch. Optional können Sie eine bestehende Rolle verwenden, sofern sie über dieselben Rechte verfügt. Wenn Sie eine neue Rolle erstellen, anstatt eine AWS verwaltete Rolle zu verwenden, ersetzen Sie sie opensearch-sagemaker-role in diesem Tutorial durch den Namen Ihrer eigenen Rolle.

  1. Fügen Sie Ihrer neuen Rolle die folgende verwaltete IAM Richtlinie hinzu, damit OpenSearch Service auf Ihren SageMaker Endpunkt zugreifen kann. Informationen zum Anhängen einer Richtlinie an eine Rolle finden Sie unter Hinzufügen von IAM Identitätsberechtigungen.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpointAsync", "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "*" } ] }
  2. Folgen Sie den Anweisungen unter Vertrauensrichtlinie für Rollen ändern, um die Vertrauensstellung der Rolle zu bearbeiten. Sie müssen OpenSearch Service in der Principal Erklärung angeben:

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

    Es wird empfohlen, die Bedingungsschlüssel aws:SourceAccount und die aws:SourceArn Bedingungsschlüssel zu verwenden, um den Zugriff auf eine bestimmte Domain zu beschränken. Das SourceAccount ist die AWS-Konto ID, die dem Besitzer der Domain gehört, und das SourceArn ist die ARN der Domain. Sie können der Vertrauensrichtlinie beispielsweise den folgenden Bedingungsblock hinzufügen:

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

Konfigurieren von Berechtigungen

Um den Connector zu erstellen, benötigen Sie die Erlaubnis, die IAM Rolle an OpenSearch Service zu übergeben. Sie benötigen außerdem Zugriff auf die Aktion es:ESHttpPost. Um diese beiden Berechtigungen zu gewähren, fügen Sie der IAM Rolle, deren Anmeldeinformationen zum Signieren der Anfrage verwendet werden, die folgende Richtlinie hinzu:

{ "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/*" } ] }

Wenn Ihr Benutzer oder Ihre Rolle nicht iam:PassRole berechtigt ist, Ihre Rolle weiterzugeben, kann es sein, dass Sie im nächsten Schritt einen Autorisierungsfehler feststellen, wenn Sie versuchen, ein Repository zu registrieren.

Ordnen Sie die ML-Rolle in OpenSearch Dashboards zu (wenn Sie eine differenzierte Zugriffskontrolle verwenden)

Durch eine differenzierte Zugriffskontrolle wird beim Einrichten eines Konnektors ein zusätzlicher Schritt eingeführt. Auch wenn Sie die HTTP Standardauthentifizierung für alle anderen Zwecke verwenden, müssen Sie die ml_full_access Rolle Ihrer IAM Rolle zuordnen, für die iam:PassRole Berechtigungen übergeben werden müssen. opensearch-sagemaker-role

  1. Navigieren Sie zum OpenSearch Dashboards-Plugin für Ihre OpenSearch Service-Domain. Sie finden den Dashboards-Endpunkt in Ihrem Domain-Dashboard in der OpenSearch Service-Konsole.

  2. Wählen Sie im Hauptmenü Sicherheit, Rollen und dann die Rolle ml_full_access aus.

  3. Wählen Sie Zugeordnete Benutzer, Mapping verwalten.

  4. Fügen Sie unter Backend-Rollen die Rolle hinzu, die ARN über Berechtigungen zum Weitergeben verfügt. opensearch-sagemaker-role

    arn:aws:iam::account-id:role/role-name
  5. Wählen Sie Zuordnen und bestätigen Sie, dass der Benutzer oder die Rolle unter Zugeordnete Benutzer angezeigt wird.

Erstellen Sie einen OpenSearch Service-Connector

Um einen Connector zu erstellen, senden Sie eine POST Anfrage an den Endpunkt der OpenSearch Service-Domäne. Sie können curl, den Python-Beispielclient, Postman oder eine andere Methode verwenden, um eine signierte Anfrage zu senden. Beachten Sie, dass Sie eine POST Anfrage in der Kibana-Konsole nicht verwenden können. Die Anfrage hat das folgende Format:

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

Wenn sich Ihre Domain in einer virtuellen privaten Cloud (VPC) befindet, muss Ihr Computer mit der verbunden sein, damit die VPC Anfrage den AI-Connector erfolgreich erstellen kann. Der Zugriff auf VPC ist je nach Netzwerkkonfiguration unterschiedlich, erfordert jedoch in der Regel eine Verbindung zu einem VPN oder einem Unternehmensnetzwerk. Um zu überprüfen, ob Sie Ihre OpenSearch Service-Domain erreichen können, navigieren Sie https://your-vpc-domain.region.es.amazonaws.com in einem Webbrowser zu und stellen Sie sicher, dass Sie die JSON Standardantwort erhalten.

Beispiel für einen Python-Client

Der Python-Client ist einfacher zu automatisieren als eine HTTP Anfrage und hat eine bessere Wiederverwendbarkeit. Um den AI-Konnektor mit dem Python-Client zu erstellen, speichern Sie den folgenden Beispielcode in einer Python-Datei. Der Client benötigt die requests-aws4authPakete AWS SDK for Python (Boto3)requests, und.

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)