
# keenauth_environment_settings

El recurso `keenauth_environment_settings` gestiona los ajustes del entorno: idiomas, zona horaria, sesiones, registro, notificaciones de seguridad, recuperación de cuenta, MFA, Front-Channel Logout y los primeros factores permitidos. La protección contra ataques no forma parte de estos ajustes.

## Un objeto por entorno

Los ajustes existen una sola vez por entorno y siempre están presentes. Declara el recurso como máximo una vez por configuración del proveedor. Al crear el recurso se leen los ajustes actuales y solo se escribe lo que cambia tu configuración. Destruirlo solo lo elimina del estado; el entorno conserva sus ajustes.

## Solo se gestiona lo que escribes

Un atributo o grupo que omites conserva su valor actual. Quitar un atributo de la configuración mantiene su último valor. Las listas como `allowed_first_factors` y `signup.email_domains` son conjuntos, así que su orden no importa.

```terraform
resource "keenauth_environment_settings" "this" {
  default_zoneinfo      = "Europe/Istanbul"
  allowed_first_factors = ["passkey", "password", "social"]

  locales = {
    enabled = ["en", "tr"]
    default = "en"
  }

  session = {
    idle_timeout_s     = 86400
    absolute_timeout_s = 1209600
  }

  signup = {
    mode              = "open"
    email_domain_mode = "denylist"
    email_domains     = ["mailinator.com"]
  }
}
```

## Grupos

| Atributo | Qué controla |
|---|---|
| `locales` | Idiomas habilitados y el idioma predeterminado. El predeterminado debe estar habilitado. |
| `default_zoneinfo` | Zona horaria IANA predeterminada. |
| `session` | Tiempos de espera por inactividad y absoluto en segundos, límite de sesiones simultáneas y qué pasa al alcanzarlo, acción ante anomalías. El tiempo de espera por inactividad no puede ser mayor que el absoluto. |
| `signup` | Modo de registro y la lista de dominios de correo permitidos o bloqueados. Escribe los dominios en minúsculas; los nombres internacionalizados como A-labels (`xn--…`). |
| `security_notifications` | Interruptor general y los eventos que envían un correo de notificación. |
| `account_recovery` | Modo de recuperación, periodo de espera en horas y el enlace de soporte que se muestra cuando la recuperación está desactivada. |
| `mfa` | El correo como segundo factor y su nivel de garantía, la etiqueta del emisor de TOTP, los códigos de recuperación y su número. |
| `frontchannel_logout_enabled` | OpenID Connect Front-Channel Logout. |
| `allowed_first_factors` | Primeros factores permitidos en el entorno. Las políticas de aplicaciones y organizaciones solo pueden restringir este conjunto. |

## Cambios seguros

- Una actualización envía solo los campos modificados como JSON merge patch con `If-Match`. Si alguien cambió los ajustes después de crear el plan, la API responde `412` y nada cambia. Vuelve a ejecutar `plan`.
- Un cambio hecho en el panel aparece en el siguiente `plan` como deriva (drift), y `apply` lo revierte para los atributos que gestionas.
- Endurecer una política (sesiones más cortas, un límite de sesiones más bajo, registro o recuperación más estrictos, quitar un primer factor) se aplica de inmediato a las nuevas sesiones e inicios de sesión. Las sesiones existentes siguen hasta el final de su duración.

## Importación

```shell
tofu import keenauth_environment_settings.this environment-settings
```
