Amazon S3
이 문서는 LibreChat의 파일 저장소 백엔드로 Amazon S3를 설정하는 방법에 대한 지침을 제공합니다.
Amazon S3는 LibreChat의 파일 저장 백엔드로 사용할 수 있는 확장 가능하고 안전한 객체 스토리지 서비스입니다. S3 버킷을 구성하려면 다음 단계를 따르세요.
1. AWS 계정을 생성하고 IAM 사용자를 구성합니다(또는 IRSA 사용)
옵션 A: 명시적 자격 증명을 사용하는 IAM 사용자 사용
-
AWS에 로그인:
- AWS Management Console을 열고 계정으로 로그인하세요.
-
IAM 사용자 생성 또는 기존 사용자 사용:
- IAM (Identity and Access Management) 섹션으로 이동합니다.
- **프로그래밍 방식 액세스(Programmatic Access)**를 사용하여 새 IAM 사용자를 생성하거나 기존 사용자를 선택하세요.
- 적절한 정책을 연결합니다(예:
AmazonS3FullAccess또는 제한된 S3 권한이 있는 사용자 지정 정책). - 사용자를 생성한 후, AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY를 받게 됩니다. 이를 안전하게 보관하세요.
옵션 B: Kubernetes에서 IRSA(IAM Roles for Service Accounts) 사용하기
Kubernetes(예: EKS)에 LibreChat을 배포하는 경우, IRSA를 사용하여 명시적인 자격 증명을 제공할 필요 없이 파드(pod)에 AWS 권한을 할당할 수 있습니다. IRSA를 사용하려면:
- **신뢰 정책(Trust Policy)**을 EKS 서비스 계정에 대해 생성하세요(아래 예시 참조):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::{AWS_ACCOUNT}:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/{EKS_OIDC}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.us-east-1.amazonaws.com/id/{EKS_OIDC}:sub": "system:serviceaccount:librechat:librechat", "oidc.eks.us-east-1.amazonaws.com/id/{EKS_OIDC}:aud": "sts.amazonaws.com" } } } ] } - 정책 생성(Create a Policy): 필요한 S3 권한을 부여합니다(아래 예시 참조).
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObjectAcl",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::my-example-librechat-bucket/*",
"arn:aws:s3:::my-example-librechat-bucket"
]
}
]
}- Kubernetes ServiceAccount에 주석(Annotate) 추가:
LibreChat 파드가 IRSA용으로 주석이 지정된 서비스 계정을 사용하도록 설정하십시오. 이렇게 하면 애플리케이션 내의 AWS SDK(업데이트된 S3 초기화 코드 사용)가 AWS 자격 증명을 위한 환경 변수 없이도 IRSA에서 제공하는 임시 자격 증명을 자동으로 사용하게 됩니다.
2. S3 버킷 생성
- S3 콘솔 열기:
- Amazon S3 콘솔로 이동하세요.
- 새 버킷 생성:
- **"Create bucket"**을 클릭하세요.
- 버킷 이름(Bucket Name): 고유한 이름을 입력하세요(예:
mylibrechatbucket). - Region: 사용자와 가장 가까운 AWS 리전을 선택하세요(예:
us-east-1또는eu-west-1). - 구성 옵션: 필요에 따라 다른 옵션을 설정한 다음, **"Create bucket"**을 클릭합니다.
3. 환경 변수 업데이트
IRSA를 사용하고 않는 경우, 프로젝트 루트 디렉터리의 .env 파일을 생성하거나 다음 구성으로 업데이트하세요:
AWS_ACCESS_KEY_ID=your_access_key_id
AWS_SECRET_ACCESS_KEY=your_secret_access_key
AWS_REGION=your_selected_region
AWS_BUCKET_NAME=your_bucket_name
AWS_ENDPOINT_URL=https://your_endpoint_url
# AWS_FORCE_PATH_STYLE=false- AWS_ACCESS_KEY_ID: IAM 사용자의 액세스 키입니다.
- AWS_SECRET_ACCESS_KEY: IAM 사용자의 시크릿 키입니다.
- AWS_REGION: S3 버킷이 위치한 AWS 리전입니다.
- AWS_BUCKET_NAME: 생성한 S3 버킷의 이름입니다.
- AWS_ENDPOINT_URL: (선택 사항) 사용자 지정 AWS endpoint URL입니다. MinIO, Cloudflare R2, Hetzner Object Storage, Backblaze B2, IDrive e2와 같은 S3 호환 서비스에 필요합니다.
https://a7g8.da.idrivee2-32.com과 같이 URL 스킴을 포함해야 합니다.http://또는https://가 없는 값은 파일 스트리밍 시Invalid URL오류를 일으킬 수 있습니다. - AWS_FORCE_PATH_STYLE: (선택 사항) 가상 호스팅 스타일(
bucket.endpoint/key) 대신 경로 스타일 URL(endpoint/bucket/key)을 요구하는 공급자를 위해true로 설정합니다. Hetzner Object Storage, MinIO 및 SSL 인증서가 버킷 하위 도메인을 포함하지 않는 유사한 공급자에 필요합니다. AWS S3나 Cloudflare R2에는 필요하지 않습니다. 기본값:false.
Kubernetes에서 IRSA를 사용하는 경우, 환경 변수에 AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY를 설정할 필요가 없습니다. AWS SDK는 포드(pod)에 할당된 서비스 계정을 통해 임시 자격 증명을 자동으로 획득합니다. AWS_REGION과 AWS_BUCKET_NAME은 여전히 제공해야 합니다.
4. LibreChat이 Amazon S3를 사용하도록 구성하기
LibreChat 구성 파일(librechat.yaml)을 업데이트하여 애플리케이션이 파일 처리에 Amazon S3를 사용하도록 지정하세요:
version: 1.3.11
cache: true
fileStrategy: 's3'시각적 자산에 대한 S3 presigned URL 만료
S3는 CDN을 통해 파일을 제공하지 않습니다. LibreChat은 presigned URL을 통해 S3 파일에 접근하며, 이는 구성 가능한 만료 시간(S3_URL_EXPIRY_SECONDS)을 가진 임시 서명 토큰입니다. AWS는 IAM 사용자 자격 증명의 경우 presigned URL의 수명을 최대 7일로 제한하며, 임시 자격 증명(IRSA와 같은 STS/IAM 역할)을 사용할 경우 몇 시간으로 제한합니다. URL이 만료되면 페이지를 새로 고쳐 새로운 URL이 생성되기 전까지 UI에서 해당 이미지나 아바타가 깨진 상태로 표시됩니다.
LibreChat의 새로고침 로직은 모든 시각적 영역에 일관되게 적용되지 않습니다. 예를 들어, 목록 스타일의 endpoint는 저장된 URL을 반환할 수 있는 반면, 상세 정보 endpoint는 이를 새로고침합니다. 이로 인해 모델 선택기 및 채팅 UI에서 아바타 이미지가 깨져 보이는 현상이 발생할 수 있습니다. 자세한 내용은 관련 논의를 참조하세요.
S3는 문서 저장(PDF, 텍스트 파일, 코드)에 적합하며, 수명이 짧은 사전 서명된(presigned) 다운로드 URL을 사용하는 경우에 알맞습니다. UI 전반에서 지속적으로 렌더링되어야 하는 이미지나 아바타의 경우, CloudFront with S3, Firebase를 사용하거나, 해당 유형만 CDN 기반 전략으로 라우팅하도록 fileStrategies를 구성하세요:
fileStrategies:
avatar: 'cloudfront'
image: 'cloudfront'
document: 's3'요약
- AWS 계정 및 IAM 사용자 생성 (또는 IRSA 구성):
- 전통적인 배포 방식의 경우, 프로그래밍 방식 액세스 권한을 가진 IAM 사용자를 생성하고 액세스 키를 발급받으세요.
- Kubernetes 배포(예: EKS)의 경우, IRSA를 설정하여 파드가 임시 자격 증명을 자동으로 획득하도록 하십시오.
- S3 버킷 생성:
- Amazon S3 콘솔을 사용하여 버킷을 생성하고, 고유한 이름과 리전을 선택하세요.
- 환경 변수 업데이트:
- IRSA를 사용하지 않는 경우:
.env파일에AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_REGION및AWS_BUCKET_NAME을 설정하세요. - IRSA의 경우:
AWS_REGION및AWS_BUCKET_NAME만 설정하고, 포드의 서비스 계정이 올바르게 주석(annotation) 처리되었는지 확인하세요.
- LibreChat 구성:
librechat.yaml설정 파일에서fileStrategy를"s3"로 설정하거나,fileStrategies를 사용하여 문서는 S3에 보관하면서 이미지와 아바타는 CloudFront를 통해 전송하도록 구성하세요.
이 단계를 거치면 LibreChat 애플리케이션이 Amazon S3를 사용하여 파일 업로드, 다운로드 및 삭제를 처리하게 됩니다. 또한, IRSA 지원을 통해 장기적인 AWS 자격 증명을 포함하지 않고도 Kubernetes에서 애플리케이션을 안전하게 실행할 수 있습니다.
참고
AWS 자격 증명을 항상 안전하게 유지하십시오. 공개 저장소에 커밋하지 마십시오. 필요에 따라 최소 권한 원칙을 따르도록 IAM 정책을 조정하십시오.
이 가이드는 어떤가요?