Add your description here
Project description
RAJA
Resource Authorization JWT Authority - Compile Cedar policies into JWT tokens for deterministic authorization.
What is RAJA?
RAJA compiles Cedar authorization policies into JWT tokens with explicit scopes. This means:
- Authorization decisions are deterministic (same token + request = same result)
- Tokens are transparent (you can see exactly what permissions are granted)
- Enforcement is fast (simple scope checking, no policy evaluation)
Quick Start
Installation
git clone https://github.com/quiltdata/raja.git
cd raja
uv sync
Deploy to AWS (Control Plane)
# Deploy infrastructure
poe cdk-deploy --all
# Load Cedar policies
python scripts/load_policies.py
# Compile policies to scopes
export RAJA_API_URL="https://your-api.execute-api.us-east-1.amazonaws.com/prod"
python scripts/invoke_compiler.py
Control Plane UI
After deployment, open the API Gateway URL in your browser. The root path (/) renders a
simple admin UI with live data from /principals, /policies, and /audit.
How It Works
Cedar Policies → Compiler → JWT Scopes → Library Enforcement
- Write Cedar policies that define who can do what
- Compiler converts policies into scope strings (e.g.,
Document:doc123:read) - Token Service issues JWTs containing these scopes
- Applications validate tokens and check scopes locally
API Endpoints
When deployed to AWS, RAJA provides:
POST /compile - Compile Cedar policies into scopes
{}
→ {"message": "Policies compiled successfully", "policies_compiled": 3}
POST /token - Issue a JWT token
{"principal": "alice"}
→ {"token": "eyJ...", "scopes": ["Document:doc123:read"]}
GET /principals - List principals and their scopes
→ {"principals": [{"principal": "alice", "scopes": [...]}]}
**GET /policies** - List Cedar policies
```json
→ {"policies": [{"policyId": "..."}]}
GET /audit - View audit log entries
## Local Development
Use the Python library standalone (no AWS required):
```python
from raja import AuthRequest, create_token, enforce
# Create token with scopes
token = create_token(
subject="alice",
scopes=["Document:doc123:read"],
secret="your-secret"
)
# Check authorization
decision = enforce(
token_str=token,
request=AuthRequest(resource_type="Document", resource_id="doc123", action="read"),
secret="your-secret"
)
print(decision.allowed) # True
Run Tests
poe test-unit # Unit tests (no AWS)
poe test # All tests
poe check-all # Format, lint, typecheck
Scope Format
Scopes follow the pattern: {ResourceType}:{ResourceId}:{Action}
Examples:
Document:doc123:read- Read document doc123Document:*:read- Read all documents*:*:*- Full admin access
Project Structure
raja/
├── src/raja/ # Core Python library
├── lambda_handlers/ # AWS Lambda handlers
├── infra/ # CDK infrastructure
├── policies/ # Sample Cedar policies
└── tests/ # Test suite
Documentation
- CLAUDE.md - Developer guide and architecture
- specs/ - Design specifications
- Module READMEs - See CLAUDE.md files in subdirectories
Contributing
See CLAUDE.md for development guidelines.
License
[License information to be added]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file raja-0.2.0.tar.gz.
File metadata
- Download URL: raja-0.2.0.tar.gz
- Upload date:
- Size: 13.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
273e341ea839bff405a100da159c674784009541b4ea53c95982dba0cce6bb58
|
|
| MD5 |
13bf3b35e23aedb38d635fb2ffcbe03f
|
|
| BLAKE2b-256 |
c0be765bad4514bae826b31795a14f48f3bef7c4b8ec93f51985891bfcc74ee2
|
File details
Details for the file raja-0.2.0-py3-none-any.whl.
File metadata
- Download URL: raja-0.2.0-py3-none-any.whl
- Upload date:
- Size: 15.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1dd458c086f8351dabe1e01c44cfcd38d5f68b27455ea702b2957cc1dff026d9
|
|
| MD5 |
4b191c54708c9fca3677f85a879be6bb
|
|
| BLAKE2b-256 |
985d99285cd2d186890c08371c8dca16114018cd6ea01caec47e73849acb97a2
|