Amazon Bedrock 지식 기반(Knowledge Bases)으로 RAG 구축하기

HongEh·2025년 11월 28일

클라우드

목록 보기
3/3

“내 사내 문서/교재/매뉴얼을 LLM이 똑똑하게 참고하면서 대답해 주게 만들고 싶다”
이걸 AWS 매니지드 서비스만으로 해결해 주는 게 바로 Amazon Bedrock Knowledge Bases(지식 기반) 입니다.
(https://docs.aws.amazon.com/bedrock/latest/userguide/kb-how-it-works.html?utm_source=chatgpt.com)

이 글은 Bedrock 지식 기반을 처음 쓴다는 가정으로,

  1. 개념 이해
  2. 사전 준비 사항 (Root User vs IAM User 분리)
  3. 데이터 소스(S3 등) 연결 & 동기화(Sync)
  4. Test

을 한 번에 따라갈 수 있게 정리했습니다.


1. Bedrock Knowledge Bases 개념 정리

1-1. RAG + 지식 기반이 뭐야?

RAG(Retrieval-Augmented Generation) 는 한 줄로 말하면:

“답변하기 전에 내 문서에서 관련 내용을 먼저 찾아서 그걸 근거로 답변하게 하는 방식”

작동 흐름은 보통 이래요:

  1. 사용자의 질문을 임베딩(벡터화)
  2. 문서 벡터 DB(벡터 스토어) 에서 관련 문서 조각(chunk) 검색
  3. 검색 결과를 프롬프트에 끼워 넣고 LLM이 답변 생성

Amazon Bedrock Knowledge Bases는 이 과정을 AWS에서 “자동으로” 묶어둔 서비스예요.

  • 문서 → chunk → 임베딩 → 벡터 스토어 저장
  • 질문 → 검색 → 답변 생성(출처 포함)

즉, “RAG 파이프라인을 직접 조립하지 않아도 되게 해주는 서비스”라고 보면 됩니다.

1-2. 기본 구성 요소(지식 기반을 만들면 생기는 것들)

지식 기반을 하나 만들면 보통 아래 4가지가 핵심입니다.

Amazon Bedrock 지식 기반 데이터의 사전 조건
https://docs.aws.amazon.com/ko_kr/bedrock/latest/userguide/knowledge-base-ds.html

  • 데이터 소스
    • 예: S3 버킷에 올린 PDF/HTML/텍스트, Confluence, SharePoint, Salesforce, Kendra, Neptune, RDS/Redshift 등
  • 임베딩 모델(Embedding Model)
    • 예: amazon.titan-embed-text-v1
    • 문서를 “벡터(숫자)”로 바꿔서 검색 가능하게 만듦
  • 벡터 스토어(Vector Store)
    • 예: Amazon OpenSearch Serverless(기본), 또는 Redis/Pinecone 같은 외부 벡터 DB
  • LLM / Inference Profile
    • 검색된 문서 조각을 바탕으로 “답변”을 만들어주는 모델
    • 예: global.anthropic.claude-sonnet-4-20250514-v1:0 같은 inference profile ID

2. 사전 준비 사항 (Root User vs IAM User 분리)

AWS에서 Bedrock 지식 기반을 쓰기 전에,
루트 계정으로 한 번만 할 일IAM 사용자로 계속 할 일을 분리해 두면 운영이 진짜 편해져요.

루트 계정으로는 지식 기반 Bedrock 기능을 사용 할 수 없습니다!


2-1. Root User(루트 계정)로 “한 번만” 할 일

루트 계정은 결제·보안·최초 설정용으로만 쓰는 게 베스트 프랙티스입니다.
실제 Bedrock 작업은 전부 IAM 사용자/역할로 하는 걸 권장합니다.

1) 결제/리전 확인

  • Bedrock, OpenSearch Serverless, S3에서 요금이 발생할 수 있어요.
  • 결제 수단 등록 + 예산/청구 알림 설정(가능하면 꼭)
  • 사용할 리전(예: ap-northeast-2, Seoul)을 미리 정해두기

2) 관리자용 IAM 사용자(또는 IAM Identity Center) 만들기

  • 루트 계정을 매일 쓰지 않기 위해 “관리자 계정”을 만들어요.
  • 예: AdministratorAccess 권한 부여
  • MFA(다중 인증) 설정도 추천

3) 루트 계정은 최소 사용 원칙

  • 루트로 하는 일:
    • 비밀번호/MFA 관리
    • 결제/계정 관련 작업
  • 그 외 Bedrock/리소스 작업은 IAM 사용자로만 진행

