Saltar al contenido principal

Secretos

Todo lo sensible vive en Secret Manager del proyecto correspondiente. Nunca en el código, nunca en una variable de entorno escrita a mano en la consola.

Producción (aprendix-prod)​

SecretoQuién lo lee
nexo-app-keynexo-hub-backend
microsoft-cliente-secretonexo-hub-backend
github-lectura-tokennexo-hub-backend
ti-db-passwordlos dos backends: mismo usuario de MySQL
ti-app-keynexo-ti-backend
ti-aprendix-db-passwordnexo-ti-backend
ti-whatsapp-token, ti-whatsapp-app-secret, ti-whatsapp-verifynexo-ti-backend
github-packages-tokenCloud Build, no un servicio
gcs-service-account-jsonAprendix

Cada secreto se concede individualmente a la cuenta de servicio que lo necesita. Ninguna cuenta tiene acceso a todos.

Los dos tokens de GitHub, y por qué son dos​

github-packages-tokengithub-lectura-token
Lo leeCloud Build, al construirnexo-hub-backend, en caliente
Para quéInstalar @ucic-pe/uiLeer repos y commits
Alcancerepo + write:packagesSolo lectura de contenido

Podrían ser uno. Son dos a propósito: el de Packages lleva escritura sobre todos los repos de la organización, y usarlo también para una pantalla de consulta multiplicaría por dos los sitios desde donde se puede filtrar.

Pendiente de rotar

github-packages-token tiene más alcance del que necesita (repo y write:packages cuando le bastaría read:packages) y estuvo expuesto. Debe reemplazarse por un PAT de solo lectura de paquetes.

Quién lee el secreto durante un build​

Esta es la que hace perder una tarde. Los builds de Cloud Run corren como la cuenta de cómputo por defecto:

<número-de-proyecto>-compute@developer.gserviceaccount.com

No como la cuenta heredada <número>@cloudbuild.gserviceaccount.com, aunque el rol roles/cloudbuild.builds.builder siga apareciendo sobre esa última y todo invite a pensar lo contrario.

Dárselo a la cuenta equivocada no falla al otorgarlo: falla diez minutos después, dentro del build, con PermissionDenied sobre secretmanager.versions.access. Lo que manda es con qué identidad corre el build de verdad, y se lee así:

gcloud builds describe <id> --project <proyecto> --format="value(serviceAccount)"

Cómo comprobar esto​

gcloud secrets list --project aprendix-prod
gcloud secrets get-iam-policy <secreto> --project aprendix-prod