본문으로 건너뛰기
김신건의 로그

[AWS] Amazon Kendra

· 수정 · 📖 약 4분 · 1,581자/단어 #aws #cloud #ai #ml #search #rag #enterprise-search
AWS Kendra, Amazon Kendra, Kendra, Kendra GenAI Index, Kendra Enterprise Edition, Kendra Developer Edition, Kendra Retrieve API, Kendra Query API, Kendra data source connector, Amazon 엔터프라이즈 검색, AWS 지능형 검색

정의

Amazon Kendra 는 AWS 가 관리하는 엔터프라이즈 지능형 검색 (intelligent enterprise search) 서비스입니다. 전통적 키워드 검색을 넘어 의미 기반 (semantic) 이해와 자연어 질문 응답 (question answering) 을 제공하며, 40+ 데이터 소스 커넥터로 사내 문서 저장소를 통합 인덱싱합니다.

2024년 12월 Kendra GenAI Index 가 발표되어 Bedrock Knowledge Bases 와 통합 되면서 RAG (Retrieval Augmented Generation) 워크로드의 검색 계층으로 자리잡았습니다.

왜 Kendra 인가

전통적 검색의 한계

  • 키워드 매칭만: “환급 정책” 질문에 “환불” 문서 못 찾음
  • 파일 형식 분리: PDF, Word, Confluence, SharePoint 등 개별 검색
  • 사내 접근 통제 무시: 사용자별 문서 접근 권한을 검색이 안 감안
  • 자연어 질문 지원 X: “지난 분기 매출 얼마?” 에 대한 답이 아니라 링크만

Kendra 의 접근

  • 의미 검색 (semantic search): 임베딩 + ML 로 개념 매칭
  • 자연어 질문 응답: “지난 분기 매출 얼마?” -> 실제 답 (문서 인용 포함)
  • 문서 랭킹: 관련성 스코어링
  • 사용자 컨텍스트: user token 기반 문서 필터링
  • 40+ 데이터 소스: 자동 sync

아키텍처

flowchart LR
  DS[Data Sources<br/>S3, SharePoint, Confluence, Salesforce, ...] --> Index[Kendra Index]
  Index --> Query[Query API / Retrieve API]
  Query --> App[검색/RAG 앱]

Index 유형

1. Kendra Enterprise Edition (전통)

  • 최대 5000 개 문서 (Developer Edition) 또는 큰 규모 (Enterprise)
  • Query API + Retrieve API
  • Semantic search + 자연어 QA
  • 월 정액 (인스턴스 시간)

2. Kendra Developer Edition (개발용)

  • 작은 데이터셋 (수천 문서)
  • 프로덕션 아님 (dev/PoC)
  • 저비용

3. Kendra GenAI Index (2024-12+)

RAG 특화 신규 인덱스. Retrieve API 정확도 향상. Bedrock Knowledge Bases 통합.

  • AI 어시스턴트/챗봇 위한 RAG 백엔드
  • 의미 기반 검색 최적화
  • 다중 Bedrock 앱에서 재사용
  • 인덱스 재구축 없이 여러 앱 공유

결정:

  • 사내 검색 UI 위주 -> Enterprise Edition
  • Bedrock + LLM 챗봇 (RAG) -> GenAI Index

데이터 소스 커넥터 (40+)

자동 sync + 접근 권한 정보 유지.

  • 스토리지: S3, EBS
  • 협업: SharePoint, Confluence, Google Drive, OneDrive, Box, Dropbox
  • DB: RDS, Aurora, DynamoDB, Amazon Q
  • CRM/ERP: Salesforce, ServiceNow, Zendesk, Freshdesk
  • 위키/코드: GitHub, GitLab, Bitbucket, Jira
  • 커뮤니케이션: Slack, Microsoft Teams
  • : Web Crawler
  • 파일: FSx, EFS
  • DB: MySQL, PostgreSQL, Oracle, SQL Server 커넥터

