컨텐츠로 건너뛰기

정책

정책은 OpenCode가 명명된 리소스에 대해 작업을 수행할 수 있는지 여부를 제어합니다. 이 기능은 실험적이며 opencode.jsonexperimental.policies 배열로 설정합니다.

정책은 권한과 별개입니다. 권한은 세션 동안 도구가 무엇을 할 수 있는지 제어하고, 정책은 LLM provider와 같은 리소스를 OpenCode가 사용할 수 있는지 여부를 제어합니다.


설정

각 정책 문에는 세 가지 필드가 있습니다.

  • effect - "allow" 또는 "deny" 중 하나입니다.
  • action - 제어 대상 작업입니다.
  • resource - 문이 적용되는 리소스 ID 또는 와일드카드 패턴입니다.

예를 들어 openai provider 사용을 거부하려면 다음과 같이 작성합니다.

{
  "$schema": "https://opencode.ai/config.json",
  "experimental": {
    "policies": [
      {
        "effect": "deny",
        "action": "provider.use",
        "resource": "openai"
      }
    ]
  }
}

정책에 의해 거부된 provider는 자격 증명이 있거나 다른 방식으로 올바르게 설정되어 있더라도 모델 선택이나 모델 사용에 사용할 수 없습니다.


사용 가능한 정책

OpenCode는 현재 하나의 정책 작업을 지원합니다.

ActionResourceDescription
provider.useopenai 등 provider IDLLM provider의 사용을 허용하거나 거부합니다.

향후 더 많은 정책 작업이 추가될 수 있습니다.


매칭

resource 필드는 와일드카드 매칭을 지원합니다. *는 0개 이상의 문자와 일치하고 ?는 한 문자와 일치합니다.

{
  "$schema": "https://opencode.ai/config.json",
  "experimental": {
    "policies": [
      {
        "effect": "deny",
        "action": "provider.use",
        "resource": "company-*"
      }
    ]
  }
}

이렇게 하면 company-uscompany-eu 같은 provider가 거부됩니다.


규칙 순서

여러 문이 일치하는 경우 마지막에 일치하는 문이 적용됩니다. 넓은 규칙을 먼저 두고, 그 뒤에 더 구체적인 예외를 두세요.

예를 들어 Anthropic만 허용하려면 다음과 같이 작성합니다.

{
  "$schema": "https://opencode.ai/config.json",
  "experimental": {
    "policies": [
      {
        "effect": "deny",
        "action": "provider.use",
        "resource": "*"
      },
      {
        "effect": "allow",
        "action": "provider.use",
        "resource": "anthropic"
      }
    ]
  }
}

어떤 정책도 provider와 일치하지 않으면 기본적으로 provider 사용이 허용됩니다.

정책은 전역 설정과 프로젝트 설정 모두에 설정할 수 있습니다. 두 위치의 정책이 같은 provider와 일치하면, 전역 정책이 프로젝트 정책보다 우선합니다. 이를 통해 저장소가 전역적으로 거부한 provider를 다시 활성화할 수 없습니다.


Provider 목록

provider 접근을 제어할 때는 이전 disabled_providersenabled_providers 설정 대신 정책을 사용하세요.

disabled_providers를 대체하려면 다음과 같이 작성합니다.

{
  "experimental": {
    "policies": [
      { "effect": "deny", "action": "provider.use", "resource": "openai" },
      { "effect": "deny", "action": "provider.use", "resource": "google" }
    ]
  }
}

enabled_providers를 대체하려면 먼저 모든 provider를 거부한 뒤 선택한 provider를 허용합니다.

{
  "experimental": {
    "policies": [
      { "effect": "deny", "action": "provider.use", "resource": "*" },
      { "effect": "allow", "action": "provider.use", "resource": "anthropic" },
      { "effect": "allow", "action": "provider.use", "resource": "openai" }
    ]
  }
}