➡️ 여기까지는 “계정 만들고 한 번만” 하면 됩니다.


2-2. IAM User(관리자/개발자)로 “실제 작업”하기

이제부터가 진짜 Bedrock 지식 기반 만드는 단계예요.

2-2-1. 권한 구분(운영이 편해지는 방식)

  • 관리자(Admin)
    • S3, OpenSearch, IAM Role, Knowledge Base 생성·설정 담당
  • 개발자(Developer)
    • 만들어진 지식 기반을 질의/테스트/API 호출 담당

처음에는 “관리자 / 개발자” 2개로만 나눠도 충분합니다.


2-2-2. 관리자 IAM 사용자로 할 일 (세팅 담당)

1) 사용 리전 확정

  • Bedrock + 사용할 모델이 지원되는 리전을 확인하고 통일
  • 예: ap-northeast-2 (Seoul)

2) Bedrock 모델 사용 허용(Access 요청/Enable)

  • Bedrock 콘솔에서 사용할 모델(Claude, Titan 등)을 “사용 가능” 상태로 설정
  • 관리자 계정 권한(초기 편의상 넓게):
    • bedrock:* (초기에는 편함, 운영 안정화 후 최소 권한으로 줄이기 권장)

3) 데이터 소스(S3) 준비

  • PDF/문서/이미지 등을 담을 전용 S3 버킷 준비

  • 참고: S3생성 및 권한 설정 블로그

  • 폴더 구조 예시

    • raw/ : 원본 PDF/이미지
    • processed/ : 정리된 텍스트/Markdown
    • kb/ : 지식 기반이 실제로 읽을 경로
      • 예: kb/textbook/middle/grade1/
  • S3 권한(최소)

    • s3:ListBucket, s3:GetObject, s3:PutObject

4) 벡터 스토어(OpenSearch Serverless) 준비(선택)

  • Bedrock이 자동으로 만들게 할 수도 있고,
  • 직접 만든 OpenSearch Serverless 컬렉션을 연결할 수도 있어요.
  • 필요 권한 예:
    • aoss:* 또는
      • aoss:CreateCollection, aoss:BatchGetCollection
      • aoss:UpdateAccessPolicy, aoss:CreateIndex

5) 지식 기반용 IAM Role 생성

  • Bedrock이 S3/벡터스토어에 접근하려면 서비스 역할(Role)이 필요해요.
  • Trust Policy에 bedrock.amazonaws.com 허용
  • Permission Policy 예:
    • S3 읽기(s3:GetObject, s3:ListBucket)
    • OpenSearch Serverless 접근 권한
  • 콘솔에서 “새 역할 생성”으로 자동 생성해도 OK

2-2-3. 개발자 IAM 사용자로 할 일 (사용/호출 담당)

1) Bedrock 지식 기반 접근 권한

  • 최소 권한 예:
    • bedrock:ListKnowledgeBases, bedrock:GetKnowledgeBase
    • bedrock:Retrieve, bedrock:RetrieveAndGenerate
    • (필요 시) 모델 호출 bedrock:InvokeModel
  • 출처 문서를 S3에서 직접 열어야 하면:
    • 해당 버킷 s3:GetObject

2) 콘솔에서 Knowledge Base 생성 & Sync

  • Bedrock 콘솔 → Knowledge basesCreate knowledge base
  • S3 경로 + IAM Role + 벡터 스토어(자동/수동) 선택
  • 생성 후 Sync 버튼을 눌러 문서 인덱싱(임베딩/저장)

3) 콘솔에서 Test knowledge base로 질의 테스트

  • “Test knowledge base”로 질문해보고
    • 답변이 나오는지
    • 출처(footnote)가 붙는지 확인

4) 코드에서 RetrieveAndGenerate 호출 준비

  • 로컬/서버에 AWS SDK 설치(boto3 등)
  • bedrock-agent-runtime 클라이언트로 호출
  • Access Key 또는 Role에 아래 권한이 있어야 정상 동작:
    • bedrock:RetrieveAndGenerate
    • bedrock:InvokeModel

2-3. 권장 권한 패턴 한 줄 요약

  • Root User
    • 결제/보안/계정 초기 설정만
  • Admin IAM
    • S3/OpenSearch/IAM Role/Knowledge Base 생성·설정
  • Dev IAM
    • 지식 기반 테스트 + API 호출(RetrieveAndGenerate) 위주

