Skip to main content

openclaw policy

openclaw policy는 번들 Policy Plugin에서 제공합니다. 이는 기존 OpenClaw 설정 위에 적용되는 엔터프라이즈 적합성 계층이지, 두 번째 구성 시스템이 아닙니다. 요구 사항은 policy.jsonc에 작성하며, OpenClaw는 활성 워크스페이스를 증거로 관찰하고, Policy는 doctor --lint를 통해 드리프트를 보고합니다. Policy는 요청 시점에 도구 호출을 강제하거나 런타임 동작을 다시 작성하지 않으며, auth-profiles.json 같은 에이전트별 자격 증명 저장소를 증명하지도 않습니다. Policy는 구성된 채널, MCP 서버, 모델 제공자, 네트워크 SSRF 태세, 인그레스/채널 접근, Gateway 노출 및 Node 명령 태세, 에이전트 워크스페이스 접근, 샌드박스 태세, 데이터 처리 태세, 비밀 제공자/인증 프로필 태세, 관리 대상 도구 메타데이터(TOOLS.md)를 검사합니다. 워크스페이스에 “Telegram을 활성화해서는 안 됩니다” 또는 “관리 대상 도구는 위험 및 소유자 메타데이터를 선언해야 합니다”와 같이 지속적으로 검사할 수 있는 명세가 필요할 때 사용하십시오. 증명이나 드리프트 감지 없이 로컬 동작만 필요하다면 일반 구성으로 충분합니다.

빠른 시작

policy.jsonc가 없어도 Plugin은 활성화된 상태를 유지하므로, doctor가 검사를 조용히 건너뛰는 대신 누락된 아티팩트를 보고할 수 있습니다. policy.jsonc는 직접 작성해야 하며 현재 설정에서 생성되지 않습니다. 각 최상위 섹션은 규칙 네임스페이스입니다. 그 아래에 구체적인 규칙이 있을 때만 검사가 실행됩니다(지원되지 않는 섹션이나 키는 조용히 무시되지 않고 policy/policy-jsonc-invalid로 실패합니다). 지원되는 모든 섹션을 포함하는 최소 예시는 다음과 같습니다.
아래 규칙 표만으로는 명확하지 않은 공통 참고 사항은 다음과 같습니다.
  • 비-local loopback 바인딩을 거부하면서 gateway.bind를 생략하면 런타임 기본값을 수용한다는 의미입니다. 엄격한 적합성을 위해서는 gateway.bind: "loopback"을 설정하십시오.
  • 읽기 전용 에이전트의 경우 해당 기본값/에이전트에서 샌드박스 modeall 또는 non-main으로 설정하고 workspaceAccessnone 또는 ro로 설정하십시오. 샌드박스 모드가 누락되거나 off이면 읽기 전용 Policy를 충족하지 않습니다.
  • agents.workspace.denyToolsexec, process, write, edit, apply_patch를 허용합니다. 구성의 도구 거부 그룹 group:fs(파일 변경)와 group:runtime(셸/프로세스)은 이에 상응하는 태세를 충족합니다.
  • 실행 승인 검사는 execApprovals 규칙이 있을 때만 실제 exec-approvals.json 아티팩트를 읽습니다. 누락되거나 유효하지 않은 아티팩트는 인위적인 통과가 아니라 관찰할 수 없는 증거입니다.
  • 비밀 및 인증 프로필 증거는 제공자/소스 태세와 SecretRef 메타데이터만 기록하며 원시 값은 절대 기록하지 않습니다. Policy는 auth-profiles.json 같은 에이전트별 자격 증명 저장소를 읽거나 증명하지 않습니다.
  • 데이터 처리 증거는 구성 수준의 태세(수정 모드, 텔레메트리 캡처 토글, 세션 유지 관리 모드, 대화록 인덱싱 설정)일 뿐입니다. 로그, 텔레메트리 내보내기, 대화록 또는 메모리 파일은 검사하지 않으며, 검사 결과가 깨끗하더라도 그 안에 개인 데이터나 비밀이 없다는 사실을 입증하지는 않습니다.

Policy 규칙 참조

아래의 모든 규칙은 선택 사항이며, 규칙이 있을 때만 검사가 실행됩니다. 관찰되는 상태는 기존 OpenClaw 구성 또는 워크스페이스 메타데이터입니다.

범위 지정 오버레이

