정책
OpenCode가 사용할 수 있는 설정된 리소스를 제어하세요.
정책은 OpenCode가 지정된 리소스에 대해 작업을 수행할 수 있는지 제어합니다. 이 기능은 실험적이며 opencode.json의 experimental.policies 배열로 설정합니다.
정책은 권한과는 별개입니다. 권한은 세션 중에 도구가 할 수 있는 일을 제어하는 반면, 정책은 OpenCode가 LLM 프로바이더 같은 리소스를 사용할 수 있는지를 제어합니다.
설정
각 정책 문(statement)에는 세 가지 필드가 있습니다:
effect-"allow"또는"deny"중 하나.action- 제어되는 작업.resource- 문이 적용되는 리소스 ID 또는 와일드카드 패턴.
예를 들어, openai 프로바이더 사용을 거부하려면:
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "openai"
}
]
}
}정책에 의해 거부된 프로바이더는 자격 증명이 있거나 다른 방식으로 올바르게 설정되어 있더라도 모델 선택이나 모델 사용에 사용할 수 없습니다.
사용 가능한 정책
OpenCode는 현재 하나의 정책 액션을 지원합니다:
| 액션 | 리소스 | 설명 |
|---|---|---|
provider.use | openai 같은 프로바이더 ID | LLM 프로바이더 사용을 허용하거나 거부합니다. |
향후 더 많은 정책 액션이 추가될 수 있습니다.
매칭
resource 필드는 와일드카드 매칭을 지원합니다. *는 0개 이상의 문자와 매칭되고, ?는 한 개의 문자와 매칭됩니다.
예를 들어:
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "company-*"
}
]
}
}이는 company-us, company-eu 같은 프로바이더를 거부합니다.
규칙 순서
여러 문이 일치하는 경우, 마지막으로 일치하는 문이 우선합니다. 포괄적인 규칙을 먼저 두고, 그 뒤에 더 구체적인 예외를 배치하세요.
예를 들어, Anthropic만 허용하려면:
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "*"
},
{
"effect": "allow",
"action": "provider.use",
"resource": "anthropic"
}
]
}
}프로바이더와 일치하는 정책이 없으면, 기본적으로 프로바이더 사용이 허용됩니다.
정책은 전역 설정과 프로젝트 설정 모두에 설정할 수 있습니다. 두 위치의 정책이 동일한 프로바이더와 일치하는 경우, 전역 정책이 프로젝트 정책보다 우선합니다. 이를 통해 저장소가 전역적으로 거부된 프로바이더를 다시 활성화하는 것을 방지합니다.
프로바이더 목록
프로바이더 접근을 제어할 때는 기존의 disabled_providers 및 enabled_providers 설정 대신 정책을 사용하세요.
disabled_providers를 대체하려면:
{
"experimental": {
"policies": [
{ "effect": "deny", "action": "provider.use", "resource": "openai" },
{ "effect": "deny", "action": "provider.use", "resource": "google" }
]
}
}enabled_providers를 대체하려면, 먼저 모든 프로바이더를 거부한 다음 선택한 프로바이더를 허용하세요:
{
"experimental": {
"policies": [
{ "effect": "deny", "action": "provider.use", "resource": "*" },
{ "effect": "allow", "action": "provider.use", "resource": "anthropic" },
{ "effect": "allow", "action": "provider.use", "resource": "openai" }
]
}
}