Skip to main content

Policies Schema

Definition

spec:
policies:
- mrn: string # Required: MRN identifier
name: string # Required: Human-readable name
description: string # Optional: Description
public: boolean # Optional: Mark as public (default: false)
dependencies: [] # Optional: Library dependencies
rego: string # Required: Rego code (or rego_filename)
rego_filename: string # Alternative: External file path

Fields

FieldTypeRequiredDescription
mrnstringYesUnique MRN identifier
namestringYesHuman-readable name
descriptionstringNoPolicy description
publicbooleanNoWhether policy is public
dependenciesarrayNoList of library MRNs
regostringSee belowInline Rego code
rego_filenamestringSee belowPath to external .rego file

Rego Code Fields

The rego and rego_filename fields specify where the Rego code comes from:

Document Kindregorego_filename
PolicyDomainRequiredNot supported
PolicyDomainReferenceOptionalOptional

For PolicyDomainReference, you must provide either rego (inline) or rego_filename (external file), but not both. Using rego_filename is recommended for development as it enables IDE syntax highlighting and cleaner version control diffs.

See PolicyDomain vs PolicyDomainReference for more details.

Rego Requirements

Every policy must:

  1. Declare package authz
  2. Export allow variable

Boolean Policy

rego: |
package authz
default allow = false
allow { ... }

Tri-Level Policy (Operation Phase)

Operation phase policies use integer output instead of boolean. Negative values are DENY, zero is GRANT (other phases still evaluated), and positive values are GRANT Override (bypassing other phases):

rego: |
package authz
default allow = 0
allow = -1 { input.principal == {} } # Deny
allow = 1 { is_public_operation } # GRANT Override

See Tri-Level Policies for complete semantics and usage guidance.

Examples

Simple Policy

policies:
- mrn: "mrn:iam:policy:allow-all"
name: allow-all
description: "Grants all access"
rego: |
package authz
default allow = true

Policy with Dependencies

policies:
- mrn: "mrn:iam:policy:read-only"
name: read-only
dependencies:
- "mrn:iam:library:utils"
rego: |
package authz
import data.utils

default allow = false
allow {
utils.is_read_operation(input.operation)
}

Using External File

# In PolicyDomainReference
policies:
- mrn: "mrn:iam:policy:main"
name: main
rego_filename: policies/main.rego

Operation Phase Policy

policies:
- mrn: "mrn:iam:policy:operations"
name: operations
description: "Operation phase policy for request routing"
rego: |
package authz
default allow = 0 # Tri-level: negative=DENY, 0=GRANT, positive=GRANT Override

# Deny unauthenticated requests on protected endpoints
allow = -1 {
input.principal == {}
not input.operation in public_operations
}

# Grant for public operations (bypasses identity phase)
allow = 1 {
input.operation in public_operations
}

public_operations := {
"public:health:check",
"public:docs:read"
}