Conectores Amazon OpenSearch Service ML para plataformas de terceiros - OpenSearch Serviço Amazon

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Conectores Amazon OpenSearch Service ML para plataformas de terceiros

Neste tutorial, abordamos como criar um conector do OpenSearch Service ao Cohere. Para obter mais informações sobre conectores, consulte Conectores compatíveis.

Ao usar um conector de aprendizado de máquina (ML) do Amazon OpenSearch Service com um modelo remoto externo, você precisa armazenar suas credenciais de autorização específicas em AWS Secrets Manager. Isso pode ser uma API chave ou uma combinação de nome de usuário e senha. Isso significa que você também precisa criar uma IAM função que permita que o acesso ao OpenSearch Serviço seja lido no Secrets Manager.

Pré-requisitos

Para criar um conector para a Cohere ou qualquer provedor externo com o OpenSearch Serviço, você deve ter uma IAM função que conceda acesso ao OpenSearch Serviço AWS Secrets Manager, onde você armazena suas credenciais. Você também deve armazenar suas credenciais no Secrets Manager.

Criar um perfil do IAM

Configure uma IAM função para delegar permissões do Secrets Manager ao OpenSearch Serviço. Você também pode usar a função SecretManagerReadWrite existente. Para criar uma nova função, consulte Criação de uma IAM função (console) no Guia IAM do usuário. Se você criar uma nova função em vez de usar uma função AWS gerenciada, substitua opensearch-secretmanager-role neste tutorial pelo nome da sua própria função.

  1. Anexe a seguinte IAM política gerenciada à sua nova função para permitir que o OpenSearch Serviço acesse seus valores do Secrets Manager. Para anexar uma política a uma função, consulte Adicionar permissões de IAM identidade.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "secretsmanager:GetSecretValue" ], "Effect": "Allow", "Resource": "*" } ] }
  2. Siga as instruções em Modificação da política de confiança de um perfil para editar a relação de confiança do perfil. Você deve especificar OpenSearch Serviço na Principal declaração:

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

    Recomendamos que você use as chaves de condição aws:SourceAccount e aws:SourceArn para limitar o acesso a um domínio específico. A SourceAccount é a Conta da AWS ID que pertence ao proprietário do domínio e a SourceArn é a ARN do domínio. Por exemplo, você pode adicionar o bloco de condições a seguir na política de confiança:

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

Configurar permissões do

Para criar o conector, você precisa de permissão para passar a IAM função para o OpenSearch Serviço. Você também precisa de acesso à ação es:ESHttpPost. Para conceder essas duas permissões, anexe a política a seguir à IAM função cujas credenciais estão sendo usadas para assinar a solicitação:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id:role/opensearch-secretmanager-role" }, { "Effect": "Allow", "Action": "es:ESHttpPost", "Resource": "arn:aws:es:region:account-id:domain/domain-name/*" } ] }

Se seu usuário ou função não tiver permissões iam:PassRole para passar sua função, talvez você encontre o seguinte erro de autorização ao tentar registrar um repositório na próxima etapa.

Configurar AWS Secrets Manager

Para armazenar suas credenciais de autorização no Secrets Manager, consulte Como criar um segredo da AWS Secrets Manager no Guia do usuário da AWS Secrets Manager .

Depois que o Secrets Manager aceitar seu par de valores-chave como segredo, você recebe um ARN com o formato:. arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-a1b2c3 Mantenha um registro dissoARN, conforme você o usa e sua chave ao criar um conector na próxima etapa.

Mapeie a função de ML em OpenSearch painéis (se estiver usando controle de acesso refinado)

O controle minucioso de acesso introduz uma etapa adicional ao configurar um conector. Mesmo se você usar a autenticação HTTP básica para todas as outras finalidades, precisará mapear a ml_full_access função para a sua IAM função que tem iam:PassRole permissões para passaropensearch-sagemaker-role.

  1. Navegue até o plug-in OpenSearch Dashboards do seu domínio OpenSearch de serviço. Você pode encontrar o endpoint do Dashboards no painel do seu domínio no console de OpenSearch serviços.

  2. No menu principal, escolha Segurança, Funções e selecione a função ml_full_access.

  3. Escolha Usuários mapeados e Gerenciar mapeamento.

  4. Em Funções de back-end, adicione ARN a função que tem permissões para passaropensearch-sagemaker-role.

    arn:aws:iam::account-id:role/role-name
  5. Selecione Mapa e confirme se o usuário ou função aparece em Usuários mapeados.

Crie um conector OpenSearch de serviço

Para criar um conector, envie uma POST solicitação para o endpoint do domínio OpenSearch Service. Você pode usar curl, o cliente Python de amostra, o Postman ou outro método para enviar uma solicitação assinada. Você não pode usar uma solicitação POST no console do Kibana. A solicitação assume o seguinte formato:

POST domain-endpoint/_plugins/_ml/connectors/_create { "name": "Cohere Connector: embedding", "description": "The connector to cohere embedding model", "version": 1, "protocol": "http", "credential": { "secretArn": "arn:aws:secretsmanager:region:account-id:secret:cohere-key-id", "roleArn": "arn:aws:iam::account-id:role/opensearch-secretmanager-role" }, "actions": [ { "action_type": "predict", "method": "POST", "url": "https://api.cohere.ai/v1/embed", "headers": { "Authorization": "Bearer ${credential.secretArn.cohere-key-used-in-secrets-manager}" }, "request_body": "{ \"texts\": ${parameters.texts}, \"truncate\": \"END\" }" } ] }

De duas maneiras, o corpo dessa solicitação é diferente do de uma solicitação de conector de código aberto. Dentro do credential campo, você passa o ARN for para a IAM função que permite que o OpenSearch Service leia do Secrets Manager, junto com o segredo ARN for the what. No headers campo, você se refere ao segredo usando a chave secreta e o fato de vir de umARN.

Se seu domínio residir em uma nuvem privada virtual (VPC), seu computador deverá estar conectado ao VPC para que a solicitação crie com êxito o conector de IA. O acesso a uma VPC varia de acordo com a configuração da rede, mas geralmente envolve a conexão com uma VPN rede corporativa. Para verificar se você pode acessar seu domínio OpenSearch de serviço, navegue até https://your-vpc-domain.region.es.amazonaws.com em um navegador da web e verifique se você recebeu a JSON resposta padrão.

Exemplo de cliente do Python

O cliente Python é mais simples de automatizar do que uma solicitação HTTP, além de ser mais fácil reutilizá-lo. Para criar o conector AI com o cliente Python, salve o código de exemplo a seguir em um arquivo Python. O cliente requer os pacotes AWS SDK for Python (Boto3), requests e 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) path = '_plugins/_ml/connectors/_create' url = host + path payload = { "name": "Cohere Connector: embedding", "description": "The connector to cohere embedding model", "version": 1, "protocol": "http", "credential": { "secretArn": "arn:aws:secretsmanager:region:account-id:secret:cohere-key-id", "roleArn": "arn:aws:iam::account-id:role/opensearch-secretmanager-role" }, "actions": [ { "action_type": "predict", "method": "POST", "url": "https://api.cohere.ai/v1/embed", "headers": { "Authorization": "Bearer ${credential.secretArn.cohere-key-used-in-secrets-manager}" }, "request_body": "{ \"texts\": ${parameters.texts}, \"truncate\": \"END\" }" } ] } headers = {"Content-Type": "application/json"} r = requests.post(url, auth=awsauth, json=payload, headers=headers) print(r.status_code) print(r.text)