172 lines
6.8 KiB
YAML
172 lines
6.8 KiB
YAML
# =============================================================================
|
|
# GABARIT de secrets -- NE JAMAIS COMMITTER CE FICHIER RENSEIGNE
|
|
# =============================================================================
|
|
# Mode d'emploi :
|
|
#
|
|
# 1. cp 03-secrets.template.yaml /tmp/secrets.yaml
|
|
# 2. renseigner chaque REMPLACER (voir 06-secrets-sops.md)
|
|
# 3. sops -e /tmp/secrets.yaml > k8s/base/03-secrets.sops.yaml
|
|
# 4. shred -u /tmp/secrets.yaml
|
|
# 5. git add k8s/base/03-secrets.sops.yaml <-- celui-la est chiffre, il se commit
|
|
#
|
|
# Application sur le cluster : bash scripts/secrets-apply.sh
|
|
#
|
|
# Generation d'une valeur aleatoire :
|
|
# openssl rand -base64 48 | tr -d '\n'
|
|
#
|
|
# RAPPEL : aucune valeur de preprod ne doit etre reprise. Les secrets presents
|
|
# dans infra/preprod/docker-stack.preprod.yml sont dans l'historique Git, donc
|
|
# compromis (cf. 13-securite-durcissement.md).
|
|
|
|
---
|
|
apiVersion: v1
|
|
kind: Secret
|
|
metadata:
|
|
name: xpeditis-backend-secrets
|
|
namespace: xpeditis-prod
|
|
labels:
|
|
app.kubernetes.io/name: xpeditis-backend
|
|
app.kubernetes.io/part-of: xpeditis
|
|
type: Opaque
|
|
stringData:
|
|
# --- Base de donnees -------------------------------------------------------
|
|
DATABASE_USER: "xpeditis"
|
|
DATABASE_PASSWORD: "REMPLACER" # identique a POSTGRES_PASSWORD de db-01
|
|
# Certificat PUBLIC PEM de db-01 (/var/lib/xpeditis/certs/server.crt),
|
|
# obtenu via un canal d'administration authentifie. Jamais server.key.
|
|
# Necessaire pour authentifier le certificat auto-signe de PostgreSQL.
|
|
DATABASE_SSL_CA: |
|
|
REMPLACER_PAR_LE_CERTIFICAT_PUBLIC_PEM_DE_DB_01
|
|
|
|
# --- Redis -----------------------------------------------------------------
|
|
REDIS_PASSWORD: "REMPLACER" # identique a REDIS_PASSWORD de db-01
|
|
|
|
# --- JWT -------------------------------------------------------------------
|
|
# Minimum 32 caracteres (valide par Joi au demarrage). Le changer invalide
|
|
# toutes les sessions en cours : a faire en dehors des heures ouvrees.
|
|
JWT_SECRET: "REMPLACER_64_CARACTERES_MINIMUM"
|
|
|
|
# Derive les mots de passe des documents transporteurs. S'il est absent, le
|
|
# code retombe sur JWT_SECRET -- et une rotation du JWT rendrait alors
|
|
# illisibles tous les documents deja emis. On le definit donc explicitement,
|
|
# et on ne le change JAMAIS sans plan de migration.
|
|
DOCUMENT_PASSWORD_SECRET: "REMPLACER_32_CARACTERES_MINIMUM"
|
|
|
|
# --- SMTP (Brevo) ----------------------------------------------------------
|
|
# Creez une cle SMTP dediee a la production dans Brevo. Celle de la preprod
|
|
# est publiee dans le depot : elle doit etre revoquee.
|
|
SMTP_USER: "REMPLACER"
|
|
SMTP_PASS: "REMPLACER"
|
|
|
|
# --- Stockage objet Hetzner (documents applicatifs) ------------------------
|
|
# Jeu de cles DISTINCT de celui utilise par WAL-G pour les sauvegardes :
|
|
# une fuite cote application ne doit pas donner acces aux sauvegardes.
|
|
AWS_ACCESS_KEY_ID: "REMPLACER"
|
|
AWS_SECRET_ACCESS_KEY: "REMPLACER"
|
|
|
|
# --- Stripe ----------------------------------------------------------------
|
|
# ATTENTION : cles LIVE en production (sk_live_..., whsec_...).
|
|
STRIPE_SECRET_KEY: "REMPLACER_sk_live"
|
|
STRIPE_WEBHOOK_SECRET: "REMPLACER_whsec"
|
|
|
|
# Noms exacts attendus par le code (app.module.ts / subscriptions).
|
|
# Le stack de preprod utilise STARTER/PRO/ENTERPRISE : ces noms-la ne sont lus
|
|
# par personne, les identifiants de tarif y sont donc silencieusement absents.
|
|
# Ne pas reproduire l'erreur ici.
|
|
STRIPE_SILVER_MONTHLY_PRICE_ID: "REMPLACER_price_"
|
|
STRIPE_SILVER_YEARLY_PRICE_ID: "REMPLACER_price_"
|
|
STRIPE_GOLD_MONTHLY_PRICE_ID: "REMPLACER_price_"
|
|
STRIPE_GOLD_YEARLY_PRICE_ID: "REMPLACER_price_"
|
|
STRIPE_PLATINIUM_MONTHLY_PRICE_ID: "REMPLACER_price_"
|
|
STRIPE_PLATINIUM_YEARLY_PRICE_ID: "REMPLACER_price_"
|
|
|
|
# --- Mot de passe du premier administrateur --------------------------------
|
|
# RECOMMANDE au premier deploiement : sans lui, BOOTSTRAP_ADMIN_EMAIL (voir
|
|
# ConfigMap) est cree sans mot de passe utilisable, et la premiere connexion
|
|
# depend alors de l'email « mot de passe oublie ».
|
|
#
|
|
# cd apps/backend && node scripts/setup/generate-admin-hash.js
|
|
#
|
|
# Collez le hash tel quel : en YAML Kubernetes, les $ ne se doublent PAS
|
|
# (contrairement a Docker Compose / Portainer, ou il faut ecrire $$).
|
|
#
|
|
# Applique au demarrage si le compte ne s'est jamais connecte, ou sur demande
|
|
# avec BOOTSTRAP_ADMIN_RESET_PASSWORD: "true" dans le ConfigMap. Le mot de
|
|
# passe d'un administrateur deja connecte n'est jamais ecrase.
|
|
#
|
|
# Le hash reste attaquable hors ligne : apres la premiere connexion, changez
|
|
# le mot de passe, RETIREZ cette valeur et reappliquez le Secret.
|
|
# La valeur doit commencer par "$argon2" (un mot de passe en clair est refuse).
|
|
BOOTSTRAP_ADMIN_PASSWORD_HASH: ""
|
|
|
|
# --- Pappers (registre SIRET) ----------------------------------------------
|
|
# Facultatif : sans cle, la verification SIRET est simplement ignoree
|
|
# (pappers-siret.adapter.ts emet un avertissement au demarrage).
|
|
PAPPERS_API_KEY: "REMPLACER"
|
|
|
|
# --- Documentation Swagger -------------------------------------------------
|
|
# Laisser les deux valeurs VIDES en production : main.ts desactive alors
|
|
# completement /api/docs. Ne les renseigner que si vous avez vraiment besoin
|
|
# d'exposer la documentation, auquel cas elle passe derriere Basic Auth.
|
|
SWAGGER_USERNAME: ""
|
|
SWAGGER_PASSWORD: ""
|
|
|
|
# --- Connecteurs transporteurs (facultatifs) -------------------------------
|
|
# A renseigner uniquement quand les contrats API sont signes. Un connecteur
|
|
# sans identifiants est ignore, il ne fait pas planter le demarrage.
|
|
MAERSK_API_KEY: ""
|
|
MAERSK_API_BASE_URL: ""
|
|
MSC_API_KEY: ""
|
|
MSC_API_URL: ""
|
|
CMACGM_CLIENT_ID: ""
|
|
CMACGM_CLIENT_SECRET: ""
|
|
CMACGM_API_URL: ""
|
|
HAPAG_API_KEY: ""
|
|
HAPAG_API_URL: ""
|
|
ONE_USERNAME: ""
|
|
ONE_PASSWORD: ""
|
|
ONE_API_URL: ""
|
|
|
|
---
|
|
# Token API Cloudflare utilise par cert-manager pour le defi DNS-01.
|
|
# Permissions minimales : Zone / DNS / Edit sur la seule zone xpeditis.com.
|
|
apiVersion: v1
|
|
kind: Secret
|
|
metadata:
|
|
name: cloudflare-api-token
|
|
namespace: cert-manager
|
|
labels:
|
|
app.kubernetes.io/part-of: xpeditis
|
|
type: Opaque
|
|
stringData:
|
|
api-token: "REMPLACER"
|
|
|
|
---
|
|
# Acces a Grafana. Mot de passe long : l'interface est exposee sur Internet,
|
|
# meme si elle est filtree par IP en amont.
|
|
apiVersion: v1
|
|
kind: Secret
|
|
metadata:
|
|
name: grafana-admin
|
|
namespace: monitoring
|
|
labels:
|
|
app.kubernetes.io/part-of: xpeditis
|
|
type: Opaque
|
|
stringData:
|
|
admin-user: "REMPLACER"
|
|
admin-password: "REMPLACER"
|
|
|
|
---
|
|
# Webhook Discord utilise par Alertmanager. Dans un Secret et non dans le
|
|
# ConfigMap : une URL de webhook permet de publier n'importe quoi dans le canal.
|
|
apiVersion: v1
|
|
kind: Secret
|
|
metadata:
|
|
name: alertmanager-secrets
|
|
namespace: monitoring
|
|
labels:
|
|
app.kubernetes.io/part-of: xpeditis
|
|
type: Opaque
|
|
stringData:
|
|
discord-webhook: "https://discord.com/api/webhooks/REMPLACER"
|