Mesures de seguretat

Com es protegeixen l’inici de sessió, els permisos, els secrets i les connexions

  1. On s’executa
  2. Inici de sessió
  3. Permisos
  4. Secrets desats
  5. Registre d’auditoria
  6. Al navegador
  7. Al servidor
  8. Connexions
    1. Connexions sortints
  9. Els contenidors

On s’executa

AnsibleForms és autoallotjat, a la teva infraestructura, amb les dades en una base de dades que gestiones tu.

  • No hi ha cap servei al núvol d’AnsibleForms ni cap servidor de llicències, ni telemetria ni comprovació d’actualitzacions.
  • La interfície la serveix la mateixa aplicació i no carrega res d’un altre lloc.
  • L’aplicació només es connecta als sistemes que configura un administrador, que es recullen a Connexions sortints.

Les parts i què conté cadascuna:

Part Què fa Què conté
Aplicació La interfície web, l’API REST, el planificador Cap dada pròpia: tot és a la base de dades
MySQL o MariaDB La base de dades de l’aplicació Usuaris, grups, credencials (xifrades), tasques amb les seves extravars i la seva sortida, el registre d’auditoria
Entorn d’execució (RTE) Executa els playbooks, en el seu propi contenidor Els fitxers de les tasques que executa, i els secrets d’una tasca només mentre aquesta s’executa
Carpeta persistent La configuració, els formularis, els playbooks i les pujades Els fitxers que fan servir els formularis i els playbooks

Consulta Com funciona per veure el conjunt, i RTE per a l’entorn d’execució.


Inici de sessió

Cada pàgina i cada crida a l’API que llegeix o canvia dades necessita un usuari que hagi iniciat la sessió. Els pocs punts finals oberts sense sessió serveixen el mateix inici de sessió, la versió, el nom i el logotip de la instància, la documentació de l’API i la configuració de la base de dades d’una primera arrencada, que ALLOW_SCHEMA_CREATION=0 tanca:

Mètode Com funciona
Comptes locals Contrasenyes amb hash bcrypt, una longitud mínima, i la contrasenya per defecte pública de l’administrador s’ha de canviar al primer inici de sessió
LDAP / Active Directory El directori comprova la contrasenya, i els seus grups s’assignen a rols. Vegeu LDAP
OpenID Connect, Entra ID Inici de sessió únic a través del teu proveïdor d’identitat, que també aporta la seva pròpia autenticació multifactor. Vegeu Autenticació
  • Els inicis de sessió fallits bloquegen el compte, i l’inici de sessió té un límit de freqüència.
  • Un inici de sessió retorna un token d’accés signat vàlid durant 30 minuts i un token de renovació vàlid durant 24 hores.
  • Els tokens es poden invalidar abans que caduquin: tancar la sessió, canviar la contrasenya, bloquejar un usuari i revocar un token d’API els invaliden a tots els nodes alhora, vegeu Tokens.
  • AnsibleForms no té autenticació multifactor pròpia: fes servir l’inici de sessió únic allà on sigui necessària.

Permisos

El que pot fer un usuari surt dels rols dels seus grups, i el servidor ho comprova a cada petició:

  • Els rols es defineixen a config.yaml: quins formularis veu un usuari i quines opcions té, com ara el dissenyador, les pàgines de configuració o les tasques d’altres usuaris.
  • El servidor comprova cada llançament amb les regles del formulari (els seus camps, els seus valors i l’accés de l’usuari), inclosos els llançaments a través de l’API REST, vegeu Validació del llançament.
  • Per disseny, el rol d’administrador executa qualsevol playbook. Els altres rols només obtenen el que se’ls concedeix: un usuari amb diversos rols obté una opció només quan cap d’aquests rols no la denega, de manera que n’hi ha prou amb un rol restrictiu per retirar-la.

Secrets desats