이렇게 나누면,

  • “루트 계정으로 실수”를 막고
  • 팀원마다 할 수 있는 범위를 명확히 나눌 수 있어요.

3. 데이터 소스(S3) 연결 & 동기화(Sync)

이번 파트는 “내 문서를 Bedrock 지식 기반이 읽게 만드는 과정”입니다.
핵심은 딱 2가지예요.

1) S3(데이터 소스)를 Knowledge Base에 연결
2) Sync(동기화)를 눌러서 인덱싱(Chunk → Embedding → Vector store 저장)

데이터 소스/형식 사전 조건 참고
https://docs.aws.amazon.com/ko_kr/bedrock/latest/userguide/knowledge-base-ds.html

BedRock 지식 기반 생성시 참고 블로그 : https://dobby-isfree.tistory.com/241


3-1. S3에 문서 업로드 준비

1) S3 버킷/폴더 구조(예시)

  • raw/ : 원본(그대로 보관)
  • processed/ : 전처리된 텍스트/마크다운(선택)
  • kb/ : 지식 기반이 읽을 “최종” 경로 (여기만 연결하는 걸 추천)

예:

  • s3://my-kb-bucket/kb/manual/
  • s3://my-kb-bucket/kb/textbook/middle/grade1/

2) 업로드

  • PDF, txt, md, html 등 문서를 kb/ 아래로 업로드합니다.

3) 주의(자주 막히는 포인트)

  • 파일명이 너무 길거나 특수문자가 많으면 관리가 어려워서,
    • 한글 파일명도 가능은 하지만, 문제나면 영문/숫자/언더바로 정리 추천
  • 같은 문서를 여러 번 올리면 “중복 chunk”가 생길 수 있으니
    • 폴더 버전(v1/, v2/)로 관리하면 좋습니다.

3-2. Knowledge Base 생성 시 S3 데이터 소스 연결

Bedrock 콘솔에서 아래 순서대로 진행합니다.

1) Bedrock 콘솔 접속

  • Amazon Bedrock → Knowledge basesCreate knowledge base

2) Knowledge Base 기본 설정

  • Name: my-kb 처럼 구분 가능한 이름
  • IAM role: (2장에서 만든 Bedrock 서비스 역할 선택)

3) Data source(데이터 소스)로 S3 선택

  • Data source type에서 Amazon S3 선택
  • S3 URI에 kb/ 경로를 정확히 입력
    예: s3://my-kb-bucket/kb/manual/

4) Embedding 모델 선택

  • 예: amazon.titan-embed-text-v1
    (문서 → 벡터로 바꿔서 검색 가능하게 만듦)

5) Vector store 선택

  • 대부분은 기본값(예: OpenSearch Serverless 자동 구성)으로 진행해도 OK
  • 이미 만들어둔 벡터 스토어가 있다면 선택해서 연결

6) Create

  • 생성 완료 후 Knowledge base 상세 화면으로 이동합니다.

3-3. 동기화(Sync)란 무엇이고, 언제 누르나?

Sync = “S3 문서를 읽어서 지식 기반에 반영하는 과정”입니다.

Sync를 누르면 내부적으로:

  • S3 문서 읽기
  • 문서를 chunk(조각) 로 나누기
  • 각 chunk를 임베딩(벡터화)
  • 벡터 스토어에 저장
  • 이후 질문이 들어오면, 관련 chunk를 검색해서 답변에 사용

즉, S3에 문서를 올렸다고 바로 반영되는 게 아니라, Sync를 해야 반영됩니다.


3-4. 최초 1회 Sync(인덱싱) 실행 방법

1) Bedrock 콘솔 → Knowledge base 선택
2) Data sources 탭 이동
3) 연결된 S3 데이터 소스 선택
4) Sync 버튼 클릭

확인할 것

  • Sync status가 In progress → Completed로 바뀌는지
  • 실패하면 Failed로 뜨면서 원인(권한/파일형식 등)이 나옵니다.

3-5. 문서 업데이트할 때 운영 방식(추천)

현업에서는 보통 아래처럼 운영합니다.

  • 새 문서 추가/수정/삭제 → S3 kb/ 경로에 반영
  • 변경 후 Sync 실행
  • 큰 업데이트는 폴더 버전으로 분리
    • kb/manual/v1/ (운영)
    • kb/manual/v2/ (준비)
  • 검증 완료 후 v2를 연결하거나, v1을 교체

3-6. Sync가 실패할 때 가장 흔한 원인 TOP 5

