목차

Secret Vault

Secret Vault

AI Provider API 키와 서드파티 서비스 토큰(예: SendGrid, Telegram, SMTP)을 AiTalk 데이터베이스 대신 사용자의 AWS Lambda에 저장합니다. 활성화하면 키와 토큰이 런타임에 Lambda에서 직접 가져오며, 우리 서버에는 아무것도 저장되지 않습니다.


작동 방식

일반 모드:
  AiTalk 서버 ──(DB에서 API 키 조회)──→ OpenAI / Claude / 등

Secret Vault 모드:
  AiTalk 서버 ──(키 요청)──→ 사용자 AWS Lambda ──(키 반환)──→ AiTalk이 1회 사용 후
                                                               메모리에서 삭제

Secret Vault 활성화 시:

  • AI Provider API 키와 서드파티 서비스 토큰(SendGrid, Telegram, SMTP 등)은 사용자의 AWS Lambda 환경변수에만 저장됩니다
  • AiTalk은 런타임에 키와 토큰을 가져와서 API 호출에 사용한 후 즉시 삭제합니다
  • Lambda에 접근할 수 없으면 API 호출이 실패합니다 — 데이터베이스로 폴백하지 않습니다 (보안 설계)
  • OAuth 연결(예: Google Drive)은 항상 데이터베이스를 사용합니다 (자동 토큰 갱신 필요)

사전 요구사항

  • AWS 계정 (프리 티어로 충분)
  • AWS 콘솔 기본 사용법 숙지

비용: AWS Lambda는 월 100만 건 무료 요청을 포함합니다 (영구 프리 티어). 대부분의 사용자는 Secret Vault 비용이 월 $0입니다.


설정 가이드

1단계: AWS Lambda 함수 생성

  1. AWS Lambda 콘솔에 로그인합니다
  2. 함수 생성을 클릭합니다
  3. 새로 작성을 선택합니다
  4. 설정:
    • 함수 이름: aitalk-secret-vault (원하는 이름 사용 가능)
    • 런타임: Node.js 20.x
    • 아키텍처: x86_64
  5. 함수 생성을 클릭합니다

2단계: 템플릿 코드 배포

  1. AiTalk에서 설정 > 보안으로 이동합니다
  2. Lambda 템플릿 다운로드를 클릭하여 secret-vault-lambda.js 파일을 받습니다
  3. AWS Lambda 콘솔에서 코드 탭으로 이동합니다
  4. 기본 코드를 다운로드한 템플릿의 내용으로 교체합니다
  5. Deploy를 클릭합니다

3단계: 함수 URL 활성화

  1. 구성 탭 → 함수 URL로 이동합니다
  2. 함수 URL 생성을 클릭합니다
  3. 인증 유형: NONE (인증은 Bearer 토큰으로 처리)
  4. 저장을 클릭합니다

중요: "권한 누락" 경고

저장 후 다음과 같은 경고가 나타날 수 있습니다: "Your function URL auth type is NONE, but is missing permissions required for public access."

해결 방법:

  1. 함수 URL 페이지에서 Edit 클릭
  2. 아래로 스크롤하여 View policy statement 확인 — 정책에 lambda:InvokeFunctionUrl과 lambda:InvokeFunction이 Principal: "*"로 포함되어 있는지 확인
  3. 다시 Save 클릭
  4. 경고가 다음으로 변경되어야 합니다: "Your function URL is public. Anyone with the URL can access your function."

이것은 정상입니다 — 보안은 AWS IAM이 아닌 Lambda 코드의 Bearer 토큰으로 처리됩니다.

  1. 생성된 함수 URL을 복사합니다 (예: https://xxxxxxxxxx.lambda-url.eu-west-1.on.aws/)

4단계: 시크릿을 환경변수로 추가

  1. 구성 탭 → 환경 변수로 이동합니다
  2. 편집을 클릭합니다
  3. AiTalk 설정의 Vault 키 참조 테이블에 표시된 정확한 키 이름으로 시크릿을 추가합니다:
키 이름값설명
AUTH_TOKEN(5단계에서 생성)인증 토큰
ai_provider_openai_api_keysk-xxxxxxxx...OpenAI API 키
ai_provider_anthropic_api_keysk-ant-xxxxxxxx...Claude API 키
ai_provider_google_api_keyAIzaxxxxxxxx...Gemini API 키
wf_conn_{connectionId}_token(사용자 토큰)Workflow 연결 토큰
bot_channel_{channelId}_token(사용자 토큰)Bot 채널 토큰

Workflow 연결 및 Bot 채널의 정확한 키 이름은 설정 > 보안 > Vault 키 참조에서 확인할 수 있습니다.

  1. 저장을 클릭합니다

5단계: AiTalk을 Lambda에 연결

  1. AiTalk에서 설정 > 보안으로 이동합니다
  2. Lambda 함수 URL을 붙여넣습니다
  3. 새 토큰 생성을 클릭하고 토큰을 복사합니다
  4. Lambda 환경 변수로 돌아가서 AUTH_TOKEN을 이 토큰으로 설정합니다
  5. 연결 테스트를 클릭하여 확인합니다
  6. 저장 및 활성화를 클릭합니다

Vault 키 참조

Lambda 환경변수에 사용하는 키 이름은 정확히 일치해야 합니다. 모든 키 이름은 설정 > 보안 > Vault 키 참조에서 확인할 수 있습니다.

AI Provider 키

Provider키 이름
OpenAIai_provider_openai_api_key
Anthropic (Claude)ai_provider_anthropic_api_key
Google (Gemini)ai_provider_google_api_key
DeepSeekai_provider_deepseek_api_key
Grokai_provider_grok_api_key

Workflow 연결 토큰

형식: wf_conn_{connectionId}_token

예시:

  • wf_conn_cm1abc123def_token (Telegram 연결)
  • wf_conn_cm2xyz789ghi_token (SendGrid 연결)

Bot 채널 토큰

형식: bot_channel_{channelId}_token

Slack 봇의 경우 두 개의 키가 필요합니다:

  • bot_channel_{channelId}_slack_bot_token
  • bot_channel_{channelId}_slack_signing_secret

Secret Vault 비활성화

  1. 설정 > 보안으로 이동합니다
  2. 비활성화를 클릭합니다
  3. AiTalk이 데이터베이스에 저장된 암호화 키를 다시 사용합니다

Vault 활성화 시 데이터베이스에 저장된 키는 삭제되지 않으므로, 언제든 다시 전환할 수 있습니다.


문제 해결

문제해결 방법
테스트 시 "연결 실패"Lambda 함수 URL이 올바르고 함수가 배포되었는지 확인하세요
"Unauthorized" 오류Lambda의 AUTH_TOKEN이 AiTalk의 토큰과 일치하는지 확인하세요
"키를 찾을 수 없음" 오류Lambda 환경변수의 키 이름이 정확히 일치하는지 확인하세요 (대소문자 구분)
활성화 후 AI 채팅 안 됨Lambda에 필요한 모든 API 키 환경변수가 설정되었는지 확인하세요
활성화 후 Workflow 실패Lambda에 모든 Workflow 연결 토큰이 추가되었는지 확인하세요

보안 참고사항

  • Bearer 토큰이 AiTalk과 Lambda 간의 요청을 인증합니다
  • 사용자의 AWS 계정만 Lambda 환경변수에 접근할 수 있습니다
  • AiTalk은 Lambda에서 가져온 시크릿을 저장, 기록 또는 캐시하지 않습니다
  • 최대 보안을 위해 AWS IAM 정책으로 Lambda 접근을 제한하세요