Compartir a través de


Partial trust y full trust:

Qué puede y qué no puede hacer una aplicación Windows Azure

Aunque la experiencia de desarrollo de una aplicación de Windows Azure es muy similar a desarrollar una aplicación web en la plataforma .NET, la naturaleza compartida de los recursos en la nube exige establecer ciertas limitaciones al comportamiento de las aplicaciones desplegadas en Azure. Dichas limitaciones están orientadas especialmente a evitar que, intencionadamente o por error, las aplicaciones de Windows Azure tengan comportamientos anómalos, traten de interferir las operaciones de otras aplicaciones, realicen ataques a maquinas en Internet, etc...

La plataforma .NET cuenta con un mecanismo llamado Code Access Security (CAS) que permite delimitar perfectamente que acciones puede llevar  a cabo una aplicación .NET. Este mecanismo es aprovechado por Windows Azure para establecer límites a lo que pueden hacer las aplicaciones.

Aprovechando las capacidades de CAS, Windows Azure define dos niveles de confianza para las aplicaciones: 'partial trust' y 'full trust.

El nivel de confianza 'Partial Trust'

Este es el nivel de confianza que por defecto tendrá todo rol que creemos. Este es el nivel de confianza recomendado para la mayoría de aplicaciones. En este nivel de confianza se tienen las siguientes limitaciones:

  • Se pueden realizar casi todas la acciones en ASP.NET que se pueden realizar en ASP.NET con 'medium trust'. Este es el nivel habitual en todos los hosting compartidos de ASP.NET. La mayor dificultad es que algunos controles de terceros mal diseñados exigen 'full trust' para funcionar correctamente.

  • Se pueden realizar consultas DNS.

  • Sólo se puede leer y escribir las variables de entorno TMP y TEMP, pero ninguna otra.

  • No se tiene acceso al log de eventos.

  • Sólo se puede escribir y leer archivo en el almacenamiento local de Windows Azure, pero no en ninguna otra ubicación del disco. Típicamente sólo se utiliza el almacenamiento local de Windows Azure como caché.

  • No se dispone de acceso de ningún tipo a la característica de almacenamiento aislado de .NET.

  • No se pueden realizar peticiones por OleDb.

  • Sólo algunas de las características de reflexión están disponibles.

  • Sólo se pueden abrir sockets de salida, sobre TCP y hacia sitios externos.

  • Sólo se pueden realizar conexiones a fuentes SQL externas.

El nivel de confianza 'Full Trust'

El nivel de confianza 'full trust' confiere a la aplicación de Windows Azure privilegios adicionales. De estos privilegios adicionales los mas notables son:

  • La capacidad para poder llamar a código nativo mediante P/Invoke.

  • La capacidad para poder usar ensamblados .NET que requieran 'full trust', esto es, todos aquellos que no estén marcados con el atributo AllowPartiallyTrustedCallers.

  • La capacidad para leer, que no escribir, en el registro de Windows de la máquina sobre la que se está ejecutando el Fabric de Windows Azure.

Para configurar un rol de Azure para que se ejecute con 'full trust' en el archivo de definición del servicio (.csdef) se debe establecer el atributo enableNativeCodeExecution del rol correspondiente a true, tal y como se puede ver en el siguiente código:

<WorkerRole name="Role" enableNativeCodeExecution="true"> 
<ConfigurationSettings />
</WorkerRole>