1) IAM Role 권한 문제

  • Bedrock 서비스 역할에 S3 읽기 권한이 부족함
    • s3:ListBucket, s3:GetObject 확인

2) S3 경로 오타

  • s3://bucket/kb/manual/ 처럼 prefix가 정확한지 확인

3) 지원하지 않는 파일 형식/손상된 파일

4) 리전(Region) 혼용

  • S3/Knowledge Base/벡터 스토어 리전이 섞이면 문제가 될 수 있어요.
  • 가능하면 같은 리전으로 통일 추천

5) 너무 큰 문서/너무 많은 문서

  • 처음엔 테스트용으로 파일 몇 개만 넣고 Sync 성공부터 확인한 뒤,
    점진적으로 전체 문서를 넣는 방식이 안전합니다.

3-7. (체크) Sync 이후 제대로 들어갔는지 확인

  • Bedrock 콘솔 → Knowledge base → Test knowledge base
  • “문서에 있는 문장을 그대로” 물어보기
  • 답변에 출처(footnote) 가 붙으면 정상적으로 검색이 되는 상태입니다.

4. 콘솔에서 테스트(지식 기반 Test knowledge base)

지식 기반을 만들고 Sync까지 완료했다면, 이제 콘솔에서 바로 질문을 던져서

  • 검색이 잘 되는지(문서를 제대로 찾는지)
  • 답변이 근거(출처)와 함께 나오는지
    를 확인할 수 있습니다.

아래 화면처럼 Amazon Bedrock → 지식 기반 → (내 Knowledge base 선택) → 지식 기반 테스트로 들어가면 됩니다.


4-1. 테스트 화면 구성(왼쪽: 설정 / 오른쪽: 대화)

테스트 화면은 크게 2부분입니다.

  • 왼쪽: 구성(설정)

    • 검색 방식 선택
    • 사용할 모델 선택(Claude 등)
    • 소스 청크(검색 결과 개수) 등 옵션 조정
  • 오른쪽: 테스트

    • 질문 입력
    • 답변 생성 결과 확인
    • 출처(원문) 확인

4-2. 꼭 선택해야 하는 옵션 (가장 많이 하는 실수 방지)

✅ (1) “검색 및 응답 생성” 선택

왼쪽 검색 및 응답 생성에서 아래 둘 중 반드시 이걸 선택합니다.

  • 검색 전용: 데이터 소스
    → 문서 검색 결과만 보여주고, 답변 생성은 안 함

  • 검색 및 응답 생성: 데이터 소스 및 모델
    검색 + LLM 답변 생성까지 한 번에 수행

📌 보통 우리가 원하는 건 “RAG 답변”이라서 검색 및 응답 생성이 맞습니다.

✅ (2) 모델(Model) 선택

캡처처럼 Claude 3.5 Sonnet 등 원하는 모델이 선택되어 있어야 합니다.
(모델 접근 허용이 안 되어 있으면 목록에 안 뜰 수 있음)


4-3. 질문 입력 & 실행

오른쪽 미리 보기(채팅 영역)에 질문을 입력합니다.

예:

  • 고려 건국 과정 설명해줘
  • 후삼국 통일 과정의 핵심 사건을 정리해줘

실행:

  • Enter: 전송/실행
  • Shift + Enter: 줄바꿈

4-4. “출처가 붙는지”로 성공 여부 판단하기

정상적으로 지식 기반이 동작하면 답변에 출처 표시(footnote / [1] 같은 번호) 가 뜹니다.
캡처에서도 답변 중간에 [1][2] 같은 형태로 출처가 붙는 걸 확인할 수 있습니다.

추가로 왼쪽 또는 하단의 소스 청크(Source chunk) 영역에서

  • 어떤 문서 조각이 검색되었는지
  • 그 조각이 답변에 어떻게 사용됐는지
    확인할 수 있습니다.

✅ 결론:

  • 답변이 나오고
  • 출처(각주)가 함께 붙는다
    Sync + 검색 + 생성이 정상 동작 중입니다.

4-5. 테스트가 이상할 때(짧은 체크)

  • 출처가 안 뜬다 → Sync가 안 되었거나, 검색 설정이 “검색 전용”으로 되어 있을 수 있음
  • 질문이 문서랑 상관없는 일반 답변만 나온다 → 관련 문서가 S3에 없거나, chunk로 잘 안 잘렸을 수 있음
  • 답변이 아예 안 나온다 → 모델 권한/리전/역할 권한(S3 읽기) 문제 가능성
profile
화이팅

0개의 댓글