정책
정책은 OpenCode가 명명된 리소스에 대해 작업을 수행할 수 있는지 여부를 제어합니다. 이 기능은 실험적이며 opencode.json의 experimental.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는 현재 하나의 정책 작업을 지원합니다.
| Action | Resource | Description |
|---|---|---|
provider.use | openai 등 provider ID | LLM provider의 사용을 허용하거나 거부합니다. |
향후 더 많은 정책 작업이 추가될 수 있습니다.
매칭
resource 필드는 와일드카드 매칭을 지원합니다. *는 0개 이상의 문자와 일치하고 ?는 한 문자와 일치합니다.
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "company-*"
}
]
}
}
이렇게 하면 company-us 및 company-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_providers 및 enabled_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" }
]
}
}