보안

인터넷을 통해 실제 로봇을 원격 조작하는 일은 단순한 로그인 화면 이상을 요구합니다. 이 페이지는 인증과 역할이 어떻게 작동하는지, API 키를 어떻게 다루어야 하는지, 실시간 제어를 보호하는 장치는 무엇인지, 감사 추적에 무엇이 기록되는지, 취약점을 어떻게 신고하는지 설명합니다.

마지막 업데이트 2026-08-09

인증

계정은 이메일과 비밀번호, Google OAuth, GitHub OAuth를 통해 Supabase Auth가 관리합니다. 로그인 후에는 브라우저가 세션 토큰(JWT)을 보유하며, 플랫폼 미들웨어가 자동으로 갱신하므로 작업 중인 세션이 조용히 만료되지 않습니다.

API는 이 세션 토큰을 두 가지 형태로 받아들입니다. 대시보드가 어차피 보내는 세션 쿠키이거나, Authorization Bearer 헤더입니다. 브라우저 로그인 없는 프로그래밍 방식 접근은 아래에서 설명하는 API 키를 사용합니다. 엔드포인트는 유효한 자격 증명이 없는 요청을 거부합니다. 상태 확인이나 문의 양식처럼 명시적으로 공개된 경로만 인증 없이 동작합니다.

역할과 권한

모든 계정은 정확히 하나의 역할을 가집니다: CLIENT, OPERATOR, ADMIN. 클라이언트는 로봇을 소유하고 세션 비용을 지불하며, 오퍼레이터는 로봇을 제어하고 세션으로 수익을 얻으며, 관리자는 플랫폼을 운영합니다. 온보딩 중에는 클라이언트와 오퍼레이터 중에서 선택합니다. 관리자 역할은 플랫폼 관리자가 지정하며 스스로 선택할 수 없습니다.

기능CLIENTOPERATORADMIN
로봇 등록 및 관리YesNoYes
원격 조작 세션 시작 및 진행NoYesYes
세션 조회자신의 로봇에서자신의 세션전체
데이터셋과 내보내기YesNo전체
결제, 청구서, 결제 수단YesNo전체
수익과 정산금NoYes전체
인증 승인No요청만Yes
분쟁 해결제기만NoYes

역할 검사는 UI가 아니라 모든 요청에서 서버 측에서 이루어집니다. API 아래 단에서는 로우 레벨 보안 정책으로 데이터베이스 접근이 추가로 제한되어 있어, 엔드포인트에 버그가 있더라도 다른 계정의 행에 대한 무제한 접근으로 이어지지 않습니다.

API 키

API 키는 브라우저 로그인 없이 스크립트와 서버에 접근 권한을 부여합니다. /dashboard/settings에서 생성하고 폐기합니다. 키는 ayr_live_ 접두사를 가지며 Authorization Bearer 헤더로 전송됩니다. 키는 그것을 만든 계정의 역할과 권한 그대로 동작하므로, 유출된 키는 유출된 비밀번호와 정확히 같은 위험을 가집니다.

  • 키는 서버 측에만 보관하십시오. 클라이언트 측 JavaScript, 모바일 앱, 공개 저장소에는 들어가서는 안 됩니다.
  • 연동마다 별도의 키를 사용하십시오. 무언가 유출되었을 때 모든 것이 아니라 하나의 소비자만 폐기하고 싶을 것입니다.
  • 다운타임 없이 로테이션하십시오. 대체 키를 먼저 만들고 배포한 뒤, /dashboard/settings에서 기존 키를 폐기하십시오.
  • 조금이라도 의심스러우면 즉시 폐기하십시오. 새 키를 만드는 데는 몇 초면 충분하지만, 유효한 키를 가진 공격자는 사용자의 계정이 할 수 있는 무엇이든 할 수 있습니다.

실시간 제어 중의 보호 장치

실시간 제어는 세션 리스에 묶여 있습니다. 로봇은 정확히 하나의 ACTIVE 세션 중일 때만, 그리고 그 세션을 보유한 오퍼레이터로부터 오는 명령만 받아들입니다. 다른 모든 사람에게는 로봇이 IN_SESSION으로 표시됩니다. 한 오퍼레이터는 한 번에 최대 하나의 ACTIVE 또는 PAUSED 세션만 보유할 수 있어, 한 사람이 명목상 두 대의 암을 동시에 제어하는 상황을 막습니다.

