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.2.0.tar.gz (70.2 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.2.0-py3-none-any.whl (81.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for raja-1.2.0.tar.gz
Algorithm Hash digest
SHA256 457aeb834fa58d4f154d047c5163b8e72305314ce429edcf911c423731c18ce9
MD5 0dbfbbeb0b07fdbba49a9e3fbe05d74e
BLAKE2b-256 99f35667acdbab2c74ed394894d865b1ed7d663cf9e3dbc635cd68507fa01f03

See more details on using hashes here.

Provenance

The following attestation bundles were made for raja-1.2.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.2.0-py3-none-any.whl.

File metadata

  • Download URL: raja-1.2.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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a03c46841c591afd7da8726461ee3c28b228e5eb3eeb73e40f658bc9642a76f8
MD5 a31b7db3d747db4da6d2cbeee31b9708
BLAKE2b-256 edbb85399d5d59d557871fbe99eb084275843300723738ace3a44c348685be26

See more details on using hashes here.

Provenance

The following attestation bundles were made for raja-1.2.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