Connecteurs Amazon OpenSearch Service ML pour Services AWS - Amazon OpenSearch Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Connecteurs Amazon OpenSearch Service ML pour Services AWS

Lorsque vous utilisez des connecteurs d'apprentissage automatique (ML) Amazon OpenSearch Service avec un autre Service AWS, vous devez configurer un IAM rôle pour connecter le OpenSearch Service à ce service en toute sécurité. Services AWS que vous pouvez configurer un connecteur pour inclure Amazon SageMaker et Amazon Bedrock. Dans ce didacticiel, nous expliquons comment créer un connecteur entre OpenSearch Service et SageMaker Runtime. Pour plus d'informations sur les connecteurs, voir Connecteurs pris en charge.

Prérequis

Pour créer un connecteur, vous devez disposer d'un point de terminaison Amazon SageMaker Domain et d'un IAM rôle qui accorde l'accès au OpenSearch service.

Configurer un SageMaker domaine Amazon

Consultez la section Déployer un modèle sur Amazon SageMaker dans le guide du SageMaker développeur Amazon pour déployer votre modèle d'apprentissage automatique. Notez le point URL de terminaison de votre modèle, dont vous avez besoin pour créer un connecteur AI.

créer un rôle IAM ;

Configurez un IAM rôle pour déléguer les autorisations SageMaker d'exécution au OpenSearch service. Pour créer un nouveau rôle, consultez la section Création d'un IAM rôle (console) dans le guide de IAM l'utilisateur. Vous pouvez éventuellement utiliser un rôle existant à condition qu'il dispose du même ensemble de privilèges. Si vous créez un nouveau rôle au lieu d'utiliser un rôle AWS géré, remplacez-le opensearch-sagemaker-role dans ce didacticiel par le nom de votre propre rôle.

  1. Associez la IAM politique gérée suivante à votre nouveau rôle pour permettre au OpenSearch Service d'accéder à votre SageMaker point de terminaison. Pour associer une politique à un rôle, consultez la section Ajouter des autorisations IAM d'identité.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpointAsync", "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "*" } ] }
  2. Suivez les instructions de la section Modification d'une politique de confiance de rôle pour modifier la relation de confiance du rôle. Vous devez spécifier OpenSearch Service dans la Principal déclaration :

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

    Nous vous recommandons d'utiliser les clés de aws:SourceArn condition aws:SourceAccount et pour limiter l'accès à un domaine spécifique. SourceAccountIl s'agit de l' Compte AWS ID qui appartient au propriétaire du domaine et de SourceArn celui ARN du domaine. Par exemple, vous pouvez ajouter le bloc de condition suivant à la politique de confiance :

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

Configurer des autorisations

Pour créer le connecteur, vous devez être autorisé à transmettre le IAM rôle à OpenSearch Service. Vous avez également besoin de l'accès à l'action es:ESHttpPost. Pour accorder ces deux autorisations, associez la politique suivante au IAM rôle dont les informations d'identification sont utilisées pour signer la demande :

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

Si votre utilisateur ou votre rôle n'est pas iam:PassRole autorisé à transmettre votre rôle, il se peut que vous rencontriez une erreur d'autorisation lorsque vous tenterez d'enregistrer un référentiel à l'étape suivante.

Cartographier le rôle du machine learning dans OpenSearch les tableaux de bord (si vous utilisez un contrôle d'accès précis)

Le contrôle d'accès précis introduit une étape supplémentaire lors de la configuration d'un connecteur. Même si vous utilisez l'authentification de HTTP base à toutes autres fins, vous devez ml_full_access associer le IAM rôle à votre rôle iam:PassRole autorisé à transmettreopensearch-sagemaker-role.

  1. Accédez au plugin OpenSearch Dashboards correspondant à votre domaine OpenSearch de service. Vous pouvez trouver le point de terminaison Dashboards sur le tableau de bord de votre domaine sur la console OpenSearch de service.

  2. Dans le menu principal, choisissez Sécurité, Rôles, puis sélectionnez le rôle ml_full_access.

  3. Choisissez Mapped users (Utilisateurs mappés), Manage mapping (Gérer le mappage).

  4. Sous Rôles principaux, ajoutez ARN le rôle autorisé à transmettreopensearch-sagemaker-role.

    arn:aws:iam::account-id:role/role-name
  5. Sélectionnez Mapper et vérifiez que l'utilisateur ou le rôle s'affiche sous Utilisateurs mappés.

Création d'un connecteur OpenSearch de service

Pour créer un connecteur, envoyez une POST demande au point de terminaison du domaine de OpenSearch service. Vous pouvez utiliser curl, le client Python d'exemple, Postman ou une autre méthode pour envoyer une demande signée. Notez que vous ne pouvez pas utiliser de POST requête dans la console Kibana. La demande se présente au format suivant :

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

Si votre domaine réside dans un cloud privé virtuel (VPC), votre ordinateur doit être connecté au VPC pour que la demande puisse créer correctement le connecteur AI. L'accès à un VPC varie en fonction de la configuration du réseau, mais implique généralement la connexion à un réseau VPN ou à un réseau d'entreprise. Pour vérifier que vous pouvez accéder à votre domaine de OpenSearch service, accédez https://your-vpc-domain.region.es.amazonaws.com à un navigateur Web et vérifiez que vous recevez la JSON réponse par défaut.

Exemple de client Python

Le client Python est plus simple à automatiser qu'une HTTP requête et offre une meilleure réutilisabilité. Pour créer le connecteur AI avec le client Python, enregistrez l'exemple de code suivant dans un fichier Python. Le client a besoin des requests-aws4authpackages AWS SDK for Python (Boto3)requests,, et.

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)