Skip to main content

Add your description here

Project description

RAJA

This README is intentionally short and focused on day-to-day usage.

For architecture, design notes, tests, and deeper docs, see AGENTS.md.

Target Workflow

  1. Set env and deploy the stack.
  2. Use the Admin UI and/or call RALE via boto3.
  3. Add S3 buckets for testing.

1) Set Env And Deploy

Prereqs:

  • AWS credentials configured locally
  • uv, terraform, docker
uv sync

# one-time (if missing)
cp infra/terraform/terraform.tfvars.example infra/terraform/terraform.tfvars

# required admin key used by protected control-plane endpoints
cat > .env <<'ENV'
RAJA_ADMIN_KEY=change-me-admin-key
RAJA_USERS=ernest-staging,kevin-staging,simon-staging
ENV

./poe deploy
python scripts/show_outputs.py

./poe deploy writes deployment outputs to infra/tf-outputs.json.

2) Run Admin UI

export API_URL="$(python - <<'PY'
import json
print(json.load(open('infra/tf-outputs.json'))['api_url'])
PY
)"

open "$API_URL"
  • Browse to / for the Admin UI.
  • Enter the same RAJA_ADMIN_KEY you used for deploy.
  • The Token and Enforcement forms default to the first RAJA_USERS entry from .env.

Quick API check:

curl -sS "$API_URL/principals" \
  -H "Authorization: Bearer $RAJA_ADMIN_KEY"

3) Call RALE With boto3

This uses the RAJEE endpoint (which fronts RALE) with normal S3 API calls.

export API_URL="$(python - <<'PY'
import json
o=json.load(open('infra/tf-outputs.json'))
print(o['api_url'])
PY
)"
export RAJEE_ENDPOINT="$(python - <<'PY'
import json
o=json.load(open('infra/tf-outputs.json'))
print(o['rajee_endpoint'])
PY
)"
export TEST_BUCKET="$(python - <<'PY'
import json
o=json.load(open('infra/tf-outputs.json'))
print(o['rajee_test_bucket_name'])
PY
)"

# create a principal with test-bucket permissions
export DEMO_PRINCIPAL="$(python - <<'PY'
import os
import boto3

users = [u.strip() for u in os.environ["RAJA_USERS"].split(",") if u.strip()]
account_id = boto3.client("sts").get_caller_identity()["Account"]
print(f"arn:aws:iam::{account_id}:user/{users[0]}")
PY
)"

curl -sS -X POST "$API_URL/principals" \
  -H "Authorization: Bearer $RAJA_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"principal\":\"${DEMO_PRINCIPAL}\",\"scopes\":[\"S3Object:${TEST_BUCKET}/*:s3:GetObject\",\"S3Object:${TEST_BUCKET}/*:s3:PutObject\",\"S3Bucket:${TEST_BUCKET}:s3:ListBucket\"]}"

# mint a RAJEE token for that principal
export RAJEE_TOKEN="$(curl -sS -X POST "$API_URL/token" \
  -H "Authorization: Bearer $RAJA_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"principal\":\"${DEMO_PRINCIPAL}\",\"token_type\":\"rajee\"}" | python -c 'import sys,json; print(json.load(sys.stdin)["token"])')"
import os
import boto3
from botocore.config import Config

region = os.environ.get("AWS_REGION") or os.environ.get("AWS_DEFAULT_REGION") or "us-east-1"
endpoint = os.environ["RAJEE_ENDPOINT"]
token = os.environ["RAJEE_TOKEN"]
bucket = os.environ["TEST_BUCKET"]

s3 = boto3.client(
    "s3",
    endpoint_url=endpoint,
    region_name=region,
    config=Config(s3={"addressing_style": "path"}),
)

def _headers(request, **_):
    request.headers["Host"] = f"s3.{region}.amazonaws.com"
    request.headers["x-raja-authorization"] = f"Bearer {token}"

s3.meta.events.register("before-sign.s3", _headers)

s3.put_object(Bucket=bucket, Key="rajee-integration/hello.txt", Body=b"hello")
print(s3.get_object(Bucket=bucket, Key="rajee-integration/hello.txt")["Body"].read())
print([x["Key"] for x in s3.list_objects_v2(Bucket=bucket, Prefix="rajee-integration/").get("Contents", [])])

4) Add Buckets To Test With

  1. Add a new aws_s3_bucket (+ versioning/encryption/public-access-block) in infra/terraform/main.tf.
  2. Add that bucket ARN to both IAM policies in infra/terraform/main.tf:
    • aws_iam_role_policy.rale_router_permissions
    • aws_iam_role_policy.rajee_task_permissions
  3. Add an output in infra/terraform/outputs.tf if you want the bucket name in infra/tf-outputs.json.
  4. Re-deploy:
./poe deploy

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

raja-1.0.0.tar.gz (71.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

raja-1.0.0-py3-none-any.whl (81.6 kB view details)

Uploaded Python 3

File details

Details for the file raja-1.0.0.tar.gz.

File metadata

  • Download URL: raja-1.0.0.tar.gz
  • Upload date:
  • Size: 71.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for raja-1.0.0.tar.gz
Algorithm Hash digest
SHA256 8a2d9a394fc1826e81d796503ef0347fdcf202bf0ccc49ac799b7da92c99ea80
MD5 b8bcd30accf02c057d411d85b33d3e13
BLAKE2b-256 65f6ac8da88f70ca21a91855a4348f2b0449196e4bb431ef68ee2bffd124ddb0

See more details on using hashes here.

Provenance

The following attestation bundles were made for raja-1.0.0.tar.gz:

Publisher: release.yml on quiltdata/raja

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file raja-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: raja-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 81.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for raja-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ae3075a28c5bcb28385db04848ead7bfa5aadd95217be013de689b1b88e3dc72
MD5 0d66acf67068b554181fd8861f394ff6
BLAKE2b-256 13cecd0344be4e9410957427c79eb2d485f93558ab9bdc97a05a29888f6d06a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for raja-1.0.0-py3-none-any.whl:

Publisher: release.yml on quiltdata/raja

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page