# Hemligheter och miljövariabler — Cibello

**Enda sanningskälla:** AWS Systems Manager Parameter Store (`/cibello/prod/*` i `eu-north-1`).
Serverns `/opt/cibello-platform/.env` härleds ALLTID ur SSM via `sync-env-from-ssm.py`.
Inga handkopior får drifta.

## SSM-parameter → env-var

| SSM-parameter | Miljövariabel | Kommentar |
|---------------|---------------|-----------|
| `/cibello/prod/aamos-api-key` | `AAMOS_API_KEY` | Endast när `AAMOS_MODE=http` |
| `/cibello/prod/db-password` | byggd in i `DATABASE_URL` / `TEST_DATABASE_URL` | RDS-användare `cibello_admin` |
| `/cibello/prod/entitlement-signing-secret` | `ENTITLEMENT_SIGNING_SECRET` | Signerar prenumerationsrättigheter |
| `/cibello/prod/eoc-push-token` | `EOC_PUSH_TOKEN` | Ops-summary push till EOC |
| `/cibello/prod/gemini-api-key` | `GEMINI_API_KEY` | AAMOS_MODE=gemini |
| `/cibello/prod/google-service-account-json` | `GOOGLE_SERVICE_ACCOUNT_JSON` | Google Play service account (JSON) |
| `/cibello/prod/jwt-access-secret` | `JWT_ACCESS_SECRET` | Access-token-signering |
| `/cibello/prod/jwt-refresh-secret` | `JWT_REFRESH_SECRET` | Refresh-token-signering |
| `/cibello/prod/smtp-pass` | `SMTP_PASS` | SMTP-lösen för `hello@cibello.app` |

**Föråldrade / dubbla parametrar** (rensas vid tillfälle): `/cibello/prod/entitlement-signing`, `/cibello/prod/jwt-access`, `/cibello/prod/jwt-refresh`.

## Icke-hemliga värden

Följande ligger fortfarande hårdkodade i `infrastructure/deployment/sync-env-from-ssm.py`
och kan flyttas till SSM (String-typ) om de behöver ändras ofta:

- `API_BASE_URL`, `VITE_API_BASE_URL`, `CORS_ORIGINS`
- `S3_BUCKET`, `S3_REGION`, `S3_MODE`
- `GEMINI_MODEL`, `GEMINI_TIMEOUT_MS`, `GEMINI_DAILY_BUDGET_USD`
- `DATABASE_CA_CERT`, DB-host/name/user (kan överstyras via env)

## Rotation

1. Skriv nytt värde till SSM:  
   `aws ssm put-parameter --name /cibello/prod/<namn> --value '<värde>' --type SecureString --overwrite --region eu-north-1`
2. Kör på prod-servern:  
   `python3 /opt/cibello-platform/infrastructure/deployment/sync-env-from-ssm.py`
3. Starta om API + worker.
4. Verifiera `/readyz` och kör röktest.

## Regler

- **Aldrig** committa `.env`, secrets eller nycklar.
- **Aldrig** skriva secrets i chatt, loggar eller shell-historik (`set +x`).
- Produktionsserverns instansroll (`cibello-app`) har endast `ssm:GetParameter`;
  skrivrättigheter kräver gateway-operator med `platform-admin`.
- RDS-lösenordet roteras med både `ALTER ROLE ... WITH PASSWORD` och SSM-uppdatering;
  `sync-env-from-ssm.py` bygger om `DATABASE_URL` automatiskt.
