Skip to content
이 페이지는 AI의 도움으로 작성 및 번역되었습니다. 부정확한 내용이 있으면 개선에 참여해 주세요. GitHub에서 편집

승인 워크플로우 ​

도구의 보안 정책이 "supervised"로 설정되면 PRX는 실행을 일시 중지하고 도구 호출을 실행하기 전에 사람의 승인을 기다립니다. 이는 셸 명령, 파일 쓰기, 네트워크 요청 또는 되돌릴 수 없는 결과를 초래할 수 있는 모든 작업에 대한 중요한 안전 레이어를 제공합니다.

개요 ​

승인 워크플로우는 에이전트 루프와 도구 실행 사이에 위치합니다:

Agent Loop
    │
    ├── LLM emits tool call: shell("rm -rf /tmp/data")
    │
    ▼
┌───────────────────────────────────┐
│        Policy Engine              │
│                                   │
│  Tool: "shell"                    │
│  Policy: "supervised"             │
│  Action: REQUIRE APPROVAL         │
└───────────────┬───────────────────┘
                │
                ▼
┌───────────────────────────────────┐
│      Approval Request             │
│                                   │
│  Pending...                       │
│  ├── Notify supervisor            │
│  ├── Wait for response            │
│  └── Timeout after N seconds      │
└───────────────┬───────────────────┘
                │
         ┌──────┴──────┐
         │             │
    ┌────▼────┐   ┌────▼────┐
    │ Approved│   │ Denied  │
    │         │   │         │
    │ Execute │   │ Return  │
    │ tool    │   │ error   │
    └─────────┘   └─────────┘

설정 ​

도구 정책 설정 ​

config.toml에서 승인이 필요한 도구를 설정합니다:

toml
[security.tool_policy]
# 모든 도구의 기본 정책.
# "allow" -- 즉시 실행
# "deny" -- 실행 완전 차단
# "supervised" -- 실행 전 승인 필요
default = "allow"

# 도구별 정책 재정의.
[security.tool_policy.tools]
shell = "supervised"
file_write = "supervised"
http_request = "supervised"
git_operations = "allow"
memory_store = "allow"
browser = "deny"

# 그룹 수준 정책.
[security.tool_policy.groups]
sessions = "allow"
automation = "supervised"

승인 설정 ​

toml
[security.approval]
# 응답을 기다리는 타임아웃 (초).
timeout_secs = 300

# 승인 타임아웃 시 조치: "deny" 또는 "allow".
# "deny"가 안전한 기본값 -- 응답 없는 요청은 거부됩니다.
on_timeout = "deny"

# 승인 요청을 위한 알림 채널.
# 감독자에게 이 채널을 통해 알림이 전송됩니다.
notify_channel = "telegram"

# 감독자 사용자 ID 또는 식별자.
# 이 사용자만 요청을 승인하거나 거부할 수 있습니다.
supervisor_id = "admin"

# 자동 승인 패턴: 이 패턴과 일치하는 도구 호출은
# 사람의 개입 없이 자동으로 승인됩니다.
# 주의하여 사용하세요.
[[security.approval.auto_approve]]
tool = "shell"
command_pattern = "^(ls|cat|head|tail|wc|grep|find|echo) "

[[security.approval.auto_approve]]
tool = "file_write"
path_pattern = "^/tmp/"

승인 흐름 ​

단계 1: 정책 확인 ​

에이전트가 도구 호출을 발생시키면 정책 엔진이 평가합니다:

  1. 도구별 정책 확인 (security.tool_policy.tools.<name>)
  2. 도구별 정책이 없으면 그룹 정책 확인 (security.tool_policy.groups.<group>)
  3. 그룹 정책이 없으면 기본 정책 사용 (security.tool_policy.default)

해석된 정책이 "supervised"이면 승인 흐름이 트리거됩니다.

단계 2: 자동 승인 확인 ​

감독자에게 알리기 전에 PRX는 요청이 auto_approve 패턴과 일치하는지 확인합니다. 자동 승인 규칙은 정규식 패턴을 사용하여 도구 인수와 매칭합니다:

필드설명
tool규칙이 적용되는 도구명
command_pattern셸 명령에 대해 매칭되는 정규식 패턴 (shell 도구용)
path_pattern파일 경로에 대해 매칭되는 정규식 패턴 (file_write, file_read용)
url_patternURL에 대해 매칭되는 정규식 패턴 (http_request용)
args_pattern전체 JSON 인수에 대해 매칭되는 정규식 패턴

