검토를 맡은 분을 위해 쓴 글
고객 데이터를 어떻게 다루는지, 작동 방식 그대로
아래 각 절은 우리가 보안을 얼마나 중요하게 여기는지가 아니라 제품이 실제로 어떻게 동작하는지를 설명합니다. 공개된 문서가 뒷받침하는 문장은 그 문서를 가리킵니다.
이 페이지가 주장하지 않는 것. GetMyBot은 제3자 보안 인증을 보유하고 있지 않고, 가용성 약정을 공개하지 않으며, 규제 준수를 주장하지 않습니다. 검토 절차에 그중 하나가 필요하다면 플랫폼 위에 무언가를 만들기 전에 어떤 것이 필요한지 알려 주세요.
누가 무엇을 볼 수 있는가
격리는 애플리케이션에서 처리하며, 그렇게 밝힙니다
봇을 지정하는 모든 요청은 핸들러가 실행되기 전에 호출자가 그 봇에 대해 가진 접근 권한을 확인합니다. 이 검사는 애플리케이션 계층에 있습니다. 행 수준 보안 정책은 데이터베이스 스키마에 존재하지만 런타임에는 적용되지 않으며, 이 사실은 짐작이 아니라 우리에게서 들으셔야 합니다.
- 접근 권한은 요청마다 확인합니다
- 주소에 담긴 봇은 실제로 접근 권한이 있는 계정과 대조되고, 확인된 접근 권한은 요청과 함께 이동합니다. 핸들러마다 다시 계산하지 않습니다.
- 남에게는 잘못된 id와 같은 응답
- 접근 권한이 전혀 없으면 404를 돌려주므로, 토큰으로 자기 계정 밖의 봇이 존재하는지 알아낼 수 없습니다. 접근 권한은 있지만 해당 권한이 없으면 403을 돌려줍니다.
- 권한은 계정이 아니라 봇 단위
- 삭제, 이전, 토큰 교체 같은 소유자 권한 작업은 봇 소유자에게 남고, 접근 목록을 통해 위임할 수 없습니다.
키를 어떻게 보관하는가
읽어야 하는 것은 암호화, 읽을 필요 없는 것은 해시
봇 토큰과 통합 자격 증명은 서비스가 반드시 사용해야 하는 비밀 값이라 암호화합니다. 비밀번호와 API 토큰은 다시 읽을 일이 없으므로 해시로 저장합니다.
- 저장 시 AES-256-GCM
- 봇 토큰과 통합 자격 증명은 AI 공급자 키를 포함해 데이터베이스에 닿기 전에 AES-256-GCM으로 암호화됩니다.
- 전송 구간은 TLS
- 앱과 웹사이트, 우리 서버 사이의 모든 트래픽은 TLS로 오갑니다. 공개된 개인정보 처리방침에도 그렇게 적혀 있습니다.
- 비밀번호는 해시, 2단계 인증 제공
- 계정 비밀번호는 argon2id 해시로 저장하며 읽을 수 있는 형태로 두지 않습니다. 시간 기반 일회용 비밀번호를 쓰는 2단계 인증을 계정에서 사용할 수 있습니다.
프롬프트는 어떻게 되는가
공급자는 고객의 것이고, 본문은 남기지 않습니다
AI 기능에는 늘 두 가지 질문이 따라옵니다. 누가 요청을 보는가, 그리고 그 뒤에 무엇이 기록되는가. 둘 다 답은 짧습니다.
- 공급자에 중립적인 라우팅
- 에이전트는 고객이 설정한 OpenAI 호환 엔드포인트에 고객의 키로 요청합니다. 그 주변 고객 여정 로직 중 특정 업체에 묶인 부분은 없습니다.
- 프롬프트와 답변은 해시로 저장
- 실행을 기록할 때 프롬프트와 답변은 내용의 SHA-256 해시와 크기로 축약됩니다. 본문 자체는 추적 기록에 남지 않고, 그것을 다시 읽어올 별도의 원본 저장소도 없습니다.
- 모델 학습에 사용하지 않습니다
- 개인정보 처리방침에 분명히 적혀 있습니다. 봇이 구독자와 주고받는 내용은 고객의 것이며, 서비스를 제공하기 위해서만 처리하고, 판매하지도 모델 학습에 쓰지도 않습니다.
나중에 확인할 수 있는 것
읽어도 유출이 되지 않는 기록
무슨 일이 있었는지 남기는 일은 그 기록을 안전하게 보관할 수 있는 만큼만 유용합니다. 그래서 가림 처리는 볼 때 씌우는 필터가 아니라 기록 자체의 일부입니다.
- 감사 기록에는 페이로드가 없습니다
- 감사 한 줄은 작업과 대상, 결과를 적습니다. 메타데이터에는 식별자와 종류, 개수가 들어가며 작업 대상의 내용은 결코 들어가지 않습니다.
- 자격 증명처럼 생긴 필드는 허용 목록 방식
- 외부 호출은 메서드와 주소, 상태, 소요 시간을 남기고, 액션은 이름과 인자 이름, 결과 종류를 남깁니다. 가림 처리기가 모르는 필드는 남기지 않고 버리므로, 낯선 이름을 붙였다고 비밀 값이 새지 않습니다.
- 원본 내용에는 드러낼 것이 없습니다
- 내용은 들어오는 길에 가려지므로 나중에 풀 수 있는 원본 사본이 없습니다. 공개 엔드포인트는 이미 안전한 필드에 대한 접근을 통제하고 감사하며, 보관 등급이 허용하지 않으면 닫힌 상태로 둡니다.
얼마나 남고 어떻게 떠나는가
데이터를 가져가는 일은 기능이지 고객 문의가 아닙니다
보관 기간은 등급별로 정하며 그냥 쌓이게 두지 않습니다. 삭제의 각 단계 뒤에는 엔드포인트나 공개된 약속이 있습니다.
- 실행 기록은 일정에 따라 만료됩니다
- 기록된 실행에서 내용은 더 민감하고 더 짧게 남는 쪽입니다. 기본 7일이고, 실행 메타데이터는 등급에 따라 30일, 90일 또는 365일입니다. 내용이 메타데이터보다 오래 남는 일은 없습니다.
- 고객 한 명 단위 내보내기와 삭제
- 구독자 한 명의 데이터는 API로 내보내거나 삭제할 수 있고, 고객 데이터의 각 범주를 얼마나 보관할지는 고정된 숫자가 아니라 설정입니다.
- 법이 남기라는 것을 뺀 계정 삭제
- 자기 데이터의 사본이나 정정, 삭제를 요청할 수 있고, 공개된 방침은 30일 안에 답변하겠다고 약속합니다. 회계 규정이 요구하는 결제 기록은 보관됩니다.
전부보다 적게 내주기
토큰 하나는 계정 하나, 범위 한 묶음, 만료 하나
프로그램 접근은 전부 아니면 전무가 아닙니다. 단위는 범위이고, 토큰은 그 사람이 이미 할 수 있는 일을 넓히는 것이 아니라 좁힙니다.
- 읽기와 쓰기는 별개의 범위
- 범위는 리소스 하나에 액션 하나를 더한 것이라, 리포팅 통합에는 쓰기를 전혀 주지 않고 읽기만 부여할 수 있습니다. 범위가 없으면 403을 돌려줍니다.
- 토큰 하나, 계정 하나
- 토큰은 정확히 한 계정에서만 동작합니다. 다른 계정의 봇은 404를 돌려주며 이는 남에게 주는 응답과 같습니다. 그래서 토큰으로 범위 밖의 id를 뒤질 수 없습니다.
- 한 번만 보여 주고 해시로 저장
- 토큰 값은 생성할 때만 표시됩니다. 서버는 그 해시를 보관하므로 잃어버린 토큰은 복구가 아니라 재발급하며, 만료 시점도 생성할 때 정할 수 있습니다.
그 밖에 누가 다루는가
목록은 짧고, 이미 공개되어 있습니다
여기에는 개인정보 처리방침이 이름을 밝힌 것만 적습니다. 가리킬 문서가 없는 부분에 대해서는 안심시키는 말을 적기보다 아무 말도 하지 않습니다.
- 서비스는 유럽 연합에서 운영됩니다
- 개인정보 처리방침은 서비스와 그 데이터베이스가 유럽 연합에 있는 호스팅 사업자에서 운영된다고 밝히고 있습니다. 현재 두 번째 지역은 제공하지 않으며, 그렇게 주장하지도 않습니다.
- 이름을 밝힌 수탁사
- 분석과 크래시 리포트, 푸시 발송에는 Google을 사용합니다. 연결하는 채널에는 Telegram, Meta, VK가 있습니다. 유료 요금제 결제는 결제 대행사가 처리합니다. 웹사이트 분석은 Matomo와 Yandex Metrica로 이루어집니다.
검토에 필요한 답이 이 페이지에 없다면
질문을 보내 주세요. 구체적인 답변이나 솔직한 거절이, 감당할 수 있는 것보다 더 많은 것을 암시하는 페이지보다 양쪽 모두에게 유용합니다.
보안 관련 질문하기