Custom Data Source: BatchPutDocument API 로 직접 push.

Sync Modes

  • Full Sync: 전체 재색인 (초기, 대량 변경)
  • New/Modified Sync: 변경분만 (일반)
  • Change Log: 데이터 소스의 CDC 활용 (SharePoint, Salesforce 등)

주기적 sync: 자동 스케줄 (매일, 매시간 등).

Query API vs Retrieve API

Query API (전통 검색)

검색 결과 페이지 (Google 스타일).

import boto3

kendra = boto3.client('kendra')

resp = kendra.query(
    IndexId='abcd-1234',
    QueryText='환급 정책은 어떻게 되나요?',
    UserContext={
        'UserId': 'alice@example.com',
        'Groups': ['finance-team']
    },
    AttributeFilter={
        'EqualsTo': {
            'Key': '_category',
            'Value': {'StringValue': 'policy'}
        }
    }
)

for item in resp['ResultItems']:
    print(item['Type'])            # ANSWER, DOCUMENT, QUESTION_ANSWER
    print(item['DocumentTitle'])
    print(item['DocumentExcerpt'])
    print(item['DocumentURI'])
    print(item['ScoreAttributes'])  # HIGH, MEDIUM, LOW, VERY_HIGH

응답 유형 3가지:

  • ANSWER: 자연어 질문에 대한 직접 답 (FAQ 매칭 or ML 추출)
  • DOCUMENT: 관련 문서 결과
  • QUESTION_ANSWER: 미리 큐레이션한 Q&A 매칭

Retrieve API (RAG 특화)

LLM 컨텍스트용 passage 반환. 답 요약 대신 원본 chunk.

resp = kendra.retrieve(
    IndexId='abcd-1234',
    QueryText='환급 정책은 어떻게 되나요?',
    PageSize=10,
    UserContext={...}
)

passages = [
    {
        'title': r['DocumentTitle'],
        'content': r['Content'],       # 200-token 청크
        'uri': r['DocumentURI'],
        'score': r['ScoreAttributes']
    }
    for r in resp['ResultItems']
]

# LLM prompt 에 삽입
prompt = f"다음 컨텍스트를 참고하여 답하세요:\n\n{passages}\n\n질문: 환급 정책은?"
llm_response = bedrock.invoke_model(...)

GenAI Index 는 Retrieve API 정확도를 특히 최적화.

Bedrock Knowledge Base 통합

Kendra GenAI Index 를 Bedrock Managed Knowledge Base 의 벡터 저장소로:

bedrock_agent = boto3.client('bedrock-agent')

# Knowledge Base 생성 시 Kendra GenAI Index 참조
bedrock_agent.create_knowledge_base(
    name='sales-kb',
    knowledgeBaseConfiguration={
        'type': 'KENDRA',
        'kendraKnowledgeBaseConfiguration': {
            'kendraIndexArn': 'arn:aws:kendra:...:index/abcd-1234'
        }
    },
    ...
)

# 사용
bedrock_agent_runtime.retrieve_and_generate(
    input={'text': '환급 정책은?'},
    retrieveAndGenerateConfiguration={
        'type': 'KNOWLEDGE_BASE',
        'knowledgeBaseConfiguration': {
            'knowledgeBaseId': 'kb-abc',
            'modelArn': 'anthropic.claude-sonnet-4-6'
        }
    }
)

장점:

  • 인덱스 하나를 여러 Bedrock 앱에서 재사용
  • Kendra 의 정확한 검색 + Bedrock 의 LLM
  • 데이터 소스 커넥터 (40+) 그대로

검색 정확도 튜닝

1. 문서 메타데이터

각 문서에 attribute 추가 -> 필터/부스팅에 활용.

