목차

권한과 승인

모든 도구 호출에는 서로 독립된 여러 제한이 적용되며, 가장 엄격한 제한이 우선합니다. 어느 제한도 AI가 올바르게 행동하는 것에 의존하지 않습니다.

제한 계층

  1. 계정에서의 역할. 소유자와 관리자는 모든 것을 관리합니다. 멤버는 기기를 보고 AI 클라이언트를 연결할 수 있습니다. 맞춤 역할은 요청 승인이나 감사 로그 읽기 같은 개별 권한을 부여합니다. 그룹은 기기를 지정할 수 있으며, 그러면 그 그룹의 멤버만 해당 기기에 접근할 수 있습니다.
  2. 연결. 클라이언트를 승인할 때 스코프, 접근할 수 있는 기기, 정책을 선택합니다.
  3. 정책의 명령 규칙과 승인. 어떤 명령을 실행하고, 어떤 명령을 거부하고, 어떤 명령이 사람의 승인을 기다릴지 정합니다.
  4. 기기 자체의 상한(ceiling). 기기의 ceiling.toml은 어떤 정책도 그 기기에서 이를 넘어 허용할 수 없는 상한을 정합니다. 에이전트가 이를 로컬에서 적용하므로 게이트웨이조차 이 범위를 넘을 수 없습니다.
  5. 운영체제 계정. 명령은 에이전트나 SSH 연결이 사용하는 계정으로, 그 계정의 권한으로 실행됩니다.

정책

정책은 계정에 속하며, 연결마다 하나를 선택합니다. 정책에서 정하는 항목:

키제어 대상
shelloff, sandboxed(Linux에서는 Landlock, macOS에서는 Seatbelt) 또는 full. Windows에서는 off와 full만 있습니다.
files파일 도구가 사용할 수 있는 경로. 경로마다 읽기 전용 또는 읽기·쓰기를 지정하며, *는 전체입니다.
deny존재하지 않는 것처럼 보이게 할 경로(예: 키 파일).
gui화면 도구: off, observe 또는 act. 지정한 앱에만 적용할 수도 있습니다.
tunnel_targets포트 포워딩과 웹 공유가 접근할 수 있는 주소.
commands명령 규칙.
approval승인: 항상 승인이 필요한 도구, 승인하는 사람, 요청이 대기하는 시간.

모든 계정에는 두 가지 정책이 기본으로 들어 있습니다. full(셸과 파일 제한 없음, 화면 꺼짐)과 read-only(셸 없음, 파일 읽기 전용, 흔한 시크릿 파일 숨김, 화면 꺼짐)입니다. 화면 도구는 정책에서 켜지 않는 한 꺼져 있으며, 켜기 전에는 AI에게 목록조차 표시되지 않습니다.

명령 규칙

  • 셸 모드(기본값): 규칙은 패턴으로 명령과 일치 여부를 판단하며, 처음 일치한 규칙이 적용되고, 각 규칙은 allow, deny, approve, confirm 중 하나를 지정합니다. 다른 명령 안에 중첩된 명령($(…), sudo, bash -c, PowerShell -EncodedCommand)도 검사하며, 가장 엄격한 결과가 우선합니다. 셸은 매우 유연하기 때문에, 셸 모드 규칙은 보안 경계가 아니라 가드레일입니다.
  • 허용 목록 모드: 목록에 있는 프로그램만 셸 없이 직접 실행되므로, 이 목록은 확실한 경계가 됩니다. 이 모드에서는 셸 세션과 터미널을 사용할 수 없습니다.
  • 미리 준비된 규칙 세트: linux-readonly, windows-readonly, no-destructive, deploy.
  • 규칙은 게이트웨이가 검사하고, 기기의 에이전트가 다시 검사합니다.

LetKite는 정책과 관계없이 시스템을 지우는 명령(예: rm -rf /, mkfs, 원시 디스크에 쓰기)을 거부하고, 재부팅, 서비스 중지, 패키지 제거, 재귀 삭제 같은 고위험 명령에는 confirm=true를 요구합니다. AI는 확인하기 전에 정확한 명령을 여러분에게 보여 주도록 안내받습니다.

승인

명령 규칙이 approve를 지정하거나, 정책의 approval.tools에 도구가 포함되어 있으면 호출에 사람의 승인이 필요합니다. 승인을 요구할 수 있는 도구: exec, exec_many, shell_run, job_start, write_file, delete_path, copy_between_hosts, transfer_start, gui_act, tunnel_open, terminal_open, wake_node, wake_device.

  • 승인하는 사람: AI를 연결한 사람(소유자와 관리자도 가능), 관리자 중 누구나, 또는 요청한 사람이 아닌 다른 사람(이중 확인 원칙).
  • 승인 방법: 승인자는 이메일로 링크를 받으며, LetKite 웹 앱을 설치했다면 휴대폰 푸시 알림으로도 받습니다. 승인에는 패스키나 인증 앱 코드가 필요하고, 거부에는 필요하지 않습니다.
  • 요청한 그대로만: 승인은 하나의 요청, 즉 같은 도구, 기기, 인수에만 적용되며 한 번만 사용할 수 있습니다.
  • 만료: 기본 10분(정책에서 1분~24시간으로 설정). 연결당 동시에 대기할 수 있는 요청은 최대 20개입니다.

호출이 대기하는 동안 AI 클라이언트는 누구에게 언제까지 승인을 요청했는지 알려 주는 메시지를 받고, 이를 여러분에게 전하라는 안내를 받습니다. AI 클라이언트는 approval_wait 도구로 기다린 다음, 정확히 같은 인수로 호출을 다시 할 수 있습니다. 거부된 요청은 다시 시도해서는 안 됩니다.

기기의 상한

각 기기에는 그 기기의 관리자만 편집할 수 있는 로컬 파일이 있습니다. Linux와 macOS에서는 /etc/letkite/ceiling.toml, Windows에서는 %ProgramData%\letkite\ceiling.toml입니다. 이 파일은 그 기기에서 셸, 파일, 숨김 경로, 화면 접근, 포트 포워딩 등의 상한을 정합니다. 에이전트가 모든 요청을 이 파일과 대조하므로, 만에 하나 게이트웨이가 침해되더라도 최종 결정권은 기기 소유자에게 있습니다.