Autorización granular con Amazon Verified Permissions - Control de acceso con políticas Cedar
Presentamos la técnica de externalizar la lógica de autorización del código de la aplicación con el lenguaje de políticas Cedar, y lograr decisiones de autorización basadas en tokens con la integración de Cognito.
Descripcion general de Verified Permissions
Verified Permissions es un servicio que proporciona autorización granular de aplicaciones de forma gestionada. Tradicionalmente, la logica de autorizacion se implementaba con sentencias if dentro del codigo de la aplicacion, requiriendo despliegues de codigo para cambios de politicas. Verified Permissions externaliza las reglas de autorizacion con el lenguaje de politicas Cedar, permitiendo cambios de politicas sin despliegues de codigo. Cedar es un lenguaje de politicas de autorizacion de codigo abierto desarrollado por Amazon, disenado para soportar verificacion formal. La evaluación de políticas es determinista - la misma entrada produce la misma decisión de autorización, lo que sirve para la depuración y la auditoría.
Politicas Cedar e integracion con Cognito
Las politicas Cedar se componen de sentencias permit (permitir) y forbid (denegar). Se escriben reglas de forma declarativa como "el usuario A tiene permiso para la accion read en el documento X" o "el rol de administrador tiene permiso para todas las acciones en todos los recursos". Las políticas forbid tienen prioridad sobre permit, por lo que se puede implementar la denegación de acceso bajo condiciones específicas. Las clausulas condicionales (when/unless) permiten condiciones dinamicas como "permitir acceso solo durante el horario laboral" o "permitir solo cuando la IP esta dentro del rango de la red corporativa". Con la integración de Cognito, se utilizan los claims del token de ID (grupos, atributos personalizados) como atributos del principal en las políticas Cedar para decisiones de autorización basadas en tokens. Se puede colocar una función Lambda como autorizador de API Gateway que llama a la API IsAuthorized de Verified Permissions.
Policy Store y autorizacion por lotes
El Policy Store es una coleccion de politicas Cedar que se crea por aplicacion. Se definen tipos de entidad (User, Document, Folder) y acciones (Read, Write, Delete) en el esquema y se valida con él la sintaxis de las políticas. Definir un esquema previene la creacion de politicas que referencien tipos de entidad o acciones inexistentes. La API IsAuthorized autoriza una única solicitud, y la API BatchIsAuthorized autoriza varias solicitudes a la vez. Usar la API por lotes para determinar de una vez los derechos de acceso a múltiples recursos en pantallas de listas puede reducir el número de llamadas en comparación con llamadas individuales repetidas. Las plantillas de politicas definen patrones comunes con marcadores de posicion, y las politicas vinculadas a plantillas enlazan dinamicamente usuarios y recursos. Las llamadas a la API registradas con CloudTrail se pueden usar para auditar el acceso.
Mejores practicas de diseno y errores comunes
Para el diseño de políticas, un enfoque es combinar RBAC (basado en roles) y ABAC (basado en atributos). Los permisos basicos se gestionan mediante roles, y las condiciones granulares como "solo el propietario del documento puede eliminar" se expresan mediante atributos. Un error comun es la dificultad de depuracion a medida que crece el numero de politicas. Cuando las políticas se acumulan en un solo Policy Store, rastrear qué política evaluó una decisión de autorización específica se vuelve difícil. La solucion es usar plantillas de politicas para abstraer patrones comunes y mantener controlable el numero de politicas concretas. Además, las herramientas de verificación formal de Cedar integradas en pipelines CI detectan conflictos de políticas (donde tanto permit como forbid se aplican a la misma solicitud) antes del despliegue. Al implementar cache de resultados de autorizacion, el TTL del cache implica un compromiso con los requisitos de reflejo inmediato de cambios de politicas. Las aplicaciones que requieren respuesta en tiempo real usan TTLs cortos, mientras que las aplicaciones con alta frecuencia de lectura y cambios de políticas raros usan TTLs más largos.
Comparacion con otros enfoques de autorizacion
Existen multiples enfoques para la autorizacion de aplicaciones, seleccionados segun los requisitos. Las políticas IAM son para el control de acceso a recursos AWS y no cubren la autorización basada en lógica de negocio dentro de aplicaciones (ej: "solo el creador del documento puede editar"). Verified Permissions maneja esta autorizacion a nivel de aplicacion. Open Policy Agent (OPA) permite descripciones de politicas de proposito general en el lenguaje Rego, pero requiere alojamiento y gestion de disponibilidad del motor de politicas por cuenta propia. Verified Permissions es un servicio gestionado, por lo que no hay que alojar un motor de políticas por cuenta propia. La autorizacion basada en grupos de Cognito es adecuada para RBAC simple pero no soporta control granular a nivel de recurso ni gestion declarativa de politicas. Para SaaS multi-tenant, se pueden aislar los Policy Stores por tenant para que las políticas no interfieran entre tenants.
Precios de Verified Permissions
Los precios de Verified Permissions se basan en el número de solicitudes de autorización única, autorización por lotes y gestión de políticas. Con la integracion de Cognito, se separa la autenticacion de usuarios (Cognito) y la autorizacion (Verified Permissions), externalizando la logica de autorizacion del codigo de la aplicacion. Para aplicaciones con alto volumen de solicitudes, cachear resultados de autorización para reducir el número de solicitudes puede bajar los costos. Cada llamada a la API BatchIsAuthorized se cuenta como una solicitud, independientemente del número de autorizaciones que incluya.
Resumen
Verified Permissions es un servicio que externaliza la autorizacion de aplicaciones con el lenguaje de politicas Cedar. Separa la autenticación de usuarios y la autorización con la integración de Cognito, y valida la sintaxis de las políticas con el esquema del Policy Store. La API BatchIsAuthorized autoriza múltiples solicitudes de forma masiva, y las plantillas de políticas gestionan patrones comunes. Al combinar RBAC y ABAC, se pueden manejar tanto la gestión de roles como el control de acceso condicional granular.
Referencias (recursos oficiales de AWS)
Las fuentes primarias de esta página son el sitio web y la documentación oficiales de AWS. Consulta las páginas oficiales siguientes para conocer las especificaciones y los precios más recientes.
- Amazon Verified Permissions (página oficial)
- Amazon Cognito (página oficial)
- Amazon API Gateway (página oficial)
- Documentación de AWS (oficial)
Si esta página y la documentación oficial difieren, prevalece la documentación oficial.