Les contrasenyes, els tokens i les claus es xifren abans d’escriure’s a la base de dades:

  • Tots els secrets desats (credencials, la contrasenya de vinculació LDAP, els tokens dels runners, els secrets de client de l’inici de sessió únic, les adreces dels webhooks i les claus d’API) es xifren amb AES-256 i un vector d’inicialització aleatori per a cada valor, sota el ENCRYPTION_SECRET que defineixes tu.
  • Cap crida a l’API ni cap pàgina de configuració no mostra un secret desat, i les còpies de seguretat ometen els secrets mestres.
  • Els secrets es poden quedar al teu vault: HashiCorp Vault i CyberArk es llegeixen quan una tasca els necessita.
  • Els secrets d’una tasca arriben a l’entorn d’execució segellats amb AES-256-GCM, amb una clau derivada del seu token.
  • Les extravars el nom de les quals sembla un secret s’emmascaren a la vista de la tasca, i els camps de contrasenya sempre, vegeu Dades de les tasques.

La resta de la base de dades (les tasques, les seves extravars i la seva sortida) es desa tal com és: protegeix-la amb el xifratge en repòs i el control d’accés de la mateixa base de dades, vegeu La base de dades.


Registre d’auditoria

Cada canvi, i cada intent que es rebutja, queda registrat:

  • Cada creació, canvi i eliminació, a través de la interfície o de l’API, s’escriu al registre d’auditoria amb l’usuari, la seva adreça, l’acció, l’objecte i el resultat. També es registren els rebuigs i els inicis de sessió, inclosos els fallits.
  • Els valors que semblen secrets s’oculten abans d’escriure’s.
  • El registre es conserva 365 dies per defecte, i es pot copiar a syslog per UDP, TCP o TLS.

Al navegador

La interfície està protegida contra el codi injectat en una pàgina:

  • Una Content-Security-Policy només permet els scripts i els frames propis de l’aplicació.
  • Cada resposta porta capçaleres de protecció: nosniff, protecció de frames i HSTS sobre HTTPS.
  • L’HTML dels formularis, dels textos d’ajuda i de les respostes del xat se saneja, i la sortida de les tasques s’escapa.

Al servidor

El codi que gestiona l’entrada dels usuaris evita les injeccions clàssiques:

  • Les consultes a la base de dades passen els valors com a paràmetres, mai com a text enganxat a la consulta.
  • Les ordres, git inclòs, s’executen a partir d’una llista d’arguments, mai amb un shell, de manera que els caràcters de shell no fan res.
  • Les expressions de servidor passen per un sanejador d’expressions, i les seves crides REST, per un filtre d’amfitrions.
  • El servidor MCP, l’assistent de xat i el punt final de mètriques estan desactivats fins que els activis.

Connexions

El trànsit cap a AnsibleForms i des d’AnsibleForms es pot xifrar d’extrem a extrem:

  • L’aplicació serveix HTTPS ella mateixa, o es posa darrere del teu proxy invers.
  • Un entorn d’execució parla amb l’aplicació per un WebSocket, wss:// amb una adreça HTTPS, i l’aplicació fixa el certificat d’un d’entrant, vegeu Modes de l’RTE.
  • LDAP, l’inici de sessió únic, els runners, git, els magatzems de secrets i les crides REST de les expressions comproven el certificat del servidor al qual es connecten, tret que un administrador desactivi la comprovació per a un servidor amb un certificat autosignat.

Connexions sortints

AnsibleForms només es connecta al que configura un administrador:

Connexió Quan
LDAP, OpenID Connect, Entra ID (inici de sessió de Microsoft i Graph) Quan es configura aquest mètode d’inici de sessió
AWX / AAP / Ascender, Semaphore, Rundeck, Jenkins Quan un formulari s’executa en aquest runner
Servidors git Quan es configura un repositori
Servidor de correu, Slack, Teams, Telegram, webhooks Quan es configura un canal de notificació
HashiCorp Vault, CyberArk Quan es configura un magatzem de secrets
Un proveïdor de models (Anthropic, OpenAI i altres) Només amb l’assistent de xat activat, que per defecte està desactivat
Amfitrions i API indicats als formularis Quan les expressions d’un formulari o un playbook els criden
Servidors syslog Quan es configura el reenviament de l’auditoria o dels registres

Els contenidors

Les imatges estan construïdes per funcionar amb els mínims privilegis possibles:

  • L’aplicació i l’entorn d’execució s’executen com l’usuari sense privilegis node, no com a root.
  • Estan construïdes sobre imatges Debian slim fixades per digest, vegeu Desenvolupament segur.
  • L’aplicació escolta en un sol port, el 8000.

Per als passos que protegeixen una instància nova, segueix Enduriment.