Instalación
26.1 25.2 25.1
26.1 25.2 25.1 Spanish English

Configuración de Secrets Manager

Esta sección recoge la información necesaria para preparar el gestor de secretos (Secrets Manager) que alimenta a Anjana Data Platform cuando el despliegue se realiza con Anjana Installer. Describe cuántos secretos deben crearse, cómo deben nombrarse, qué propiedades contiene cada uno y qué significa cada una de ellas.

El gestor de secretos equivalen a los ficheros de configuración en texto plano en despliegues en Ansible : las credenciales de persistencias, licencia y repositorios, así como los ajustes específicos de cada microservicio y de cada plugin, se almacenan como secretos y se recuperan en tiempo de arranque. En despliegues Onprem es el backend recomendado.

Quién lee qué. Los microservicios core (Kerno, Minerva, Hermes, Zeus, Viator, Portuno, Tot, Drittesta) nunca se conectan directamente al Secrets Manager: obtienen su configuración de Horus, y es Horus quien lee del gestor de secretos. Los Tot Plugins sí pueden conectarse de forma directa, ya que pueden desplegarse fuera de la red del core.

1. Cuántos secretos hay que crear

El número de secretos depende de cuánta configuración específica necesite el entorno. Solo el primero es obligatorio; el resto se crean únicamente cuando hace falta sobrescribir la configuración por defecto de un componente concreto.

Secreto

¿Obligatorio?

Cuántos

Contenido

Secreto de aplicación

Exactamente 1

Configuración y credenciales comunes a todos los microservicios: persistencias, almacenamiento de objetos, mensajería, licencia, repositorio de artefactos y credenciales de arranque del instalador.

Secreto por microservicio

Opcional

0..1 por microservicio

Propiedades que sustituyen a la configuración por defecto de ese microservicio, más su configuración específica (por ejemplo, proveedores de autenticación y aprovisionamiento en Zeus, proveedores de notificaciones en Hermes, etc).

Secreto por plugin

Opcional

0..1 por plugin desplegado

Propiedades que sustituyen a la configuración por defecto del plugin, más su información específica: conexión al sistema origen, ARI, identidad técnica del plugin, entidades a extraer, etc.

Un entorno mínimo funciona con un único secreto. Un entorno con SSO en Zeus, notificaciones en Hermes y dos plugins de extracción tendría cuatro secretos adicionales, cinco en total.

2. Convención de nombres y prefijo

Todos los secretos de un mismo entorno cuelgan de un prefijo común, que aísla ese entorno del resto. El nombre de cada secreto se compone del prefijo, el nombre de la aplicación y el perfil de Spring separados por guion bajo, y termina en barra:

{prefijo}/{nombre-de-la-aplicacion}_{perfil}/

El prefijo es la suma de /secret + /{env} siendo env el entorno en cuestión.

El perfil utilizado por todos los componentes de la plataforma es siempre default. Por tanto:

Secreto

Nombre

Ejemplo (prefijo /secret/pro)

Aplicación

{prefijo}/application_default/

/secret/pro/application_default/

Microservicio

{prefijo}/{microservicio}_default/

/secret/pro/zeus_default/

Plugin

{prefijo}/{plugin}_default/

/secret/pro/tot-plugin-jdbc_default/

La barra final forma parte del nombre del secreto. Debe respetarse tal y como se muestra: el nombre es application_default/, no application_default.

2.1 Ejemplo de un entorno real

Listado de secretos de un entorno de demostración con prefijo /secret/demo, tal y como se ven en la consola de AWS Secrets Manager:

/secret/demo/application_default/
/secret/demo/tot-plugin-jdbc_default/
/secret/demo/tot-plugin-jdbc-denodo_default/
/secret/demo/tot-plugin-jdbc-sqlserver_default/
/secret/demo/tot-plugin-ldap_default/

Este entorno ilustra el caso más habitual: el secreto de aplicación más un secreto por cada plugin desplegado, sin ningún secreto por microservicio, porque ninguno necesita sobrescribir su configuración por defecto.