{
  "documentId": "doc-1",
  "title": "환급 정책 v2",
  "body": "...",
  "attributes": {
    "_category": "policy",
    "_created_at": "2026-01-15T00:00:00Z",
    "department": "finance",
    "language": "ko",
    "confidentiality": "public"
  },
  "accessControlList": [
    {"name": "finance-team", "type": "GROUP", "access": "ALLOW"},
    {"name": "external", "type": "GROUP", "access": "DENY"}
  ]
}

2. Relevance Tuning

  • Freshness: 최근 문서 우선
  • View count: 자주 본 문서 우선 (Analytics 로 학습)
  • Duration: 짧은 페이지 우선

3. Custom Synonyms

동의어 사전:

환급 -> 환불, 반환, refund
매출 -> 수익, revenue, sales

4. FAQ

미리 큐레이션한 Q&A 를 인덱스에 로드. Query 매칭 시 QUESTION_ANSWER 결과 우선.

question,answer,source
"환급 신청 방법?","웹사이트에서 신청 후 3일 이내 처리","https://..."

5. Query Suggestions

자동완성 제안. 사용자 쿼리 이력에서 학습.

사용자 컨텍스트 (접근 통제)

중요: 사용자별 문서 접근 권한을 검색에 반영. 다른 부서 문서가 결과에 안 나오도록.

kendra.query(
    QueryText='...',
    UserContext={
        'UserId': 'alice@example.com',
        'Groups': ['finance-team', 'employees'],
        'DataSourceGroups': [
            {'DataSourceId': 'sharepoint-1', 'GroupId': 'finance-team'},
        ],
        'Token': 'JWT-token-from-IdP'
    }
)
  • SharePoint / Confluence 커넥터는 원본 ACL 자동 sync
  • 사용자 그룹 정보를 IdP (SSO) 에서 가져와 전달

Multi-language

Kendra 는 40+ 언어 지원. 한국어 포함. 인덱스 생성 시 언어 지정:

kendra.create_index(
    Name='my-index',
    Edition='ENTERPRISE_EDITION',
    ...
)

# 데이터 소스별 언어
kendra.create_data_source(
    IndexId='...',
    Configuration={...},
    LanguageCode='ko'
)

혼합 언어 문서: 자동 감지 지원.

Analytics

  • 인기 쿼리
  • 응답 없음 쿼리 (개선 대상)
  • 결과 클릭률
  • Feedback loop (thumbs up/down)

이 데이터로 relevance tuning + 콘텐츠 개선.

요금

Kendra Enterprise Edition (2026 기준):

  • 시간당 (~1.4 USD/hour, 100M 문서, 8000 qps 규모)
  • Developer Edition ~0.7 USD/hour

Kendra GenAI Index:

  • 문서 인덱싱 GB 당
  • Query 100만 당

Data Source connector: 별도 (커넥터에 따라)

Sync: 무료 (문서 처리는 인덱스 요금에 포함)

주의: 항상 켜져 있으므로 저사용 워크로드는 비쌈. Serverless 아님.

Kendra vs 대안

옵션강점언제
Kendra Enterprise40+ 커넥터, 자연어 QA, 접근 통제사내 지식 검색, 엔터프라이즈
Kendra GenAI IndexBedrock 통합, RAG 최적LLM 챗봇/어시스턴트
**[[aws-s3-vectorsS3 Vectors]]**저비용, 벡터만
OpenSearch (BM25 + kNN)유연성, 하이브리드커스텀 검색, 오픈소스
Bedrock Managed KB완전 관리, RAG 기본빠른 RAG 앱
Elasticsearch오픈소스 성숙자체 관리

결정:

  • 사내 40+ 시스템 검색 통합 -> Kendra Enterprise
  • Bedrock + LLM 챗봇 (RAG) -> Kendra GenAI Index or Bedrock Managed KB
  • 저비용 자체 임베딩 -> S3 Vectors

실전 사용 사례

1. 사내 지식 검색 (Q&A 봇)

"작년 매출은 얼마?"
→ Kendra: Salesforce, SharePoint, Confluence 통합 검색
→ 자연어 답 + 인용 문서