일치하는 항목이 발견되면 요청이 자동 승인되고 실행이 즉시 진행됩니다. 이는 과도한 승인 피로를 유발하는 안전한 읽기 전용 명령에 유용합니다.

단계 3: 알림 ​

자동 승인 규칙이 일치하지 않으면 PRX는 승인 요청을 생성하고 감독자에게 알립니다:

[APPROVAL REQUIRED]

Tool: shell
Arguments: {"command": "rm -rf /tmp/data"}
Session: abc-123
Agent: default
Time: 2026-03-21 14:30:22 UTC

Reply with:
  /approve -- execute the tool call
  /deny -- reject the tool call
  /deny reason: <explanation> -- reject with reason

알림은 설정된 notify_channel을 통해 전송됩니다. 지원되는 채널:

채널알림 방법
Telegram감독자의 채팅으로 메시지
Discord감독자에게 DM
Slack감독자에게 DM
CLI터미널 프롬프트 (stdin)
Email설정된 주소로 이메일
Webhook설정된 URL로 HTTP POST

단계 4: 대기 ​

감독자의 응답을 기다리는 동안 에이전트 루프가 일시 중지됩니다. 이 시간 동안:

  • 에이전트는 도구를 실행할 수 없습니다 (현재 도구 호출이 차단)
  • 다른 세션은 독립적으로 계속 운영됩니다
  • 승인 요청에는 추적을 위한 고유 ID가 있습니다

단계 5: 해결 ​

감독자는 다음 중 하나로 응답합니다:

응답효과
승인도구 호출이 정상적으로 실행되고 결과가 에이전트에 반환됩니다
거부도구 호출이 거부되고 에이전트에 오류 메시지가 반환됩니다
사유와 함께 거부거부와 동일하지만 에이전트가 적응할 수 있도록 오류 메시지에 사유가 포함됩니다
타임아웃on_timeout 조치가 적용됩니다 (기본값: deny)

요청 생명주기 ​

각 승인 요청은 다음 상태를 거칩니다:

PENDING → APPROVED → EXECUTED
       → DENIED
       → TIMED_OUT
       → CANCELLED (해결 전에 세션이 종료된 경우)
상태설명
PENDING감독자 응답 대기 중
APPROVED감독자가 승인, 도구 실행 중
EXECUTED승인 후 도구 실행 완료
DENIED감독자가 명시적으로 요청 거부
TIMED_OUTtimeout_secs 내에 응답 없음
CANCELLED해결 전에 세션 종료

승인 인터페이스 ​

CLI 모드에서는 승인 요청이 도구명, 인수, 위험 수준이 포함된 대화형 터미널 프롬프트로 나타납니다. 프로그래밍 방식 접근을 위해 PRX는 REST API를 노출합니다:

bash
# 대기 중인 요청 목록 / 승인 / 거부
curl http://localhost:8080/api/approvals?status=pending
curl -X POST http://localhost:8080/api/approvals/{id}/approve
curl -X POST http://localhost:8080/api/approvals/{id}/deny \
  -d '{"reason": "Not permitted"}'

감사 추적 ​

모든 승인 결정은 활동 로그에 기록됩니다. 필드: request_id, tool, arguments, session_id, decision, decided_by, decided_at, reason, execution_result. prx audit approvals --last 50으로 접근하거나 --format json으로 내보냅니다.

보안 참고 ​

  • 타임아웃 시 기본 거부 -- 프로덕션에서는 항상 on_timeout = "deny"를 설정하세요. 응답 없는 요청을 허용하면 감독의 목적이 무력화됩니다.
  • 자동 승인은 신중하게 -- 지나치게 넓은 자동 승인 패턴은 승인 워크플로우를 우회할 수 있습니다. 구체적인 정규식 패턴을 사용하고 정기적으로 검토하세요.
  • 감독자 인증 -- notify_channel이 감독자를 인증하는지 확인하세요. 손상된 알림 채널은 무단 승인을 허용할 수 있습니다.
  • 레이트 리밋 -- 에이전트가 동일한 작업에 대해 반복적으로 승인 요청을 트리거하면 해당 도구의 정책을 "deny"로 업데이트하거나 더 구체적인 자동 승인 규칙을 추가하는 것을 고려하세요.
  • 다중 감독자 -- 팀 배포에서는 여러 감독자를 설정하는 것을 고려하세요. 그 중 누구든 승인하거나 거부할 수 있습니다.

관련 페이지 ​

Released under the Apache-2.0 License.