El nombre de cada plugin se escribe en kebab-case (tot-plugin-jdbc-denodo), y el guion bajo aparece únicamente como separador del perfil. Conviene no confundirlo con el nombre del directorio de configuración local del plugin en el servidor, que sí utiliza guiones bajos (/{installFolder}/data/config/tot_plugin_jdbc/).

El prefijo se declara en dos sitios que deben coincidir: el parámetro secretsBackend.awsSecretsPrefix del instalador (configurable desde el wizard, sección Secrets Backend, o en installation.yaml) y la variable de entorno HORUS_SM_PREFIX del entorno. El valor por defecto es /secret/dev.

YAML
secretsBackend:
  installerBackend: AWS_SECRETS_MANAGER
  awsRegion: eu-central-1
  awsSecretsPrefix: /secret/pro

Cuando el instalador opera con este backend, la gestión de secretos es de solo lectura: las credenciales se crean y rotan externamente (IaC o consola del proveedor). Las operaciones de rotación desde la interfaz del instalador no están disponibles en este modo.

3. Formato del contenido de un secreto

Cada secreto es un único documento JSON plano (blob): un objeto sin anidamiento, donde cada clave es una propiedad y cada valor su contenido en formato texto. No se admiten objetos ni arrays anidados.

Conviven dos familias de claves:

  • Claves de infraestructura, en mayúsculas con guion bajo (DB_PASS, MONGO_URI, S3_ACCESS_KEY…). Tienen un mapeo fijo a la configuración interna del instalador y de la plataforma. Solo son válidas las claves recogidas en la tabla del apartado 4.

  • Propiedades de configuración, en notación de punto (app.base-url, anjana.messaging.google-chat.webhook-url…). Se inyectan como propiedades de Spring y admiten cualquier propiedad soportada por el componente.

3.1 Equivalencia entre YAML y propiedad del Secrets Manager

La documentación de configuración de la plataforma expresa históricamente los ajustes en YAML. Para trasladar cualquiera de esas configuraciones al gestor de secretos basta con aplanar la ruta del YAML, uniendo cada nivel con un punto y respetando la escritura exacta de cada tramo. El valor se copia tal cual, como cadena de texto.

En YAML:

YAML
anjana:
  messaging:
    google-chat:
      webhook-url: https://chat.googleapis.com/v1/spaces/...

La misma configuración en el gestor de secretos:

JSON
{
  "anjana.messaging.google-chat.webhook-url": "https://chat.googleapis.com/v1/spaces/..."
}

Para las propiedades que en YAML son listas, se emplea la notación indexada habitual de Spring: clave[0], clave[1], etc.

Las páginas de configuración de integraciones, autenticación y notificaciones documentan hoy los parámetros en YAML. Esa documentación se está actualizando para recoger también la clave equivalente en el gestor de secretos. Mientras tanto, la regla de conversión anterior aplica a todas ellas.

4. Secreto de aplicación

Es el único secreto obligatorio. Contiene la configuración compartida por todos los microservicios de la plataforma y las credenciales que el propio instalador necesita para arrancar. Se crea con el nombre {prefijo}/application_default/.

4.1 Base de datos relacional (PostgreSQL)

Clave

Obligatoria

Descripción

DB_URL

Host y puerto del servidor PostgreSQL, en formato host:puerto. En instancias gestionadas (AWS RDS, Azure Database, Cloud SQL) es el endpoint del servicio.

DB_USER

Usuario con permisos sobre los esquemas de Anjana.

DB_PASS

Contraseña del usuario anterior.

4.2 Base de datos documental (MongoDB / DocumentDB)

Clave

Obligatoria

Descripción

MONGO_URI

Cadena de conexión completa, incluidas credenciales y parámetros de TLS, replica set y preferencia de lectura. Se proporciona como una única URI en lugar de campos separados.

4.3 Motor de indexación (Solr)

Clave

Obligatoria

Descripción

INDEX_URL

Endpoint del motor de indexación utilizado por Minerva, incluida la ruta base (/solr).

INDEX_USER

Usuario de acceso al motor de indexación.

INDEX_PASS

Contraseña del usuario anterior.

4.4 Almacenamiento de objetos (S3 / SeaweedFS)

Clave

Obligatoria

Descripción

S3_TYPE

