

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
<a name="ml-amazon-connector"></a>

Wenn Sie Amazon OpenSearch Service Machine Learning (ML) Connectors 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 AI 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](https://opensearch.org/docs/latest/ml-commons-plugin/remote-models/connectors/#supported-connectors).

**Topics**
+ [Voraussetzungen](#connector-sagemaker-prereq)
+ [Erstellen Sie einen OpenSearch Service-Connector](#connector-sagemaker-create)

## Voraussetzungen
<a name="connector-sagemaker-prereq"></a>

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

### Richten Sie eine Amazon SageMaker AI-Domain ein
<a name="connector-sagemaker"></a>

Informationen zur [Bereitstellung Ihres Machine-Learning-Modells finden Sie unter Bereitstellen eines](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-deployment.html) Modells in *Amazon SageMaker AI im Amazon AI Developer Guide*. SageMaker Notieren Sie sich die Endpunkt-URL für Ihr Modell, die Sie benötigen, um einen AI-Connector zu erstellen.

### Erstellen einer IAM-Rolle
<a name="connector-sagemaker-iam"></a>

Richten Sie eine IAM-Rolle ein, um SageMaker Runtime-Berechtigungen an den Service zu OpenSearch delegieren. Informationen zum Erstellen einer neuen Rolle finden Sie unter [Erstellen einer IAM-Rolle (Konsole)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console) im *IAM-Benutzerhandbuch*. 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 KI-Endpunkt zugreifen kann. Informationen zum Anhängen einer Richtlinie an eine Rolle finden Sie unter [Hinzufügen von IAM-Identitätsberechtigungen](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console). 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {   
               "Action": [
                   "sagemaker:InvokeEndpointAsync",
                   "sagemaker:InvokeEndpoint"
               ],
               "Effect": "Allow",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Folgen Sie den Anweisungen unter [Vertrauensrichtlinie für Rollen ändern](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-managingrole_edit-trust-policy), um die Vertrauensstellung der Rolle zu bearbeiten. Ersetzen Sie den Wert in der folgenden Richtlinie {{service-principal}} durch einen der folgenden Dienstprinzipale für OpenSearch Service oder OpenSearch Serverless:  
**Für Service OpenSearch **  
`opensearchservice.amazonaws.com`  
**Für OpenSearch Serverless**  
`ml.opensearchservice.amazonaws.com`

------
#### [ JSON ]

****  

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

------

   Wir empfehlen, dass Sie die Schlüssel `aws:SourceAccount` und die `aws:SourceArn` Bedingungsschlüssel 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 der 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
<a name="connector-sagemaker-permissions"></a>

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 erteilen, fügen Sie die folgende Richtlinie an die IAM-Rolle an, deren Anmeldeinformationen zum Signieren der Anforderung verwendet werden:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::{{111122223333}}:role/opensearch-sagemaker-role"
        },
        {
            "Effect": "Allow",
            "Action": "es:ESHttpPost",
            "Resource": "arn:aws:es:{{us-east-1}}:{{111122223333}}:domain/{{domain-name}}/*"
        }
    ]
}
```

------

Wenn Ihr Benutzer oder Ihre Rolle nicht `iam:PassRole` berechtigt ist, Ihre Rolle weiterzugeben, kann es sein, dass beim Versuch, ein Repository im nächsten Schritt zu registrieren, ein Autorisierungsfehler auftritt.

### Ordnen Sie die ML-Rolle in OpenSearch Dashboards zu (wenn Sie eine differenzierte Zugriffskontrolle verwenden)
<a name="connector-sagemaker-fgac"></a>

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

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. 

1. Wählen Sie im Hauptmenü **Sicherheit**, **Rollen** und dann die Rolle **ml\_full\_access** aus.

1. Wählen Sie **Zugeordnete Benutzer**, **Mapping verwalten**. 

1. Fügen Sie unter **Backend-Rollen** den ARN der Rolle hinzu, die über Berechtigungen zur Weitergabe `opensearch-sagemaker-role` verfügt.

   ```
   arn:aws:iam::{{account-id}}:role/{{role-name}}
   ```

1. 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
<a name="connector-sagemaker-create"></a>

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 Virtual Private Cloud (VPC) befindet, muss Ihr Computer mit der VPC verbunden sein, damit die Anfrage den AI-Connector erfolgreich erstellen kann. Der Zugriff auf eine VPC hängt von der Netzwerkkonfiguration ab, beinhaltet jedoch in der Regel eine Verbindung zu einem VPN- oder 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 Standard-JSON-Antwort erhalten.

### Beispiel für einen Python-Client
<a name="connector-sagemaker-python"></a>

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 [https://pypi.org/project/requests-aws4auth/](https://pypi.org/project/requests-aws4auth/)Pakete [AWS SDK für Python (Boto3)[https://requests.readthedocs.io/en/latest/](https://requests.readthedocs.io/en/latest/)](https://aws.amazon.com/sdk-for-python/), 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)
```