Aller au contenu principal

Secrets de la plateforme

Les services tiers lisent leurs identifiants dans des Secrets Kubernetes créés par External Secrets (deploy/external-secrets/secrets, composant Argo CD platform-secrets). Aucune valeur n'est versionnée.

Ordre d'amorçage​

  1. cert-manager crée l'autorité racine interne (cert-manager/eai-root-ca, deploy/cert-manager/cluster-issuers.yaml) ; le certificat TLS d'OpenBao est émis par cette autorité.
  2. OpenBao est initialisé et descellé (bao operator init, bao operator unseal), puis deploy/openbao/bootstrap.sh active KV v2 (kv), transit, l'auth kubernetes et les politiques.
  3. L'opérateur écrit chaque entrée du tableau ci-dessous : bao kv put kv/eai/platform/<namespace>/<secret> <propriété>=<valeur> ....
  4. Argo CD applique platform-secrets : la ClusterSecretStore openbao (deploy/openbao/k8s/clustersecretstore.yaml) synchronise les ExternalSecrets (rafraîchissement 1h, creationPolicy: Owner, deletionPolicy: Retain).
  5. Le Secret kyverno/cosign-public-key (clé cosign.pub) vient du module Terraform platform-bootstrap (variable cosign_public_key), car l'admission en a besoin avant tout le reste.

Entrées OpenBao​