콕핏에는 암을 즉시 멈추는 비상 정지가 있으며, 세션을 일시정지하거나 종료하면 명령 흐름 전체가 멈춥니다. 그 위에, 플랫폼은 오퍼레이터 활동을 감시합니다. 입력이 일정 시간 없으면 비활동 경고가 전송되고, 오퍼레이터가 계속 비활동 상태라면 세션이 자동으로 중단됩니다. 이는 양쪽 모두를 보호합니다. 클라이언트는 유휴 시간에 대한 비용을 내지 않도록, 로봇은 살아 있는 리스를 가진 채 제어 불가능한 상태로 남겨지지 않도록 말입니다.

감사 추적

모든 세션은 이벤트 로그를 유지합니다. 시작과 종료, 일시정지와 재개, 활동 점검, 비활동 경고, 오퍼레이터 전환, 연장 요청, 오류까지 각각 타임스탬프와 함께 기록됩니다. 분쟁이 검토될 때 이 이벤트 로그가 주된 증거가 되며, 이는 플랫폼이 누군가의 기억에 의존하지 않고 자동으로 기록하는 또 하나의 이유입니다.

세션을 넘어, 중요한 플랫폼 작업은 실행한 사용자 id, 작업 내용, 영향을 받은 리소스, 메타데이터와 함께 감사 로그에 기록됩니다. 프로필 변경, 결제 관련 거래, 관리자 작업 모두 기록을 남깁니다. 감사 기록은 플랫폼이 작성하며 사용자 인터페이스를 통해서는 편집할 수 없습니다.

암호화와 데이터 보호

플랫폼을 오가는 모든 트래픽은 영상 스트림과 제어 신호를 포함해 전송 중 TLS로 암호화됩니다. 데이터 계층에서는 로우 레벨 보안 정책이 계정별 데이터베이스 접근을 제한합니다. 결제 데이터는 그중에서도 가장 명확한 경계입니다. 카드와 은행 정보는 오직 Stripe만 다루며 AY-Robots 서버에는 전혀 닿지 않습니다.

취약점 신고

보안 문제를 발견했다면 /security 페이지나 /contact 양식의 Bug Report 카테고리를 통해 책임감 있게 신고하십시오. 무엇을 발견했는지, 어디서, 어떻게 재현하는지 포함하십시오. 문제를 입증하는 데 필요한 최소 범위를 넘어 다른 사용자의 데이터에 접근하지 마시고, 저희가 수정할 합리적인 기회를 갖기 전에 세부 내용을 공개하지 마십시오. 모든 신고를 읽습니다.

자주 묻는 질문

오퍼레이터가 제 결제 데이터를 볼 수 있나요?

아니요. 결제, 청구서, 결제 수단은 클라이언트 역할의 기능입니다. 사용자의 로봇에서 세션을 진행하는 오퍼레이터는 세션 컨텍스트만 볼 수 있을 뿐, 사용자의 계정이나 결제 데이터는 볼 수 없습니다.

세션 도중 연결이 끊기면 로봇은 어떻게 되나요?

연결이 끊기면 명령 흐름이 멈추고, 비활동 보호 장치가 작동합니다. 입력 없이 경고 기간이 지나면 세션이 자동으로 중단됩니다. 클라이언트는 그 중단 이후의 유휴 시간에 대해 청구되지 않습니다.

API 키를 안전하게 로테이션하려면 어떻게 하나요?

/dashboard/settings에서 새 키를 만들고, 연동을 그 키로 전환한 뒤 정상 동작을 확인하고, 이후 기존 키를 폐기하십시오. 이 순서를 지키면 다운타임이 없고 유효한 키가 없는 공백 구간도 생기지 않습니다.

제 결제 데이터는 AY-Robots 서버에 저장되나요?

아니요. 카드와 은행 정보는 곧바로 Stripe로 전달됩니다. 플랫폼은 Stripe 객체에 대한 참조만 저장하며 실제 결제 데이터는 저장하지 않습니다.