특정 에이전트나 채널에 최상위 기준선보다 엄격한 Policy가 필요한 경우 scopes.<scopeName>을 사용하십시오. 범위 이름은 단순한 레이블이며, 일치는 범위 내부의 선택기를 사용합니다. 오버레이는 추가 방식으로 적용됩니다. 전역 규칙은 계속 실행되며, 범위 지정 규칙은 동일한 증거에 대해 자체 결과를 추가할 수 있습니다. agentIds 항목이 agents.list[]에 없으면 OpenClaw는 건너뛰는 대신 해당 런타임 에이전트 ID에 상속된 전역/기본 태세를 기준으로 범위 지정 규칙을 평가합니다.
위와 같이 각 범위가 서로 다른 필드를 관리한다면 동일한 에이전트가 여러 범위에 나타날 수 있습니다. 동일한 에이전트에 대해 범위 지정 필드가 반복되면 동일하거나 더 엄격해야 합니다. 더 약한 중복 선언은 거부됩니다(허용 목록은 부분집합, 거부 목록은 상위집합이어야 하며 필수 불리언 값은 고정됩니다). 컨테이너 태세 규칙(sandbox.containers.*)은 일치하는 에이전트의 샌드박스 백엔드가 노출할 수 있는 증거에 대해서만 검사됩니다. 백엔드가 활성화된 규칙을 관찰할 수 없다면 Policy는 통과시키는 대신 policy/sandbox-container-posture-unobservable을 보고합니다. 컨테이너 규칙의 범위는 해당 규칙을 노출할 수 있는 백엔드를 사용하는 에이전트 그룹으로 지정하십시오. 최상위 ingress.session.requireDmScope는 전역으로 유지됩니다. session.dmScope는 채널에 귀속할 수 있는 증거가 아니므로 channelIds로 범위를 지정할 수 없습니다. policy.jsonc에 있는 모든 범위는 유효하고 적용 가능해야 합니다.

채널

MCP 서버

모델 제공자

네트워크

인그레스 및 채널 접근

Gateway

gateway.nodes.denyCommands는 정확하며 대소문자를 구분하는 거부 상위 집합 규칙입니다. 정책이 권한 있는 Node 명령이 OpenClaw 구성에서 명시적으로 거부됨을 입증해야 할 때 사용합니다. 권한 있는 Node 명령을 의도적으로 허용하는 배포는 gateway.nodes.allowCommands에만 의존하지 말고 검토 후 policy.jsonc를 업데이트해야 합니다.

에이전트 작업 공간

샌드박스 보안 태세

정책은 누락된 sandbox.mode를 암시적 기본값인 off로 처리하므로, sandbox.requireMode는 신규 또는 구성되지 않은 샌드박스를 ["all"]과 같은 허용 목록 밖에 있는 것으로 보고합니다.

데이터 처리

시크릿

실행 승인

실행 승인 검사는 런타임 exec-approvals.json 아티팩트를 읽습니다. 기본 경로는 ~/.openclaw/exec-approvals.json이며, OPENCLAW_STATE_DIR이 설정된 경우에는 $OPENCLAW_STATE_DIR/exec-approvals.json입니다. execApprovals.defaults.* 또는 execApprovals.agents.* 아래의 보안 태세 규칙에는 읽을 수 있는 아티팩트 증거가 필요합니다. 아티팩트가 없거나 유효하지 않으면 최선형 통과가 아니라 관찰 불가능한 증거로 보고됩니다. 읽을 수 있게 되면 생략된 필드는 런타임 기본값을 상속합니다. 누락된 defaults.securityfull이며, 누락된 에이전트 보안은 해당 기본값을 상속합니다. 증거에는 defaults, agents.*, agents.*.allowlist[].pattern, 선택적 argPattern, 유효한 autoAllowSkills 보안 태세 및 항목 소스가 포함되며, 소켓 경로/토큰, commandText, lastUsedCommand, 확인된 경로 또는 타임스탬프는 절대 포함되지 않습니다. 예: 승인 아티팩트를 요구하고, 허용 범위가 넓은 기본값을 거부하며, 선택한 에이전트에 대해 검토된 실행 승인 보안 태세만 허용합니다.

인증 프로필

도구 메타데이터

도구 태세

검사 실행