Tipo de backend de almacenamiento de objetos. aws_s3 para AWS S3; para el almacenamiento local desplegado por la propia plataforma se emplea el valor correspondiente a SeaweedFS.

S3_REGION

Región del servicio de almacenamiento.

S3_ACCESS_KEY

Identificador de la clave de acceso.

S3_SECRET_KEY

Clave secreta asociada.

S3_BUCKET_CDN

Bucket de contenidos estáticos servidos por el proxy de la plataforma (imágenes, logos, adjuntos de interfaz).

S3_BUCKET_DSA

Bucket de documentación asociada a los DSA.

S3_BUCKET_IMPORTS

Bucket de ficheros de importación masiva de objetos de gobierno.

S3_BUCKET_TEXTAREA

Bucket de adjuntos e imágenes incrustadas en los campos de texto enriquecido.

S3_BUCKET_WORKFLOWS

Bucket de adjuntos generados durante la ejecución de Workflows.

4.5 Mensajería (RabbitMQ)

Clave

Obligatoria

Descripción

RABBITMQ_HOST

Host del broker de mensajería.

RABBITMQ_PORT

Puerto del broker. 5672 sin TLS, 5671 con TLS.

RABBITMQ_USER

Usuario del broker.

RABBITMQ_PASS

Contraseña del usuario anterior.

RABBITMQ_SSL

true o false. Debe ser coherente con el puerto declarado.

4.6 Caché (Valkey)

Clave

Obligatoria

Descripción

VALKEY_HOST

Host del servicio de caché. En instancias gestionadas, el endpoint del nodo primario.

VALKEY_PORT

Puerto del servicio. Habitualmente 6379.

VALKEY_PASS

Contraseña de acceso.

VALKEY_SSL

true o false, según si el servicio exige cifrado en tránsito.

4.7 Repositorio de artefactos (Nexus)

Clave

Obligatoria

Descripción

NEXUS_USER

Usuario de acceso al repositorio de Anjana Data, solicitado previamente a su manager de Customers Success o responsable de Partners. El instalador lo utiliza para descargar los artefactos de la plataforma.

NEXUS_PASS

Contraseña del usuario anterior.

4.8 Licencia

Clave

Obligatoria

Descripción

LICENSE_INSTALLATION_CODE

Código de instalación de la licencia, proporcionado por Anjana Data.

LICENSE_PRIVATE_KEY

Clave privada de la instalación, en Base64, utilizada para firmar las peticiones al servicio de licencias.

LICENSE_PUBLIC_KEY

Clave pública de Anjana Data, en Base64, utilizada para verificar la respuesta del servicio de licencias.

SCHEDULING_LICENSE

No

Expresión cron que define la periodicidad de la validación de licencia contra veltesta.anjanadata.com. Si se omite, se aplica la periodicidad por defecto.

4.9 Credenciales de arranque del instalador

Clave

Obligatoria

Descripción

INSTALLER_ADMIN_PASSWORD

Contraseña inicial del usuario admin de la consola del instalador. Si no se define, el instalador genera una aleatoria y la muestra una única vez en el log de arranque.

INSTALLER_DEV_PASSWORD

No

Contraseña inicial del usuario dev, disponible únicamente cuando el instalador se ejecuta en modo desarrollo.

INSTALLER_BUNDLE_SIGNING_KEY

No

Clave de firma HMAC del config bundle. Permite verificar su integridad al restaurarlo en una máquina de reemplazo.

4.10 Propiedades de plataforma

Además de las claves de infraestructura anteriores, el secreto de aplicación admite propiedades de configuración en notación de punto, comunes a todos los microservicios.

Clave

Obligatoria

Descripción

app.base-url

URL pública del Portal de Datos. Se utiliza para construir los enlaces incluidos en notificaciones y correos, y como URL de retorno en los flujos de autenticación.

management.endpoint.env.show-values

No

Controla si los endpoints de Actuator muestran el valor de las variables de entorno. Valores: NEVER, WHEN_AUTHORIZED, ALWAYS.

management.endpoint.configprops.show-values

No

Equivalente al anterior para las propiedades de configuración expuestas por Actuator.

