Proveedor de OpenTofu y Terraform

El proveedor keenauth/keenauth gestiona la configuración de un entorno de KeenAuth como código. Llama a la API de gestión, usa el protocolo de plugins 6 y funciona con OpenTofu y Terraform. Todavía no se publica en un registro de proveedores.

Autenticación y destino

El proveedor gestiona el entorno al que pertenece su credencial. Para gestionar varios entornos, configure un alias de proveedor por entorno. Se autentica de exactamente una de dos formas: con una clave de API de gestión o sin clave, como una management application con private_key_jwt. Definir ambas es un error.

Configuración Variable de entorno Descripción
api_key KEENAUTH_API_KEY Clave de API de gestión. Prefiera la variable de entorno. La clave nunca se escribe en los archivos de estado o de plan.
client_id KEENAUTH_CLIENT_ID ID (app_…) de una aplicación management, en lugar de api_key. Necesita private_key e issuer.
private_key KEENAUTH_PRIVATE_KEY Clave privada PEM PKCS#8 cuya clave pública está registrada en la aplicación: EC P-256, EC P-384, Ed25519 o RSA de al menos 2048 bits. Prefiera la variable de entorno. Nunca se escribe en el estado.
private_key_algorithm PS256 (predeterminado) o RS256, solo para una clave RSA.
issuer KEENAUTH_ISSUER El host predeterminado del entorno, https://<environment>.<region>.keenauth.app. El proveedor obtiene su token de <issuer>/oauth2/token.
scopes Permisos que se solicitan con client_id. Si se omite, se aplican los scopes predeterminados de la concesión.
region KEENAUTH_REGION eu (predeterminado) o us. La dirección de la API es https://api.eu.keenauth.com/v1 / https://api.us.keenauth.com/v1.
base_url KEENAUTH_BASE_URL Dirección explícita de la API. Solo se acepta https://<host>.keenauth.com/v1, además de direcciones de bucle local para pruebas locales.
terraform {
  required_providers {
    keenauth = { source = "keenauth/keenauth" }
  }
}

provider "keenauth" {
  region = "eu"
}

Autenticación sin clave con private_key_jwt

  1. Cree una aplicación con app_type = "management" y un registro keenauth_management_client con los permisos que necesite la configuración.
  2. Registre la clave pública de un par de claves en la aplicación (POST /v1/applications/{application_id}/credentials con type: public_key, la CLI o el panel).
  3. Proporcione al proveedor el ID de la aplicación, la clave privada y el emisor:
export KEENAUTH_CLIENT_ID="app_..."
export KEENAUTH_PRIVATE_KEY="$(cat ops-automation.pk8.pem)"
export KEENAUTH_ISSUER="https://acme.eu.keenauth.app"
tofu plan

Para cada token de gestión, el proveedor firma una aserción de cliente (RFC 7523) válida durante 60 segundos: iss y sub son el ID de cliente, aud es el emisor, jti es aleatorio y kid es la huella RFC 7638 de la clave. Intercambia la aserción mediante la concesión client_credentials por un token de 10 minutos y obtiene uno nuevo un minuto antes de que expire el anterior. El token nunca puede tener más permisos que el registro keenauth_management_client de la aplicación. Los endpoints que solo aceptan una clave de API, como los clientes de gestión, necesitan un alias de proveedor configurado con api_key.

Recursos