작성 중에는 정책 전용 검사를 실행합니다.
policy check는 정책 검사 집합만 실행하고 증거, 발견 사항 및 증명 해시를 출력합니다. Policy Plugin이 활성화된 경우 동일한 발견 사항이 openclaw doctor --lint에도 표시됩니다. 운영자 정책 파일을 작성된 기준선과 비교합니다.
policy compare는 정책 파일 구문을 다른 정책 파일 구문과 비교하며, 런타임 상태, 증거, 자격 증명 또는 비밀을 검사하지 않습니다. 범위가 지정된 오버레이를 관리하는 것과 동일한 규칙 메타데이터를 사용합니다. 허용 목록은 동일하거나 더 좁아야 하고, 거부 목록은 동일하거나 더 넓어야 하며, 필수 불리언은 그 값을 유지해야 하고, 순서가 지정된 문자열은 구성된 순서에서 더 엄격한 쪽으로만 이동할 수 있으며, 정확한 목록은 일치해야 합니다. 기준선은 조직에서 작성한 정책일 수 있으며, 검사 대상 정책에는 더 엄격한 값이나 추가 규칙을 넣을 수 있습니다. 최상위 검사 대상 규칙은 동일하거나 더 제한적인 경우 범위가 지정된 기준선 규칙을 충족할 수 있습니다. 파일 간에 범위 이름이 일치할 필요는 없으며, 비교는 선택자(agentIds/channelIds)와 필드를 기준으로 합니다. 문제없는 비교(--json):
문제없는 policy check --json 출력에는 운영자나 감독자가 기록할 수 있는 안정적인 해시가 포함됩니다.

정책 구성

정책 구성은 plugins.entries.policy.config 아래에 있습니다.
Plugin을 설치된 상태로 유지하면서 워크스페이스의 정책 검사를 비활성화하려면 plugins.entries.policy.config.enabledfalse로 설정합니다.

정책 상태 승인

JSON 출력 예시:
attestation.policy.hash는 작성된 규칙 아티팩트를 식별합니다. evidence는 검사에서 사용한 관찰된 OpenClaw 상태를 기록하며, workspace.hash는 해당 증거 페이로드를 식별합니다. findingsHash는 정확한 발견 사항 집합을 식별합니다. checkedAt은 검사가 실행된 시점을 기록합니다. attestationHash는 안정적인 주장(정책 해시, 증거 해시, 발견 사항 해시 및 문제없음/문제 있음 상태)을 식별하며 의도적으로 checkedAt을 제외하므로 동일한 정책 상태는 항상 동일한 증명 해시를 생성합니다. 이 네 값이 함께 한 번의 정책 검사를 위한 감사 튜플을 구성합니다. Gateway 또는 감독자가 정책을 사용하여 런타임 작업을 차단하거나 승인하거나 주석을 추가하는 경우, 마지막으로 문제없이 완료된 검사의 증명 해시를 기록해야 합니다. checkedAt은 감사 로그를 위해 JSON 출력에 남아 있지만 안정적인 해시의 일부는 아닙니다. 정책 상태 승인 수명 주기:
  1. policy.jsonc를 작성하거나 검토합니다.
  2. openclaw policy check --json을 실행합니다.
  3. 문제가 없으면 attestation.policy.hashexpectedHash로 기록합니다.
  4. attestation.attestationHashexpectedAttestationHash로 기록합니다.
  5. CI 또는 릴리스 게이트에서 openclaw doctor --lint를 다시 실행합니다.
정책 규칙을 의도적으로 변경한 경우 깨끗한 검사 결과를 기준으로 허용된 두 해시를 모두 업데이트하세요. 작업 공간 설정만 변경되고 정책은 그대로인 경우에는 일반적으로 expectedAttestationHash만 변경됩니다. agents.workspace 규칙을 활성화하거나 업그레이드하면 작업 공간 해시와 증명 해시에 agentWorkspace 증거가 추가됩니다. 활성화한 후 새 증거를 검토하고 허용된 증명 해시를 갱신하세요. 도구 태세 규칙을 활성화하거나 업그레이드해도 같은 방식으로 toolPosture 증거가 추가됩니다. openclaw policy watch는 검사를 다시 실행하고 현재 증거가 더 이상 expectedAttestationHash와 일치하지 않을 때 보고합니다.
단일 드리프트 평가가 필요한 CI 또는 스크립트에서는 --once를 사용하세요. --once가 없으면 기본적으로 2초마다 폴링합니다. 간격을 변경하려면 --interval-ms를 사용하세요.