Chemin OpenBao (kv)PropriétésConsommateurGénération
eai/platform/apisix/redis-acl-apisixapisix-passwordapisix/redis-acl-apisix: APISIX (limit-count Redis)openssl rand -base64 32 ; son sha256 va dans user.acl (utilisateur apisix)
eai/platform/eai-data/nats-userscontrol-plane, multimodal, workereai-data/nats-users: NATS (empreintes bcrypt)bcrypt d'un openssl rand -base64 32 : nats server passwd -p <mot de passe>
eai/platform/eai-data/redis-acluser.acleai-data/redis-acl: Redis (fichier ACL complet, deploy/data/redis/values.yaml)le fichier ACL avec #<sha256> par utilisateur : printf %s <mot de passe> | sha256sum
eai/platform/eai-data/redis-passwordpasswordeai-data/redis-password : Redis, utilisateur default (opérateur et réplication uniquement)openssl rand -base64 32
eai/platform/eai-data/redis-opik-acluser.acleai-data/redis-opik-acl: Redis dédié à Opik (fichier ACL, deploy/data/redis-opik/values.yaml)le fichier ACL avec #<sha256> par utilisateur : printf %s <mot de passe> | sha256sum
eai/platform/eai-data/redis-opik-passwordpasswordeai-data/redis-opik-password : Redis dédié à Opik, utilisateur default (opérateur et réplication uniquement)openssl rand -base64 32
eai/platform/eai-data/cnpg-s3ACCESS_KEY_ID, SECRET_ACCESS_KEYeai-data/cnpg-s3 : sauvegardes CloudNativePG (bucket eai-backups, préfixe cnpg)clés d'un utilisateur S3 limité au bucket eai-backups
eai/platform/velero/velero-s3cloudvelero/velero-s3 : Velero (fichier d'identifiants au format AWS)section [default] avec aws_access_key_id et aws_secret_access_key d'un utilisateur S3 limité au bucket Velero
eai/platform/eai-data/qdrant-api-keyapi-key, read-only-api-keyeai-data/qdrant-api-key: Qdrant (control plane, workers)openssl rand -base64 32 pour chacune
eai/platform/eai-data/temporal-db-credentialsusername, passwordeai-data/temporal-db-credentials: Temporal (rôle Postgres temporal)username temporal ; openssl rand -base64 32, identique au rôle CloudNativePG
eai/platform/eai-data/livekit-keysapi-key, api-secreteai-data/livekit-keys: LiveKit, même paire que EAI_LIVEKIT_API_KEY / EAI_LIVEKIT_API_SECRET du control planeapi-key : openssl rand -hex 8 ; api-secret : openssl rand -base64 48 (au moins 32 octets)
eai/platform/eai-data/livekit-redispasswordeai-data/livekit-redis: LiveKit (utilisateur ACL Redis livekit)openssl rand -base64 32 ; son sha256 va dans user.acl
eai/platform/eai-security/keycloak-bootstrap-adminusername, passwordeai-security/keycloak-bootstrap-admin: Keycloak (administrateur temporaire)openssl rand -base64 32
eai/platform/eai-security/keycloak-dbusername, passwordeai-security/keycloak-db: Keycloak (rôle Postgres keycloak)openssl rand -base64 32
eai/platform/eai-security/openfga-dburieai-security/openfga-db: OpenFGApostgres://openfga:<mot de passe>@eai-postgres-rw.eai-data.svc:5432/openfga?sslmode=verify-full&sslrootcert=/etc/openfga/db-ca/ca.crt
eai/platform/eai-security/openfga-presharedkeyseai-security/openfga-preshared: OpenFGA (également EAI_OPENFGA_API_TOKEN)openssl rand -base64 32, séparées par des virgules
eai/platform/observability/clickhouse-operator-accessusername, passwordobservability/clickhouse-operator-access: opérateur ClickHouse (métriques, schéma)username clickhouse_operator ; openssl rand -base64 32
eai/platform/observability/clickhouse-userseai-reader, eai-writer, opikobservability/clickhouse-users: ClickHouse (empreintes sha256 hexadécimales)printf %s <mot de passe> | sha256sum (le mot de passe en clair de opik va dans clickhouse-credentials et opik-backend-credentials)
eai/platform/observability/otel-opensearchpasswordobservability/otel-opensearch: OpenTelemetry Collector (utilisateur OpenSearch otel-writer, journaux)openssl rand -base64 32
eai/platform/observability/opensearch-internal-usersinternal_users.ymlobservability/opensearch-internal-users: OpenSearch (utilisateurs du greffon de sécurité, empreintes bcrypt)plugins/opensearch-security/tools/hash.sh -p <mot de passe> pour chaque utilisateur
eai/platform/observability/opensearch-bootstrappasswordobservability/opensearch-bootstrap: Job opensearch-bootstrap (modèles d'index, ISM, Security Analytics)openssl rand -base64 32
eai/platform/observability/jaeger-opensearchpassword, ca.crtobservability/jaeger-opensearch: Jaeger (utilisateur OpenSearch jaeger, stockage des intervalles)openssl rand -base64 32 ; ca.crt de eai-root-ca
eai/platform/observability/opik-backend-credentialsSTATE_DB_PASS, ANALYTICS_DB_PASS, ANALYTICS_DB_MIGRATIONS_PASS, REDIS_URL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEYobservability/opik-backend-credentials: Opik (MySQL fournie par le client, ClickHouse opik, redis-opik, bucket S3 opik)mot de passe MySQL du client ; mot de passe en clair de opik ; rediss://opik:<mot de passe>@redis-opik-master.eai-data.svc.cluster.local:6379/0 ; utilisateur S3 du stockage objet
eai/platform/observability/clickhouse-credentialspasswordobservability/clickhouse-credentials: Opik (adminUser de la ClickHouseInstallation opik-clickhouse)mot de passe en clair de opik
eai/platform/observability/otel-clickhousepasswordobservability/otel-clickhouse: OpenTelemetry Collector (ClickHouse otel)openssl rand -base64 32
eai/platform/observability/alertmanager-webhooksdefault-url, oncall-url, finops-url, security-urlobservability/alertmanager-webhooks: récepteurs AlertmanagerURL des webhooks des outils d'astreinte
eai/platform/spire-server/spire-server-dbpasswordspire-server/spire-server-db: serveur SPIRE (rôle Postgres spire)openssl rand -base64 32

Copies d'autorités de certification​

Les certificats publics (clé ca.crt uniquement, jamais tls.key) sont copiés par le fournisseur kubernetes d'External Secrets (deploy/external-secrets/secrets/ca-stores.yaml) : eai-root-ca vers apisix, observability et eai-data (eai-internal-ca) et vers spire-server (openbao-ca) ; la CA CloudNativePG eai-data/eai-postgres-ca vers eai-security et spire-server. Chaque magasin a son ServiceAccount et un Role limité à get sur le Secret source.