Nombre Tipo Qué gestiona
keenauth_application resource Una aplicación (cliente de OAuth 2.0 / OpenID Connect).
keenauth_connection resource Una conexión de inicio de sesión: base de datos, sin contraseña, clave de acceso, social o empresarial.
keenauth_connection_oidc_config resource La configuración de la parte confiante de una conexión OIDC empresarial, con un secreto de cliente de solo escritura (OpenTofu o Terraform 1.11+). Se importa con el ID de la conexión. Destruir solo lo elimina del estado.
keenauth_environment_settings resource Configuración del entorno: idiomas, sesiones, registro, notificaciones, recuperación, MFA, primeros factores. Una por entorno.
keenauth_attack_protection resource Protección frente a ataques: fuerza bruta, limitación por IP, relleno de credenciales, bots, contraseñas filtradas, registro, fraude por SMS, política de riesgo. Una por entorno.
keenauth_branding resource El tema del entorno del borrador de marca. Uno por entorno.
keenauth_custom_domain resource Un dominio personalizado de inicio de sesión.
keenauth_api_key resource Una clave de API de gestión: solo importación; destruir la revoca.
keenauth_organization resource Una organización B2B: nombre, slug, ID externo, metadatos, color de marca y límite de miembros. Destruir la elimina de inmediato; las acciones de estado (deshabilitar, habilitar, cancelar eliminación) permanecen en la CLI y el panel.
keenauth_organization_role resource Un rol específico de organización y su conjunto de permisos (plan Business). Se importa con <org_id>/<key>.
keenauth_permission resource Un permiso (scope de OAuth) de una API con los textos de su pantalla de consentimiento. Se importa con <api_id>/<value>.
keenauth_role resource Un rol del entorno y su conjunto completo de permisos. La asignación de usuarios y membresías no son recursos.
keenauth_organization_domain resource Un dominio de una organización para captura de dominio y enrutamiento de SSO. La verificación sigue siendo una acción.
keenauth_session_policy resource La duración de las sesiones de una organización; solo puede ser más estricta que la del entorno (plan Enterprise).
keenauth_mfa_policy resource Las reglas de MFA de una organización; solo pueden ser más estrictas que las del entorno.
keenauth_email_template resource El contenido publicado de una plantilla de correo (familia e idioma); plan Startup. Se importa con <family>/<locale>. Destruir solo lo elimina del estado.
keenauth_management_client resource Los permisos de la API de gestión y la lista de IP permitidas de una aplicación management. Se importa con el ID de la aplicación.
keenauth_directory resource Un directorio SCIM de una organización y su configuración de aprovisionamiento; name y la configuración se cambian en su lugar, mientras que organization_id, scim_host y type lo reemplazan. Se importa con el ID del directorio.
keenauth_directory_role_mapping resource Asigna un grupo de directorio SCIM a un rol; cualquier cambio lo reemplaza. Se importa con <directory_id>/<mapping_id>.
keenauth_directory_token resource Un token SCIM de un directorio, guardado en el estado solo cifrado con su clave pública RSA; cualquier cambio crea un token nuevo, y destruir lo revoca. No se puede importar.
keenauth_webhook_endpoint resource Un endpoint de webhook; todos los argumentos cambian en su lugar. El secreto de firma se guarda en el estado solo cifrado con su clave pública RSA; cambiar la clave o rotation_trigger lo rota. Se importa con el ID o la clave del endpoint.
keenauth_application data source Lee una aplicación por id o key.
keenauth_connection data source Lee una conexión por id o key.
keenauth_organization data source Lee una organización por id o slug.
keenauth_role data source Lee un rol del entorno por id o key.
keenauth_environment data source Lee el entorno de la clave de API: ID, tipo, región, celda, estado y plan.
resource "keenauth_connection" "google" {
  key      = "google"
  type     = "social"
  strategy = "google"
  name     = "google"
  status   = "active"
  settings = jsonencode({ scopes = ["openid", "email", "profile"] })
}

resource "keenauth_application" "storefront" {
  key            = "storefront"
  name           = "Storefront"
  app_type       = "web"
  party          = "first_party"
  redirect_uris  = ["https://shop.example.com/callback"]
  connection_ids = [keenauth_connection.google.id]
}

Importación

Las aplicaciones y las conexiones se pueden importar por su key o su ID, un dominio personalizado por su nombre de host o su ID, y una clave de API por su ID:

tofu import keenauth_application.storefront storefront
tofu import keenauth_connection.google conn_01j9zq3v8c5m2x7k4t6r1n0b3d
tofu import keenauth_custom_domain.login login.example.com

La configuración del entorno, la protección frente a ataques y el borrador de marca existen una vez por entorno; impórtelos con los ID fijos environment-settings, attack-protection y branding. Destruir uno de ellos solo lo elimina del estado.

Cambios seguros

Secretos

Ningún recurso almacena un secreto en texto plano en el estado. Los secretos que entrega a KeenAuth son argumentos de solo escritura (*_wo): el proveedor los envía pero nunca los escribe en los archivos de estado o de plan, y los vuelve a enviar solo cuando cambia su *_wo_version. Necesitan OpenTofu o Terraform 1.11 o posterior. Hoy se trata del secreto de cliente de una conexión OIDC empresarial (keenauth_connection_oidc_config). Los secretos de cliente de las aplicaciones y las claves de firma no los gestiona esta versión del proveedor; créelos y rótelos en el panel o con la CLI. Los secretos que genera KeenAuth no pueden ser de solo escritura, porque un argumento de solo escritura solo transporta un valor desde la configuración hacia el proveedor. El proveedor nunca crea claves de API, porque la clave en bruto terminaría en el estado: cree una clave con la CLI, guárdela en su gestor de secretos e impórtela en keenauth_api_key por su ID. La API muestra el token SCIM de un directorio una sola vez, así que el proveedor revoca el token que devuelve la creación de un directorio y nunca lo conserva; keenauth_directory_token crea el token para su proveedor de identidad y lo guarda en el estado solo cifrado con su clave pública RSA. keenauth_webhook_endpoint guarda el secreto de firma del webhook de la misma forma, solo cifrado con su public_key, y lo descarta cuando no se indica ninguna clave. Los settings de una conexión no deben contener secretos; la API rechaza los ajustes con apariencia de secreto.

Límites de esta versión