보안 개요
무엇을 막고 무엇을 막지 않는지 그대로 적습니다.
도입을 검토하는 분을 위한 짧은 개요입니다. 보안·IRB 검토에 쓸 전체 문서는 첫 설치를 마친 뒤에 공개합니다.
아직 출시 전이고, 실제 운영 설치에서 확인한 적은 없습니다. 아래 주요 규칙은 개발 장비에서 자동 시험으로 확인합니다. 몇 가지는 맨 아래에 적었듯 설계와 설정 검사에 기댑니다.
한눈에
막는 것
- 작업공간에는 고른 데이터 가운데 볼 수 있는 파일만, 읽기 전용으로 들어갑니다.
- 작업공간은 관리자가 정한 곳으로만 프록시를 거쳐 나가고, 다른 작업공간과 포털에는 닿지 않습니다.
- 작업공간에는 데이터베이스나 저장소의 자격 증명이 없습니다.
- 에이전트가 데이터를 더하거나 결과를 내보내려면 연구자가 승인해야 실행됩니다.
- 결과는 쓴 데이터를 모두 볼 수 있는 사람에게만 보입니다.
막지 않는 것
- 에이전트가 읽은 내용은 연구자 본인의 Claude 계정으로 모델 제공사(Anthropic)에 전송됩니다.
- 연구자는 볼 수 있는 파일을 편집기에서 내려받을 수 있습니다. 기록은 남습니다.
- 관리자가 SSH를 허용한 사람은 파일을 대량으로 가져갈 수 있고, 이 제품은 SSH 접속과 전송을 기록하지 않습니다.
- 관리자는 모든 데이터와 결과, 저장된 작업 폴더(에이전트와 나눈 대화 기록 포함)를 볼 수 있습니다.
- 서버의 root 권한을 가진 사람은 믿는 것으로 봅니다.
막으려는 것: 에이전트의 실수와, 에이전트를 속이는 지시
사용자는 기관의 연구원이라고 봅니다. 위험은 악의 없는 에이전트가 실수하거나, 읽은 문서에 숨은 지시에 넘어가는 것입니다.
그래서 망, 자격 증명, 마운트(작업공간에 보이는 폴더)를 작업공간 밖에서 통제합니다. 사람은 믿고 에이전트는 울타리 안에 둡니다. 연구자는 작업하는 파일을 보고 가져갈 수 있고, 에이전트는 닿는 범위가 좁습니다.
에이전트가 읽고 쓰는 내용은 검사하지 않습니다. 통제하는 것은 에이전트가 닿을 수 있는 범위입니다.
한 설치는 한 기관의 것이고, 아무나 가입하는 서비스가 아닙니다. 기관끼리 설치를 함께 쓰지 않습니다.
데이터 접근
작업공간에는 그 사람이 볼 수 있고 그 작업공간에 고른 파일만 있습니다.
- 작업공간의
/data에는 고른 데이터 가운데 주인이 볼 수 있는 파일만, 읽기 전용으로 있습니다. 원본은 복사하지 않습니다. - 볼 수 없는 데이터를 찾으면 목록, 미리 보기, 요청 어디서나 없는 데이터와 똑같은 답이 돌아옵니다.
- 권한을 바꾸면 켜져 있는 작업공간에도 바로 반영됩니다.
- 작업공간이 한 번이라도 볼 수 있었던 데이터는 기록에 남고, 이 기록은 줄지 않습니다. 권한을 거둬도 그 작업공간의 결과는 계속 제한됩니다.
- 권한에 「거부」 규칙은 없습니다. 숨길 데이터는 따로 폴더나 파생 테이블로 나눕니다.
- 데이터를 빼도 지난 결과를 다시 만들 수 있게 이전 기록은 남습니다. 법적 파기 의무를 위한 별도 승인 파기 절차는 계획되어 있습니다.
망
작업공간은 인터넷에 바로 나갈 수 없습니다. 관리자가 그 작업공간에 열어 둔 곳으로만 프록시를 거쳐 나갑니다. 기본은 Claude와 패키지 저장소입니다.
- 작업공간마다 따로 내부망이 있고, 그 망에는 서버 주소가 없어 바깥으로 바로 나가는 길이 없습니다.
- 바깥 연결은 프록시 하나를 거치고, 관리자가 작업공간마다 정한 규칙만 통과합니다. 바꾸면 바로 적용되고, 바꾼 기록이 남습니다.
- 작업공간은 바깥 이름(DNS)을 직접 찾지 못합니다. 이름은 프록시가 찾습니다.
- 어떤 규칙으로도(완전 개방 포함) 다른 작업공간, 게이트웨이, 포털과 IDE 주소에 닿지 않습니다.
- 작업공간이 시스템에 닿는 길은 하나입니다: 그 작업공간에 대한 요청만 받는 게이트웨이의 작업공간 입구. 작업공간은 요청이 온 망 주소로 가리므로 작업공간 안에 비밀값이 없습니다.
- 사내망은 관리자가 완전 개방이나 사내망 규칙을 골라야 열리고, 이 서버의 다른 포트는 관리자가 주소를 직접 적어야 열립니다.
- 망을 잇는 서비스는 패킷을 넘겨주지 않으므로, 작업공간 안에서 root가 되어도 프록시를 돌아 나갈 수 없습니다.
- 작업공간마다 웹 주소(출처)가 따로라, 한 작업공간에서 연 페이지가 다른 작업공간이나 포털을 쓸 수 없습니다.
- 작업공간마다 최근 접속(허용·막힘)을 볼 수 있습니다. 프록시의 최근 기록이라 오래 보관하는 기록은 아닙니다.
자격 증명
작업공간에는 Claude 토큰 말고는 다른 시스템에 들어갈 자격 증명이 없습니다.
- 작업공간에는 데이터베이스나 저장소의 자격 증명이 없고, 포털에 들어갈 자격 증명도 없습니다.
- Claude 토큰은 작업 폴더 밖의 읽기 전용 파일로 들어가고, Claude를 시작할 때 Claude 프로세스에 넘겨집니다. 작업 환경 설정, IDE와 터미널 환경, 작업 폴더, 저장된 작업 환경에는 남지 않습니다.
- 토큰 파일은 작업공간 안에서 연구자 권한으로 읽을 수 있습니다. 에이전트의 파일 읽기 도구는 이 파일을 읽지 못하게 막아 두었지만, 에이전트가 실행하는 명령까지 막지는 못합니다.
- 데이터, 비밀 파일, 에이전트 규칙은 읽기 전용으로 붙어 있어, 작업공간 안에서 root가 되어도 고칠 수 없습니다. 프로세스는 root가 아닌 사용자로 돌고, 특권 모드와 Docker 소켓은 없습니다.
- 저장한 Claude 토큰과 OTP 비밀값은 암호화되어 있습니다. API 토큰은 해시로만 저장합니다.
사람의 승인
에이전트가 데이터를 더하거나 결과를 내보내려면 요청만 할 수 있고, 연구자가 승인해야 실행됩니다.
- 승인한 명령은 요청한 그대로, 작업공간 주인 이름으로 한 번만 실행됩니다. 요청 뒤 파일이 바뀌면 실행하지 않습니다.
- 승인은 서버가 지키므로 에이전트가 건너뛸 수 없습니다.
- 작업공간 안에서는 주인이 관리자여도 관리자 권한이 없고, 다른 작업공간의 요청은 보이지 않습니다.
- 작업공간마다 기다릴 수 있는 요청은 기본 10개까지입니다.
- 승인이 필요한 것은 이 두 가지뿐입니다. 코드 실행,
/data읽기, 허용된 인터넷 주소를 쓰는 일에는 승인이 필요 없습니다.
결과
결과는 그 작업공간이 본 데이터를 모두 볼 수 있는 사람에게만 보입니다.
- 그래서 CT 영상과 진료 기록으로 만든 모델이 진료 기록만 볼 수 있는 사람에게 보이지 않습니다.
- 원본 권한이 바뀌면 다시 계산하고, 이전 값을 이력으로 남깁니다. 권한을 거두면 공유 링크도 바로 막힙니다.
- 공유 링크는 주소일 뿐입니다. 열 때마다 권한을 확인하고, 같은 설치에 계정이 있는 사람만 열 수 있습니다.
- 볼 수 있는 사람을 넓히려면 관리자가 사유를 적어야 하고, 그 결정은 기록됩니다.
- 결과 출처 그림에서 보는 사람이 볼 수 없는 원본은 이름 없이 나옵니다.
- 내보내기 전에 결과 파일을 검사합니다. 심볼릭 링크, 특수 파일, 작업 폴더 밖의 경로는 내보내지 않습니다.
로그인
로그인에 OTP 앱 코드를 요구할 수 있고, 인터넷에 공개하면 모든 계정에 요구합니다.
- 코드는 비밀번호가 맞을 때만 묻고, 시도 횟수를 제한하고, 한 번 쓴 코드는 다시 받지 않습니다.
- OTP 앱을 등록한 계정은 SSH 키와 API 토큰을 만들 때 10분 안에 넣은 코드가 필요합니다. API 토큰은 기본으로 인터넷 쪽에서 받지 않습니다.
- 세션은 최대 12시간이고, 60분 동안 쓰지 않으면 끝납니다.
- HTTPS를 지원하고, 인터넷에 공개할 때와 OTP 앱을 등록할 때는 필수입니다. 인터넷 공개는 서버 포트를 열지 않고 터널로 받습니다.
- SSH는 관리자가 사람마다 허용하고, 비밀번호 없이 등록한 키로만 들어갑니다.
- 통합 로그인(SSO)은 계획되어 있습니다.
기록
감사 기록은 지울 수 없게 설계되어 있습니다. 데이터베이스가 추가만 받습니다.
- 남는 것
- 로그인, 화면·API·작업공간에서 실행한 명령(거절된 것 포함), 작업공간과 결과 열기, 결과 미리 보기와 내려받기, 편집기의 파일 전송, 권한 변경과 넓히기.
- 남지 않는 것
- 터미널 화면 내용. SSH 접속과 전송(OpenSSH 자체 기록에만 남습니다). 에이전트가 모델 API로 보낸 내용.
누가 어떤 데이터를 어느 작업공간에서 썼는지, 무엇을 내보냈고 누가 볼 수 있었는지가 기록으로 남아 기관의 보안·IRB 검토에 쓸 수 있습니다. 규정 준수 여부는 기관이 판단합니다.
밖으로 나갈 수 있는 길
원본 데이터는 기관 서버에 있습니다. 밖으로 나갈 수 있는 길은 네 가지로 정해져 있습니다.
- 모델 제공사
- 에이전트가 읽은 내용은 연구자 본인의 Claude 계정으로 Anthropic의 API에 전송됩니다. 데이터 처리 조건은 각자의 계정 설정을 따르고, 기관이 강제할 수 없습니다. 보낸 내용은 이 제품이 기록하지 않습니다.
- 편집기에서 내려받기
- 연구자는 볼 수 있는 파일을 웹 편집기에서 보고 내려받을 수 있습니다. 편집기를 통한 파일 전송은 기록됩니다.
- SSH
- 관리자가 사람마다 허용합니다. 허용하면 scp, sftp로 대량으로 가져갈 수 있습니다. SSH 접속과 전송은 OpenSSH 자체 기록에만 남고, 이 제품은 기록하지 않습니다.
- 내보낸 결과
- 볼 권한이 있는 사람이 열고 내려받습니다. 열람과 내려받기는 기록됩니다.
막지 않는 것
아래는 이 제품이 막지 않거나, 기관과 서버 운영자에게 맡기는 것입니다.
- 관리자는 기관의 모든 데이터와 결과를 볼 수 있고, 결과와 함께 저장된 작업 폴더와 작업 환경(에이전트와 나눈 대화 기록 포함)도 열 수 있습니다.
- 연구자는 작업공간 안에서 sudo를 쓸 수 있습니다. 데이터, 망, 비밀 파일, 에이전트 규칙은 바깥에서 막혀 있어 바뀌지 않습니다.
- 서버의 root 권한을 가진 사람은 믿는 것으로 봅니다. 감사 기록은 데이터베이스가 추가만 받게 막지만, root는 파일 자체를 바꿀 수 있습니다.
- 에이전트가 규칙을 따르는지는 강제하지 않고, 데이터 내용을 검사하지 않습니다. 비식별화나 개인정보 탐지는 하지 않습니다. 비식별 데이터는 관리자가 파생 테이블로 만듭니다.
- 디스크 암호화와 백업은 서버 운영자가 정합니다. 제품 기능이 아닙니다.
- 받은 인증은 없습니다. 규정 준수 여부는 기관이 판단합니다.
- 법적 파기 절차는 아직 만들지 않았습니다.
주요 규칙은 자동 시험으로 확인합니다
이 페이지의 주요 규칙은 자동 시험으로 확인합니다. 작업공간, 망, 마운트 규칙은 실제 컨테이너를 띄워 시험합니다.
시험하는 것의 예
- 작업공간 안
/data의 목록이 고른 데이터와 권한으로 계산한 목록과 같은지 - 규칙에 없는 곳으로 나가는 연결과 바깥 이름 찾기가 막히는지, 규칙을 바꾸면 바로 적용되는지
- 완전 개방에서도 다른 작업공간, 게이트웨이, 포털에 닿지 않는지
- sudo로 root가 되어도
/data, 비밀 파일, 에이전트 규칙을 고칠 수 없는지 - 결과를 볼 수 있는 사람이 쓴 데이터 모두의 조건으로 계산되고, 권한을 거두면 링크도 바로 막히는지
- 승인한 명령이 한 번만, 요청한 파일 그대로일 때만 실행되는지
- Claude 토큰이 작업 폴더, 저장된 작업 환경, 작업 환경 설정에 남지 않는지
몇 가지는 설계와 설정 검사에 기댑니다. 저장할 때의 암호화, 데이터를 지우지 않는 것, HTTPS가 그렇습니다. GPU는 자동 시험이 아니라 개발 장비에서 직접 확인했습니다. 실제 운영 설치에서는 아직 확인하지 않았습니다.