Las dos propiedades show-values con valor ALWAYS exponen las credenciales en claro a través de los endpoints de Actuator. Es un ajuste válido en entornos de diagnóstico, pero en producción debe utilizarse NEVER o WHEN_AUTHORIZED, salvo que el acceso a Actuator esté restringido por red.

4.11 Ejemplo completo anonimizado

Contenido de referencia del secreto {prefijo}/application_default/. Todos los valores son ficticios y deben sustituirse por los del entorno.

JSON
{
  "DB_URL": "anjana-pro.rds.eu-central-1.amazonaws.com:5432",
  "DB_USER": "anjana_app",
  "DB_PASS": "<contrasena-postgresql>",

  "MONGO_URI": "mongodb://anjana_app:<contrasena-mongodb>@anjana-pro-docdb.cluster.eu-central-1.docdb.amazonaws.com:27017/anjana?tls=true&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false",

  "INDEX_URL": "solr.pro.svc.cluster.local:8983/solr",
  "INDEX_USER": "anjana",
  "INDEX_PASS": "<contrasena-solr>",

  "S3_TYPE": "aws_s3",
  "S3_REGION": "eu-central-1",
  "S3_ACCESS_KEY": "<access-key-id>",
  "S3_SECRET_KEY": "<secret-access-key>",
  "S3_BUCKET_CDN": "cdn-pro-anjana",
  "S3_BUCKET_DSA": "dsa-pro-anjana",
  "S3_BUCKET_IMPORTS": "imports-pro-anjana",
  "S3_BUCKET_TEXTAREA": "textarea-pro-anjana",
  "S3_BUCKET_WORKFLOWS": "workflows-pro-anjana",

  "RABBITMQ_HOST": "rabbitmq.pro.svc.cluster.local",
  "RABBITMQ_PORT": "5671",
  "RABBITMQ_USER": "anjana_mq",
  "RABBITMQ_PASS": "<contrasena-rabbitmq>",
  "RABBITMQ_SSL": "true",

  "VALKEY_HOST": "anjana-pro-valkey.cache.eu-central-1.amazonaws.com",
  "VALKEY_PORT": "6379",
  "VALKEY_PASS": "<contrasena-valkey>",
  "VALKEY_SSL": "true",

  "NEXUS_USER": "<usuario-nexus>",
  "NEXUS_PASS": "<contrasena-nexus>",

  "LICENSE_INSTALLATION_CODE": "<codigo-de-instalacion>",
  "LICENSE_PRIVATE_KEY": "<clave-privada-de-la-instalacion-en-base64>",
  "LICENSE_PUBLIC_KEY": "<clave-publica-de-anjana-data-en-base64>",
  "SCHEDULING_LICENSE": "0 */2 * * * *",

  "INSTALLER_ADMIN_PASSWORD": "<contrasena-inicial-admin>",
  "INSTALLER_DEV_PASSWORD": "<contrasena-inicial-dev>",

  "app.base-url": "https://anjana.miempresa.com/",
  "management.endpoint.env.show-values": "WHEN_AUTHORIZED",
  "management.endpoint.configprops.show-values": "WHEN_AUTHORIZED"
}

5. Secretos por microservicio

Son opcionales y se crean únicamente cuando un microservicio necesita configuración propia que no forma parte del secreto de aplicación. Su contenido sobrescribe la configuración por defecto de ese microservicio y se acumula sobre lo definido en el secreto de aplicación.

Microservicio

Nombre del secreto

Casos de uso habituales

Zeus

{prefijo}/zeus_default/

Proveedores de autenticación (SSO OIDC, SAML2, LDAP) y aprovisionamiento de usuarios desde directorios externos.

Hermes

{prefijo}/hermes_default/

Proveedores de notificaciones (Email/SMTP, Google Chat, Slack, Microsoft Teams), timeouts HTTP y pools de envío.

Kerno

{prefijo}/kerno_default/

Ajustes específicos de la API de gobierno.

Minerva

{prefijo}/minerva_default/

Ajustes del motor de búsqueda e indexación.

Viator

{prefijo}/viator_default/

Ajustes de movimiento de datos.

Portuno

{prefijo}/portuno_default/

Ajustes de administración y configuración.

Tot

{prefijo}/tot_default/

Ajustes del runtime de plugins.

Drittesta

{prefijo}/drittesta_default/