발견 사항

발견 사항에는 준수하지 않는 것으로 관찰된 작업 공간 대상을 나타내는 target과 해당 대상을 발견 사항으로 판정하게 한 작성된 규칙을 나타내는 requirement가 모두 포함될 수 있습니다. 현재 두 값 모두 oc:// 주소 문자열이지만, 필드 이름은 주소 형식이 아니라 정책상의 역할을 설명합니다. 발견 사항 예시:

복구

doctor --lintpolicy check는 읽기 전용입니다. doctor --fixworkspaceRepairs가 명시적으로 활성화된 경우에만 정책에서 관리하는 워크스페이스 설정을 수정합니다. 그렇지 않으면 검사에서 복구할 항목을 보고하지만 설정은 변경하지 않습니다. 이 버전에서는 복구 기능이 channels.denyRules에서 거부된 채널을 비활성화하고 아래에 나열된 자동 축소 복구를 적용할 수 있습니다. 유효한 규칙이 워크스페이스 구성을 변경할 수 있으므로 정책 파일을 검토한 후에만 workspaceRepairs를 활성화하십시오.
  • 전역 정책에서 권한 상승 도구를 금지하는 경우 tools.elevated.enabled=false로 설정
  • 정책에서 해당 도구를 거부하도록 요구하는 경우 누락된 필수 거부 도구 ID를 tools.deny 또는 agents.list[].tools.deny에 추가
  • 안전하지 않은 gateway.controlUi.* 토글을 false로 설정
  • 정책에서 원격 Gateway 모드를 거부하는 경우 gateway.mode=local로 설정
  • 정책에서 Gateway HTTP API 엔드포인트를 거부하는 경우 보고된 gateway.http.endpoints.*.enabled 경로를 false로 설정
  • 정책에서 개방형 그룹 인바운드를 거부하는 경우 보고된 채널 인바운드 groupPolicy 경로를 allowlist로 설정
  • 정책에서 그룹 멘션을 요구하는 경우 보고된 채널 인바운드 requireMention 경로를 true로 설정
  • 정책에서 민감한 로깅 정보의 마스킹을 요구하는 경우 logging.redactSensitive=tools로 설정
  • 정책에서 텔레메트리 콘텐츠 캡처를 거부하는 경우 diagnostics.otel.captureContent=false로 설정하거나, 객체 형식의 텔레메트리 캡처 설정에서는 diagnostics.otel.captureContent.enabled=false로 설정
범위가 지정된 권한 상승 도구 복구는 감지만 수행합니다. 또한 발견 항목이 공유 로깅 또는 텔레메트리 구성을 보고하는 경우에는 공유 설정을 변경하면 범위가 지정된 정책 대상 이외에도 영향을 미치므로 범위가 지정된 데이터 처리 복구를 건너뜁니다. 발견 항목이 상속된 루트 tools.deny를 보고하는 경우에는 필요한 도구를 루트 구성에 추가하면 범위가 지정된 정책 대상 이외에도 영향을 미치므로 범위가 지정된 필수 거부 복구를 건너뜁니다. 에이전트 로컬 필수 거부 복구는 보고된 agents.list[].tools.deny 경로를 업데이트할 수 있습니다. 발견 항목이 상속된 channels.defaults.*를 보고하는 경우에는 공유 채널 기본값을 변경하면 범위가 지정된 정책 대상 이외에도 영향을 미치므로 범위가 지정된 채널 인바운드 복구를 건너뜁니다. Gateway HTTP URL 가져오기 허용 목록 발견 항목은 자동 복구가 올바른 엔드포인트 URL 허용 목록 값을 선택할 수 없으므로 수동으로 처리해야 합니다. Gateway 바인딩 및 노드 명령 발견 항목은 계속 검토가 필요합니다. policy/gateway-non-loopback-bind 또는 policy/gateway-node-command-denied를 구성 경로에 매핑할 수 있는 경우 doctor --fix는 제안된 gateway.bind 또는 gateway.nodes.denyCommands 변경 사항을 건너뛴 미리 보기 지침으로 보고합니다. 변경 사항을 적용하지 않으며, 운영자가 구성 또는 정책을 검토하고 업데이트하기 전까지 해당 발견 항목은 복구된 것으로 간주되지 않습니다.

종료 코드

관련 항목