RAISE: Reinforcing Access Control Policy Synthesis in LLMs via Symbolic Evaluation
Organizations: Stevens Institute of Technology
Abstract
Translating natural-language access-control requirements into policies requires careful reasoning about permissions, constraints, and exceptions, and even frontier LLMs often produce policies that violate the intended authorization semantics. We construct CedarInstruct, to our knowledge the first dataset that supports both training and semantic evaluation for formally verifiable Cedar policy synthesis. It contains 5,800 scenarios across 44 domains and 1,408 representing a single synthetic organization, each with a verified target policy and an executable verification plan. On this data we introduce RAISE, which trains policy synthesizers from formal verification in two stages, verified supervised fine-tuning (SFT) followed by a reinforcement learning (RL) stage that learns from verifier signal. We find that SFT succeeds largely by letting models express authorization logic they already have, since untrained models rarely write valid Cedar but often reason correctly when they do. After SFT, how the verifier's information is used matters more than how much of it is used. Of six RL instantiations that consume progressively richer verifier signal, only RAISE-OC improves meaningfully on SFT; it turns failed checks and symbolic counterexamples into guided exploration and learns from the result with off-context GRPO. With about 5.4K verified scenarios and LoRA fine-tuning, RAISE-OC trains Qwen3.5-9B to surpass zero-shot GPT-6 Astra and Claude Opus 5 by 13.33 and 16.26 percentage points in semantic success on held-out scenarios, and training transfers to the independently constructed CedarBench.
Figures & tables
| Method | Verifier signal | Training use |
|---|---|---|
| Binary Reward GRPO | Plan outcome | Binary reward; zero gradient for all-failure groups |
| Coverage Reward GRPO | Check-pass fraction | Graded reward with a degeneracy guard |
| Formal Dominance GRPO | Passed-check set | Set-dominance preferences within all-failure groups |
| Critique-GRPO | Failure descriptions | Verifier descriptions guide candidate refinement |
| SDPO | Failure descriptions | Self-teaching uses feedback and a successful sibling |
| RAISE-OC | Descriptions and counterexamples | Separate guided contexts with off-context updates |
| Method | Syntax | Semantic | Among valid | Macro | Micro |
|---|---|---|---|---|---|
| Frontier models, zero-shot | |||||
| GPT-6 Astra (Max) | 97.87 | 33.60 | 34.3 | 71.10 | 68.70 |
| Claude Opus 5 (Max) | 100.00 | 30.67 | 30.7 | 73.12 | 72.82 |
| Qwen3.5-9B | |||||
| Structured zero-shot | 45.07 | 2.67 | 5.9 | 23.51 | 22.25 |
| RAISE: SFT | 99.20 | 42.93 | 43.3 | 78.93 | 77.92 |
Appendix figures & tables9 assets
Supplementary material from the paper’s appendix.
Appendix
| ID | Constraint category | Semantic relation |
|---|---|---|
| K1 | Separation of duty | The current actor must differ from the actor stored for a conflicting prior action. |
| K2 | Binding of duty | The current actor must match the actor stored for a related prior action. |
| K3 | Override | An exception case takes precedence over the default access-control rule. |
| K4 | Level dominance | The current actor’s authority level must dominate the resource’s sensitivity level. |
| K5 | Lifecycle-state gate | The current action is allowed only in selected resource lifecycle states. |
| ID | Condition type | Plain meaning |
|---|---|---|
| Identity and relationships | ||
| V1 | Entity equality | The actor matches an identity field. |
| V2 | Type or role test | The actor has a required role or kind. |
| V3 | Hierarchy membership | The actor belongs to a group or hierarchy. |
| V4 | Set containment | The actor appears in an allowed set. |
| Values and comparisons | ||
| Hyperparameter | Qwen3.5-9B | Qwen3.8-27B |
|---|---|---|
| Supervised fine-tuning | ||
| Adaptation | LoRA | LoRA |
| LoRA rank | 64 | 64 |
| LoRA scaling | 128 | 128 |
| LoRA dropout | 0.05 | 0.05 |
| SFT epochs run | 4 | 3 |
| Check selection | Prompt layout | Rollouts | Qwen3.5-9B | Qwen3.8-27B | |
|---|---|---|---|---|---|
| 1 | most frequent | one per check | 8 | 44.53 | 47.47 |
| 2 | most frequent | one per check | 8 | 41.87 | 47.20 |
| 4 | most frequent | one per check | 8 | 46.93 | 48.00 |
| 4 | random | one per check | 8 | 45.60 | 47.73 |
| 4 | most frequent | all in one shared prompt | 8 | 44.80 | 47.47 |
| 8 | most frequent | one per check | 16 | 45.60 | 47.20 |
| Method | Initial | Repair 1 | Repair 2 | Retry only |
|---|---|---|---|---|
| Qwen3.5-9B | ||||
| SFT | 42.93 | 64.00 | 67.73 | 45.33 |
| Binary GRPO | 43.47 | 62.93 | 67.20 | 45.07 |
| RAISE-OC | 46.93 | 66.93 | 70.40 | 50.40 |
| Qwen3.8-27B | ||||
| SFT | 46.40 | 73.60 | 76.80 | 50.40 |
| Model | Input tokens | Output tokens | Latency (s) | Cost ($) | Semantic (%) |
|---|---|---|---|---|---|
| GPT-6 Astra (Max) | 24,832 | 448 | 14.3 | 0.0638 | 33.60 |
| Claude Opus 5 (Max) | 49,134 | 2,412 | 27.3 | 0.1375 | 30.67 |
| Qwen3.5-9B + RAISE | 699 | 154 | 3.85 | 0.000093 | 46.93 |
| Qwen3.8-27B + RAISE | 737 | 141 | 7.35 | 0.000370 | 48.00 |