아마존 OpenSearch 서비스 ML 커넥터용 AWS 서비스 - 아마존 OpenSearch 서비스

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

아마존 OpenSearch 서비스 ML 커넥터용 AWS 서비스

Amazon OpenSearch Service 기계 학습 (ML) 커넥터를 다른 AWS 서비스커넥터와 함께 사용하는 경우 OpenSearch 서비스를 해당 서비스에 안전하게 연결할 수 있도록 IAM 역할을 설정해야 합니다. AWS 서비스 Amazon SageMaker 및 Amazon Bedrock을 포함하도록 커넥터를 설정할 수 있다는 것입니다. 이 자습서에서는 OpenSearch 서비스에서 런타임까지 커넥터를 생성하는 방법을 다룹니다. SageMaker 커넥터에 대한 자세한 내용은 지원되는 커넥터를 참조하세요.

필수 조건

커넥터를 생성하려면 Amazon SageMaker Domain 엔드포인트와 OpenSearch 서비스에 액세스 권한을 부여하는 IAM 역할이 있어야 합니다.

아마존 SageMaker 도메인 설정

기계 학습 모델을 배포하려면 Amazon SageMaker SageMaker 개발자 안내서의 Amazon에 모델 배포를 참조하십시오. AI 커넥터를 생성하는 데 필요한 모델의 엔드포인트 URL을 기록하세요.

IAM 역할 생성

SageMaker 런타임 권한을 서비스에 위임하도록 IAM 역할을 설정합니다. OpenSearch 새 역할을 생성하려면 IAM 사용 설명서IAM 역할 생성(콘솔)을 참조하세요. 원하는 경우, 권한이 동일하다면 기존 역할을 사용할 수도 있습니다. AWS 관리형 역할을 사용하는 대신 새 역할을 생성하는 경우 이 자습서에서 자체 역할 이름으로 opensearch-sagemaker-role 바꾸세요.

  1. 다음 관리형 IAM 정책을 새 역할에 연결하여 OpenSearch 서비스가 SageMaker 엔드포인트에 액세스할 수 있도록 허용하세요. 정책을 역할에 연결하려면 IAM 자격 증명 권한 추가를 참조하십시오.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpointAsync", "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "*" } ] }
  2. 역할 신뢰 정책 수정에 나와 있는 지침에 따라 역할의 신뢰 관계를 편집합니다. Principal명령문에 OpenSearch 서비스를 지정해야 합니다.

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

    aws:SourceAccountaws: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 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 대시보드의 ML 역할 매핑 (세분화된 액세스 제어를 사용하는 경우)

세분화된 액세스 제어를 사용하면 커넥터를 설정할 때 추가 단계가 있습니다. 다른 모든 목적으로 HTTP 기본 인증을 사용하더라도 opensearch-sagemaker-role을 전달할 iam:PassRole 권한이 있는 IAM 역할에 ml_full_access 역할을 매핑해야 합니다.

  1. 서비스 도메인의 OpenSearch 대시보드 플러그인으로 이동합니다. OpenSearch 대시보드 엔드포인트는 OpenSearch 서비스 콘솔의 도메인 대시보드에서 찾을 수 있습니다.

  2. 주 메뉴에서 보안, 역할을 선택하고 ml_full_access 역할을 선택합니다.

  3. 매핑된 사용자(Mapped users), 매핑 관리(Manage mapping)를 차례로 선택합니다.

  4. 백엔드 역할에서 opensearch-sagemaker-role을 전달할 권한이 있는 역할의 ARN을 추가합니다.

    arn:aws:iam::account-id:role/role-name
  5. Map(맵)을 선택하고 Mapped users(매핑된 사용자)에 사용자 또는 역할이 나타나는지 확인합니다.

OpenSearch 서비스 커넥터 생성

커넥터를 만들려면 OpenSearch 서비스 도메인 엔드포인트에 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}\" } }" } ] }

도메인이 Virtual Private Cloud(VPC)에 상주하는 경우, 요청이 AI 커넥터를 생성하려면 컴퓨터가 VPC에 연결되어야 합니다. VPC 액세스는 네트워크 구성에 따라 다르지만, 대개는 VPN 또는 회사 네트워크 연결이 필요합니다. OpenSearch 서비스 도메인에 연결할 수 있는지 확인하려면 웹 브라우저로 https://your-vpc-domain.region.es.amazonaws.com 이동하여 기본 JSON 응답을 수신하는지 확인하세요.

샘플 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)