feat(storage,deploy): delad S3/mock-lagring, SSM .env-sync, Gemini readyz
- @app/storage med MockStorage + AwsStorage delas mellan API och worker - Workerns readUrl() ger presignerad S3-URL i aws-läge (fixar mock-s3 404) - sync-env-from-ssm.py hämtar /cibello/prod/* och skriver .env; first-deploy.sh kör det i prod - /readyz returnerar 503 om app.aamos.healthCheck() misslyckas - docs/SECRETS.md med rotations- och SSM-regler
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user