Ajustes de validación de licencias e integraciones de terceros.

Horus

{prefijo}/horus_default/

Ajustes del servidor de configuración y descubrimiento.

5.1 Ejemplo: Zeus

Traslado a propiedades del gestor de secretos de la configuración de aprovisionamiento con Microsoft Azure (Graph API). El equivalente en YAML se documenta en el apartado "Parte 2: Configuración en application.yml" de Microsoft Azure (Graph API).

JSON
{
  "security.provisioning.providers.azure-graph.azure-prod.tenant-id": "<tenant-id>",
  "security.provisioning.providers.azure-graph.azure-prod.client-id": "<client-id>",
  "security.provisioning.providers.azure-graph.azure-prod.client-secret": "<client-secret>",
  "security.provisioning.providers.azure-graph.azure-prod.service-principal-id": "<object-id-de-la-aplicacion-empresarial>"
}

La configuración de autenticación mediante SSO se documenta en SSO Azure (apartado "3. Configuración por proveedor"). El contenido de ejemplo completo de este secreto se publica en la documentación de cada mecanismo de autenticación y aprovisionamiento.

5.2 Ejemplo: Hermes

Traslado a propiedades del gestor de secretos de la configuración de proveedores de notificaciones. El equivalente en YAML se documenta en el apartado "1. Configuración en application.yaml" de Proveedores de notificaciones.

JSON
{
  "anjana.messaging.google-chat.webhook-url": "https://chat.googleapis.com/v1/spaces/<space>/messages?key=<key>&token=<token>",
  "anjana.messaging.slack.webhook-url": "https://hooks.slack.com/services/<t>/<b>/<token>",
  "anjana.messaging.teams.webhook-url": "https://<tenant>.webhook.office.com/webhookb2/<ruta>",
  "anjana.messaging.connectTimeoutSeconds": "10",
  "anjana.messaging.readTimeoutSeconds": "30",
  "anjana.messaging.writeTimeoutSeconds": "10",
  "spring.mail.host": "smtp.miempresa.com",
  "spring.mail.port": "587",
  "spring.mail.username": "notificaciones@miempresa.com",
  "spring.mail.password": "<contrasena-smtp>",
  "spring.mail.properties.mail.smtp.auth": "true",
  "spring.mail.properties.mail.smtp.starttls.enable": "true"
}

El contenido de ejemplo completo del secreto de cada microservicio se publica en su propia página de documentación, dentro de las secciones de configuración correspondientes.

6. Secretos por plugin

Cada Tot Plugin desplegado puede disponer de su propio secreto, con el nombre {prefijo}/{plugin}_default/. Su contenido sobrescribe la configuración por defecto del plugin e incorpora su información específica: parámetros de conexión al sistema origen, ARI asociado, identidad técnica con la que el plugin opera sobre el sistema gobernado y entidades a extraer, entre otros.

A diferencia de los microservicios core, los plugins pueden conectarse directamente al gestor de secretos sin pasar por Horus, ya que pueden desplegarse fuera de la red del core. Los mecanismos de conexión directa a AWS Secrets Manager, GCP Secrets Manager y Azure Key Vault se detallan en Vaults.

El contenido de ejemplo del secreto de cada plugin se publica en la documentación de la integración correspondiente, dentro de Integraciones → Tot Plugins.

7. Permisos de lectura requeridos

La identidad con la que el instalador y la plataforma acceden al gestor de secretos debe poder leer todos los secretos del prefijo del entorno, y únicamente los de ese prefijo. En AWS Secrets Manager, los permisos necesarios son secretsmanager:GetSecretValue y secretsmanager:DescribeSecret sobre {prefijo}/*.

La identidad puede resolverse mediante el perfil de instancia o el rol asociado al despliegue, o bien mediante un rol asumido explícitamente con el parámetro secretsBackend.awsRoleArn del instalador, necesario en escenarios cross-account. Se recomienda evitar claves estáticas siempre que el entorno de despliegue permita asociar una identidad gestionada.

Esta sección está dirigida principalmente a administradores técnicos y a los equipos de arquitectura, seguridad y operaciones responsables de preparar el entorno antes de ejecutar la instalación de Anjana Data Platform.