La política como código es un método para expresar reglas y restricciones—incluyendo seguridad, cumplimiento y políticas organizacionales— en código legible por máquina que se aplica automáticamente en arquitecturas de TI y pipelines de DevOps.
En lugar de depender de humanos para verificar el cumplimiento o recordar las reglas de seguridad, esas reglas existen como lógica ejecutable cada vez que un desarrollador o sistema propone un cambio o solicitud. Si alguien envía un cambio, un motor de políticas evalúa automáticamente el cambio según las reglas codificadas y lo permite, lo deniega o lo señala.
Este proceso aleja las prácticas de gestión de políticas de los documentos estáticos y los lleva hacia una superficie de control viva y aplicada continuamente e integrada en el pipeline de entrega.
Las reglas basadas en código ayudan a garantizar que se apliquen las mismas políticas en todas partes, de manera repetible y escalable. Los motores de políticas pueden ejecutar comprobaciones automatizadas en segundos durante las compilaciones o despliegues, reduciendo los ciclos de feedback y ayudando a los equipos de DevOps a evitar sorpresas de seguridad o cumplimiento en etapas tardías.
PaC permite a las empresas mejorar su postura general de ciberseguridad y mantener el cumplimiento de los estándares regulatorios y de la industria. Además, el tratamiento de políticas como código se alinea con una transición más amplia de “todo como código”, que convierte cosas como las solicitudes de infraestructura en archivos de código revisables en torno a los cuales los equipos de desarrollo pueden colaborar.
Manténgase al día sobre las tendencias más importantes e intrigantes de la industria sobre IA, automatización, datos y más con el boletín Think. Consulte la Declaración de privacidad de IBM.
En términos de DevOps, una política es una norma clara y aplicable sobre cómo se deben configurar o ejecutar la infraestructura y las aplicaciones de TI o cómo se debe acceder a estas. Más precisamente, las políticas dictan qué acciones están permitidas o prohibidas o cuáles se requieren para que los sistemas sigan funcionando en su estado ideal.
Por ejemplo, “todos los buckets de almacenamiento de información deben estar cifrados” o “ningún servicio público puede exponer el puerto 22” son políticas, ya que especifican restricciones concretas sobre el comportamiento del sistema.
Con PaC, las políticas se escriben en un lenguaje de programación estructurado, por lo que los motores de políticas y las herramientas de automatización pueden analizarlas y evaluarlas de forma determinista. De este modo, las políticas se convierten en barreras ejecutables que los sistemas e ingenieros deben cumplir, en lugar de directrices que se puedan interpretar de forma diferente.
Las herramientas de política como código permiten a los desarrolladores escribir código ejecutable en entornos de tiempo de ejecución y pipelines de integración continua/entrega continua (CI/CD), de modo que cada cambio se compruebe automáticamente para verificar su cumplimiento.
Técnicamente, la mayoría de las configuraciones de PaC siguen los mismos pasos básicos:
Las verificaciones de políticas pueden ocurrir en cualquier punto del ciclo de vida del desarrollo de software (SDLC), desde la integración de código hasta la producción y el monitoreo en vivo.
Debido a que las políticas son código, también pueden tratarse como cualquier otro artefacto de software.
Los equipos de desarrollo pueden escribir pruebas automatizadas que introduzcan entradas de muestra en las políticas y verifiquen las decisiones que devuelven para acelerar los ciclos de feedback cuando cambian las políticas.
Cuando las políticas están codificadas, los desarrolladores pueden extraer la lógica común en módulos o funciones reutilizables. Varias políticas de nivel superior pueden invocar políticas compartidas en lugar de duplicar condiciones en todas partes.
Los desarrolladores también pueden cambiar el nombre, reestructurar o dividir políticas grandes en otras más pequeñas sin cambiar su comportamiento, al igual que refactorizar una función de aplicación grande en otras más pequeñas.
Estas capacidades permiten a los equipos aplicar las prácticas de ingeniería de software existentes a la lógica de gobernanza, lo que les ayuda a mantener los requisitos de seguridad y cumplimiento a medida que las arquitecturas de TI escalan y evolucionan.
Supongamos que la empresa X quiere implementar una política de “solo HTTPS” en la que cada servicio web debe usar HTTPS, no HTTP simple. Para codificar la política, un ingeniero de plataformas escribe una regla simple que dice:
El ingeniero coloca este archivo de políticas en una carpeta “políticas” dentro del mismo repositorio de código que la aplicación y abre una solicitud de extracción para agregar la política. Esa solicitud de extracción desencadena una verificación automática de sintaxis del archivo de políticas y una revisión de código por parte de otro ingeniero. Solo después de que la política supera las pruebas necesarias se fusiona con la rama principal.
En el pipeline de integración continua (CI), todos los archivos de políticas se cargan en el motor de políticas desde la carpeta “políticas”. El motor de políticas lee la política, la convierte en una representación interna y la compila en una forma compacta y de bajo nivel. Esta forma compacta permite que el motor responda rápidamente “¿permitir o denegar?” para cada servicio que el pipeline verifica.
Independientemente del formato del archivo, un trabajo de CI toma el archivo de configuración existente, extrae los campos importantes (nombre, protocolo, puerto) y crea una descripción JSON simple de cada servicio.
La persona que llama solicita una decisión del motor de políticas enviando la descripción del servicio estandarizada como entrada e indicando que se debe aplicar el paquete de políticas para “solo HTTPS”.
Luego, el motor de políticas evalúa la entrada con respecto a las reglas. Revisa el campo de protocolo del servicio. Si el protocolo es HTTP, significa que la entrada coincide con la condición de “denegar” en la política. El motor indica que se debe denegar el cambio y crea un mensaje que le indica al desarrollador que el servicio debe usar HTTPS en lugar de HTTP. Si el servicio utiliza HTTPS, no se cumple ninguna de las condiciones de denegación y el motor indica que el cambio está permitido.
Luego, el motor de políticas resume las evaluaciones de reglas en un único objeto de decisión para el servicio. Los objetos de decisión suelen especificar si la decisión general es “permitir” o “denegar” y la gravedad del problema (alta, media, baja). También incluyen una lista de mensajes que explican por qué se denegó la entrada y cualquier advertencia que el motor encontró en el proceso de evaluación. Si todo cumple, el objeto de decisión indica que el cambio está permitido y viene solo con notas informativas (o sin ningún mensaje).
Finalmente, las herramientas de CI hacen cumplir la decisión. Si la decisión es “denegar”, el cambio no se fusionará en la rama de código principal. El ingeniero ve un mensaje de error que indica que el servicio debe usar HTTPS y someterse a modificaciones específicas. Si la decisión es “permitir”, el artefacto se empaqueta y despliega, y el pipeline de CI continúa normalmente.
La política como código surgió de un movimiento más amplio de “todo como código” en DevOps moderno y la ingeniería en la nube.
Originalmente, la infraestructura como código (IaC) fue el gran cambio. En lugar de que los administradores del sistema hagan clic en las interfaces de usuario o sigan los runbooks, los equipos describieron servidores, redes y otros recursos en archivos de código declarativo. Estos archivos se almacenan en sistemas de control de versiones y se aplican a través de pipelines automatizados.
A medida que las empresas vieron los beneficios, el enfoque se extendió a otros componentes de las arquitecturas de TI. La configuración de aplicaciones se movió hacia enfoques basados en código. Los pipelines de CI/CD se convirtieron en scripts que residen en repositorios de código. Las reglas de monitoreo y alerta también comenzaron a residir en código. En conjunto estas prácticas se hicieron conocidas como “todo como código”.
La idea central de “todo como código” es que, si alguna parte del sistema puede describirse, debe describirse como código y gestionarse de la misma manera que las aplicaciones de software.
PaC es esencialmente la aplicación de esa filosofía a las reglas, la gobernanza y el cumplimiento. Tradicionalmente, las políticas se plasmaban en archivos PDF y wikis, o bien eran decididas por un comité, y su aplicación corría a cargo de personas. Este proceso funcionó cuando los ciclos de lanzamiento eran lentos y la infraestructura era relativamente estática.
A medida que las arquitecturas nativas de la nube y los microservicios tomaron el control, y los equipos empezaron a desplegar código varias veces al día, los procesos manuales no pudieron seguir el ritmo. PaC abordó este desafío expresando políticas en formatos legibles por máquina, de modo que puedan versionarse en Git, revisarse como archivos de código, probarse en CI y aplicarse automáticamente en pipelines o en tiempo de ejecución.
La política como código es una práctica para gestionar políticas de TI como el código de software. La infraestructura como código (IaC) es similar, pero con un enfoque diferente. Permite a los equipos de ingeniería definir y gestionar la infraestructura de TI usando código de aplicación.
En lugar de crear y configurar manualmente activos de red como máquinas virtuales (VM) y balanceadores de carga, IaC permite a los desarrolladores escribir código para describir el estado deseado de estos recursos. Luego, una herramienta de IaC toma ese código y crea o modifica los recursos especificados.
IaC facilita mucho el escalado y la automatización de la infraestructura. Si un equipo necesita más servidores, puede cambiar un número en el código (de seis instancias a nueve, por ejemplo). Las herramientas de automatización se encargan de los detalles del aprovisionamiento de esos recursos adicionales.
A un alto nivel, IaC dicta qué infraestructura debe existir y cómo debe configurarse, mientras que PaC se centra en las reglas y restricciones que debe obedecer la infraestructura. El código IaC crea y configura recursos, y el código PaC ayuda a garantizar que esos recursos (y las formas en que se utilizan) sigan los requisitos de seguridad definidos, los estándares de cumplimiento y las medidas de seguridad operativas.
En muchas arquitecturas de TI modernas y configuraciones de CI/CD, IaC y PaC proporcionan beneficios complementarios. IaC automatiza el aprovisionamiento y PaC agrega gobernanza automatizada en la parte superior.
Cuando un desarrollador cambia un archivo IaC, un motor PaC puede inspeccionar el nuevo plan o configuración. Si todo cumple con las políticas establecidas, se permite que el cambio continúe y la infraestructura se actualiza. Si algo infringe una regla, el pipeline falla y no se despliega nada hasta que se soluciona el problema.
DevSecOps trata de la incorporación de la seguridad y el cumplimiento en el ciclo de vida de DevOps, en lugar de agregarlos al final. Es un enfoque de desarrollo en el que los procesos de seguridad se priorizan y ejecutan durante cada etapa del ciclo de vida del desarrollo de software.
PaC admite prácticas de DevSecOps mediante:
PaC ayuda a los equipos a cambiar la seguridad al trasladar los controles de seguridad a las primeras etapas del proceso de desarrollo, en lugar de esperar a ejecutar los controles después del despliegue, cuando los problemas pueden afectar a los usuarios. Si un desarrollador introduce una configuración arriesgada o un patrón inseguro, las políticas automatizadas pueden detectar el problema y hacer fallar la compilación.
Las herramientas PaC automatizan la aplicación mediante la incorporación de reglas de seguridad directamente en los pipelines de CI/CD y los sistemas de tiempo de ejecución, por lo que las comprobaciones se realizan automáticamente cada vez que cambia el código o la infraestructura. En lugar de depender de humanos para recordar cada estándar de seguridad y revisar manualmente cada cambio, el sistema evalúa constantemente los cambios para garantizar que no se omita accidentalmente ningún paso.
PaC ayuda a los desarrolladores a mantener la velocidad de despliegue sin sacrificar la coherencia ni la seguridad. Ejecuta las mismas definiciones de políticas en todos los entornos y en todas las etapas: desarrollo, pruebas, puesta en escena y producción. Esta característica permite a los equipos lanzar con frecuencia porque pueden confiar en que se aplica el mismo conjunto de reglas en todas partes. También les ayuda a evitar situaciones en las que diferentes entornos se separan o utilizan interpretaciones ligeramente diferentes de las reglas.
PaC trata las políticas de seguridad de aplicaciones como cualquier otro artefacto de código que reside en un sistema de control de versiones. Los equipos de desarrollo, operaciones y seguridad pueden revisar, debatir y actualizar políticas mediante flujos de trabajo familiares (revisiones de código, estrategias de ramificación), lo que hace que las conversaciones sobre políticas sean más transparentes e integradas en el trabajo diario de desarrollo.
La política como código tiene una amplia gama de aplicaciones para arquitecturas de TI empresariales.
Muchas empresas utilizan PaC como capa de gobernanza para la infraestructura nativa de la nube. Las políticas se evalúan cada vez que se aplican plantillas de IaC y pueden bloquear o modificar recursos que no cumplen. Por ejemplo, los equipos pueden usar PaC para restringir la configuración de red prohibiendo IP públicas para bases de datos o requiriendo subredes privadas para ciertas cargas de trabajo.
PaC puede expresar una lógica de autorización detallada, definiendo quién puede hacer qué, bajo qué condiciones y con qué recursos, todo en una capa de políticas central y comprobable.
Por ejemplo, los equipos usan PaC para dictar, con todo detalle, qué roles de usuario pueden acceder a las interfaces de programación de aplicaciones (API) y los endpoints confidenciales, y bajo qué métodos HTTP. En lugar de “los administradores pueden acceder al sistema”, los desarrolladores pueden estipular que “los usuarios con X rol pueden realizar la acción Y en el recurso Z entre las horas de A y B”.
Tradicionalmente, los requisitos normativos, como la Ley de Portabilidad y Responsabilidad del Seguro Médico (HIPAA), residen en documentos largos. Los humanos leen esos documentos e intentan convertirlos en configuraciones y listas de verificación.
Con PaC, los equipos toman esos requisitos de alto nivel y los codifican como reglas que una computadora puede evaluar. Las reglas se pueden compartir y reutilizar en todos los entornos, y cuando cambia una regulación, la regla correspondiente se puede actualizar una vez y aplicar automáticamente en todos los lugares donde se despliega la política.
Además, PaC crea archivos de registro legibles por máquina cada vez que el motor de políticas realiza una comprobación de cumplimiento, ayudando a los equipos a mantener pistas de auditoría detalladas. Cada evaluación puede generar registros o métricas en tiempo real que indiquen qué sistemas aprobaron, cuáles fallaron y exactamente por qué falló un sistema. Esos resultados se incorporan a paneles e informes que muestran el estado de cumplimiento por sistema, cuenta o entorno.
Sin PaC, puede ser fácil para los equipos sobreaprovisionar recursos (instancias y discos grandes, muchas réplicas) y notar solo cuando los informes de costos mensuales muestran un pico. PaC cambia esta dinámica. Las reglas se evalúan antes o a medida que se crean los recursos, por lo que las opciones ineficientes en costos se pueden bloquear o marcar de inmediato.
Por ejemplo, si alguien intenta iniciar un tipo de instancia grande en un entorno de prueba, una política puede denegar el cambio y devolver un error explicando que solo se permiten tamaños más pequeños. Este enfoque mantiene a los desarrolladores avanzando rápidamente sin dejar de respetar los límites presupuestarios.
En Kubernetes, los desarrolladores envían manifiestos (archivos que describen lo que quieren que Kubernetes cree y cómo quieren que se comporte) al servidor de API para crear pods, despliegues y otros recursos.
Los controladores de admisión y los motores de políticas se encuentran frente al servidor de API y examinan la solicitud de API que realiza cada manifiesto. Aplican PaC para decidir si permiten, deniegan o mutan el recurso entrante. De esta manera, la gobernanza ocurre automáticamente en la “puerta” del clúster.
Cuando las organizaciones ejecutan varios clústeres (por región o por unidad de negocio, por ejemplo), PaC les permite aplicar las mismas reglas de gobernanza en todas partes. El mismo repositorio de políticas se puede sincronizar con muchos clústeres, por lo que cada clúster aplica los mismos límites de recursos, reglas de imagen y requisitos de metadatos.
Cada proveedor de la nube y plataforma on premises tiene sus propios servicios y herramientas que los equipos de DevOps pueden usar. Sin embargo, muchas de las reglas de gobernanza que crean para cada plataforma son conceptualmente las mismas. La forma en que los desarrolladores deben etiquetar los recursos, quién puede acceder a los recursos, cómo se exponen las redes y cómo funciona el cifrado suele ser congruente en todos los servicios.
Pac permite a los equipos aplicar reglas de seguridad en la nube a través de herramientas específicas del proveedor o un motor de políticas multiplataforma. Por ejemplo, una política compartida podría decir “todos los endpoints expuestos externamente deben usar TLS y estar detrás de una pasarela de API aprobada”. Esa norma se puede aplicar mediante un mecanismo diferente en cada entorno de nube, pero seguirá estando guiada por la misma definición de política.
Los desarrolladores y los profesionales de la seguridad están explorando las políticas como código como una forma de crear modelos de barreras de seguridad en capas que abarquen todo el ciclo de vida de un flujo de trabajo de IA o flujo de trabajo con agentes. Aunque la práctica aún está en desarrollo, las investigaciones iniciales revelaron muchas posibles aplicaciones de PaC en flujos de trabajo de IA.
PaC puede ayudar a establecer una separación clara entre el razonamiento de la IA y el sistema que decide qué acciones realmente puede ejecutar. La herramienta de IA puede proponer acciones o planes, pero un motor de políticas evalúa esas propuestas con respecto a reglas codificadas antes de que se toque cualquier sistema subyacente.
En la etapa de entrada, PaC puede ayudar a filtrar o transformar las instrucciones del usuario, ocultar datos confidenciales, aplicar el aislamiento de inquilinos y bloquear patrones de ataque conocidos. Durante la planificación, PaC puede requerir que los agentes de IA produzcan planes estructurados y validen cada paso con las herramientas permitidas, las acciones y las condiciones de riesgo antes de que se permita la ejecución.
En el momento de la ejecución, la capa de aplicación de políticas puede verificar cada invocación de herramienta o llamada a API. La capa decide si permitir, denegar o modificar una acción o escalarla a un ser humano. Después de la ejecución, las políticas pueden impulsar el registro, las pistas de auditoría, las reglas de retención y los filtros posteriores en los resultados del modelo para garantizar que las respuestas cumplan con los requisitos necesarios.
Aproveche el poder de la IA y la automatización para resolver problemas de manera proactiva en toda la pila de aplicaciones.
Utilice el software y las herramientas de DevOps para crear, desplegar y gestionar aplicaciones nativas de la nube en múltiples dispositivos y entornos.
Acelere la agilidad y el crecimiento empresarial: modernice continuamente sus aplicaciones en cualquier plataforma con nuestros servicios de consultoría en la nube.