권한과 승인
모든 도구 호출에는 서로 독립된 여러 제한이 적용되며, 가장 엄격한 제한이 우선합니다. 어느 제한도 AI가 올바르게 행동하는 것에 의존하지 않습니다.
제한 계층
- 계정에서의 역할. 소유자와 관리자는 모든 것을 관리합니다. 멤버는 기기를 보고 AI 클라이언트를 연결할 수 있습니다. 맞춤 역할은 요청 승인이나 감사 로그 읽기 같은 개별 권한을 부여합니다. 그룹은 기기를 지정할 수 있으며, 그러면 그 그룹의 멤버만 해당 기기에 접근할 수 있습니다.
- 연결. 클라이언트를 승인할 때 스코프, 접근할 수 있는 기기, 정책을 선택합니다.
- 정책의 명령 규칙과 승인. 어떤 명령을 실행하고, 어떤 명령을 거부하고, 어떤 명령이 사람의 승인을 기다릴지 정합니다.
- 기기 자체의 상한(ceiling). 기기의
ceiling.toml은 어떤 정책도 그 기기에서 이를 넘어 허용할 수 없는 상한을 정합니다. 에이전트가 이를 로컬에서 적용하므로 게이트웨이조차 이 범위를 넘을 수 없습니다. - 운영체제 계정. 명령은 에이전트나 SSH 연결이 사용하는 계정으로, 그 계정의 권한으로 실행됩니다.
정책
정책은 계정에 속하며, 연결마다 하나를 선택합니다. 정책에서 정하는 항목:
| 키 | 제어 대상 |
|---|---|
shell | off, 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입니다. 이 파일은 그 기기에서 셸, 파일, 숨김 경로, 화면 접근, 포트 포워딩 등의 상한을 정합니다. 에이전트가 모든 요청을 이 파일과 대조하므로, 만에 하나 게이트웨이가 침해되더라도 최종 결정권은 기기 소유자에게 있습니다.