2. 고객 지원 (self-service)

사용자가 "환급 방법?" 질문
→ Kendra: FAQ + 정책 문서 + 공지사항 검색
→ 답변 + 관련 문서 링크

3. RAG 챗봇 (Bedrock 통합)

사용자 질문 → Bedrock Agent
→ Kendra GenAI Index Retrieve (관련 passages)
→ Claude/Llama LLM (답 생성)
→ 사용자에게 답 + 인용

4. 개발자 문서

GitHub, Jira, Confluence 통합 인덱스
"이 API 는 어떻게 인증?" → 코드 + 문서 + 티켓 검색

함정

WARNING

Kendra 는 시간당 요금 (Enterprise). 사용 안 해도 지속 청구. 저사용은 다른 옵션.

CAUTION

Sync 실패. 커넥터 credential 만료, 네트워크 이슈 등. CloudWatch 로 sync status 모니터링.

WARNING

문서 접근 통제 (ACL) 를 무시하면 사용자에게 접근 권한 없는 문서 노출. UserContext 필수.

IMPORTANT

한국어 성능 은 언어 코드 명시 (ko) 로 개선. 자동 감지도 되지만 명시가 정확.

CAUTION

Kendra 는 벡터 DB 가 아님. 자체 임베딩 저장/쿼리 X (GenAI Index 는 내부 벡터 사용). 순수 벡터 검색은 S3 Vectors, OpenSearch.

WARNING

문서 개수 제한 신중 확인. Storage capacity units (SCU) 및 query capacity units (QCU) 초과 시 요금 급증.

관련 위키

이 글의 용어 (9개)
[AWS] Amazon Bedrockcloud
정의 Amazon Bedrock 은 여러 제공사의 파운데이션 모델 (foundation model) 을 단일 API 로 호출할 수 있게 하는 AWS 의 관리형 서비스입니다. 20…
[AWS] Amazon SageMakercloud
정의 Amazon SageMaker 는 AWS 의 엔드투엔드 머신러닝 플랫폼 입니다. 데이터 준비, 라벨링, 학습, 튜닝, 배포, 모니터링, MLOps 파이프라인을 한 콘솔/SD…
[AWS] CloudWatch: 메트릭, 로그, 알람cloud
정의 CloudWatch = AWS 의 모니터링 + 로그 + 알람 통합 서비스. 메트릭 수집, 로그 집계, 대시보드, 알람, 이상 감지를 하나의 서비스에서 제공. 사용 상황 | …
[AWS] IAM: User, Role, Policy, STScloud
정의 IAM (Identity and Access Management) = AWS 의 권한 관리 전부. User, Group, Role, Policy 로 구성. "누가 어떤 리소…
[AWS] KMS: 암호화 키 관리, envelope encryptioncloud
정의 KMS (Key Management Service) = 암호화 키 중앙 관리. envelope encryption + IAM 통합 + 감사 로그. 키 종류 | 종류 | 의미…
[AWS] S3 Vectorscloud
정의 Amazon S3 Vectors 는 벡터 임베딩을 저비용, 대용량, 서버리스 로 저장하고 쿼리하기 위한 S3 의 새 버킷 유형입니다. 2024년 7월 preview, 202…
[AWS] S3: object storage, storage classes, lifecyclecloud
정의 S3 = AWS 의 object storage. bucket + key + object. 11 9's durability (99.999999999%), 무한 확장. 2026…
[LLM Eval] HELM: Holistic Evaluation of Language Modelsai
정의 HELM (Holistic Evaluation of Language Models) 는 Stanford CRFM (Center for Research on Foundation…
LLM RAG: Retrieval-Augmented Generationai
정의 RAG (Retrieval-Augmented Generation) 는 LLM 생성 전에 외부 지식 베이스에서 관련 문서를 검색 하여 프롬프트에 삽입하는 패턴. 최신 정보, …

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기