En este post vamos a ver los permisos SaS, o también llamados firmas de acceso compartido, los cuales pueden limitar el acceso y conceder ciertos permisos sobre las cuentas de almacenamiento de Azure.

Crearemos una aplicación que será la encargada de generar un token para acceder a la cuenta de almacenamiento de Azure mediante estas claves SaS. De esta manera, podremos administrar el acceso a la cuenta de forma temporal y conceder permisos para las operaciones que deseemos, como pueden ser lectura, escritura, eliminación o actualización de los datos.

En mi caso, explicaré el servicio de Azure Table Storage, el cual permite añadir tablas y cuya función es la de almacenar datos, pudiendo modificar estos mediante llamadas autenticadas. Una tabla cuenta con una colección de entidades, que a la vez tendrán un conjunto de propiedades. Dos de estas propiedades son obligatorias: Partition Key, se encarga de distribuir la información entre nodos; y RowKey, es el identificador único de la partición, no se puede repetir.

Una vez explicado los conceptos básicos pasaremos a realizar un ejemplo práctico para que se entienda mejor esta funcionalidad.

Vamos a crear un proyecto en el que añadiremos permisos de lectura y modificación de datos sobre una tabla en nuestra cuenta de almacenamiento de Azure. Esta tabla contendrá equipos de fútbol de primera y segunda división de España, que aparecerán en la página en función de la división que hayamos querido buscar (la división será nuestro Partition Key). Además, se podrá acceder a los datos de cada equipo y también modificarlos a nuestro gusto, pero sin embargo si queremos eliminar un equipo no estará permitido.

El ejemplo práctico se dividirá en 4 partes diferenciadas: creación de la tabla en Azure Table Storage, creación y configuración de la API, creación y configuración del cliente y, por último, realizaremos las pruebas necesarias para comprobar el funcionamiento de la aplicación.

1. Creación de la tabla en la cuenta de almacenamiento de Azure

Para realizar el ejemplo práctico debemos crear una tabla en las cuentas de almacenamiento de Azure para poder trabajar con datos. Se tendrá que crear una cuenta de almacenamiento nueva en nuestro portal, pero no se podrán insertar los datos directamente. Para ello existen dos opciones:

  • Mediante la aplicación Microsoft Azure Storage Explorer que ofrece la posibilidad de crear y modificar tablas. Realizaremos el ejemplo de esta manera.
  • Mediante código, por ejemplo, migrando un archivo XML como tabla a Azure.

1.1. Creación de la cuenta de almacenamiento en Azure

En primer lugar, crearemos una cuenta de almacenamiento nueva, para ello accedemos a nuestro portal de Azure y en el menú de la izquierda elegiremos Cuentas de almacenamiento. Nos aparecerá la ventana con nuestras cuentas (si tenemos alguna creada). Elegiremos la opción de Agregar y podremos configurarla a nuestro gusto (nombre, tipo y grupo de recursos donde se ubicará). Para finalizar revisaremos y crearemos la cuenta de almacenamiento.

creacion cuenta almacenamiento
Creación cuenta de almacenamiento

1.2. Instalación y configuración Microsoft Azure Storage Explorer

Será necesario descargar la aplicación de escritorio Microsoft Azure Storage Explorer para poder trabajar con los datos. En el siguiente enlace elegiremos nuestro sistema operativo e iniciaremos la descarga.

https://azure.microsoft.com/es-es/features/storage-explorer/

Una vez tengamos el programa instalado tendremos que iniciar sesión con nuestra cuenta de Azure, para ello accederemos al panel izquierdo a la pestaña de cuenta y añadiremos una nueva cuenta. Finalmente podremos elegir donde queremos conectarnos (en nuestro caso Azure) y iniciaremos sesión con nuestro usuario normalmente.

conectar cuenta al explorador
Vincular cuenta de Azure con Azure Storage Explorer

1.3. Creación y adicción de datos en la tabla

Una vez vinculada la cuenta, podremos crear una tabla nueva, dando click derecho sobre Tables y crear tabla. En mi caso la llamaré TablaEquipos.

crear tabla en azure explorer
Creación de la tabla

Ahora será turno de añadir las filas con los datos de nuestra tabla. Para ello seleccionaremos la tabla que acabamos de crear y elegiremos Add. Nos aparecerá una nueva ventana con las columnas que queramos configurar con sus respectivos valores. En nuestro caso, la tabla va a ser de equipos de fútbol, por tanto, utilizaré en primer lugar la PartitionKey para elegir la división en la que se encuentra el equipo y la RowKey la ID del equipo, la cuál no se puede repetir y será única para cada equipo. Los demás atributos serán el Nombre del equipo, la Ciudad, el Entrenador y el Estadio.

añadir fila a la tabla
Añadir fila a la tabla

Cuando hayamos añadido todos los datos nos quedará la siguiente tabla.

tabla de equipos
Tabla de equipos

2. Creación y configuración de la API

Una vez lista la tabla, se tendrá que crear una API para acceder a los datos que acabamos de crear. En este apartado será también donde añadiremos los permisos, los cuales serán los encargados de prohibir o no las operaciones que queramos.

Crearemos una aplicación MVC empty y elegiremos la opción de Web API.

MVC empty
Creación aplicación MVC Web API

2.1. Configuración

Lo primero que tendremos que hacer será instalar en nuestra aplicación los paquetes NuGet de WindowsAzure.Storage y Microsoft.WindowsAzure.ConfigureManager para poder acceder a los datos.

azure.storage y configurationManager
Instalación de paquetes NuGet

Se tendrá que añadir en el archivo web.config la clave de acceso de nuestra cuenta de almacenamiento de Azure. Esta la encontraremos en el apartado de claves de acceso de nuestra cuenta de almacenamiento. Mediante la siguiente línea podremos hacerlo:

clave de acceso
Clave de acceso

2.2. Declaración de métodos

Crearemos un repositorio en la aplicación, donde se recuperará la tabla que hemos creado anteriormente y donde se darán los permisos para recuperar y modificar los datos.

RepositoryApiEquipos
Repositorio API

Para acabar con este apartado, crearemos un controlador en la carpeta controllers, el cual contendrá un método que recibirá un parámetro de tipo String (division), que será la división del equipo con el que haremos la búsqueda. Esté método estará configurado con una ruta personalizada, además de indicar que será de tipo GET.

ApiEquiposController
Controlador API

2.3. Prueba

Si ahora ejecutamos la aplicación, no recuperaremos ningún dato, si no que recuperaremos un token, el cual posteriormente será enviado al cliente para dar permiso de acceso a la cuenta de almacenamiento de Azure.

ejecutar API token
Token recibido

3. Creación y configuración del cliente

Para acabar este ejemplo práctico, tendremos que crear el cliente, es decir, una aplicación MVC que se encargue de consumir los datos de la tabla que hemos creado en Azure y lo haga accediendo mediante la API del apartado anterior.

3.1. Instalación de paquetes y creación de la clase

Una vez creada la aplicación, añadiremos los NuGet que utilizamos anteriormente en nuestra aplicación API.

azure.storage y configurationManager
Instalación de paquetes NuGet

Para empezar, tendremos que crear una clase Equipo en la carpeta models para poder leer los datos de nuestra aplicación. Esta clase heredará de TableEntity para poder ejecutar las operaciones que le asignemos.

class equipo
Clase equipo

3.2. Declaración de métodos

Crearemos un repositorio donde incluiremos todos los métodos necesarios.

El primer método será para recuperar el Token de la Api a través de la URL.

GetToken
Método GetToken

El siguiente método recuperará la tabla que creamos en el primer apartado. Para ello le pasaremos el token y, además, necesitamos la URL de nuestra cuenta de almacenamiento de Azure. Esta URL la podemos encontrar entrando en el portal de Azure, Cuentas de almacenamiento y eligiendo nuestra cuenta seleccionamos tablas. Nos aparecerán todas las tablas que tenemos creadas en dicha cuenta de almacenamiento con su URL. Tendremos que copiar esa URL sin la parte del nombre de la tabla, es decir, la raíz dónde se encuentra la tabla que queremos.

URL tabla
URL tabla Azure Storage

Una vez tengamos esta URL podremos escribir el siguiente código para recuperar la tabla.

GetTable
Método GetTable

Ahora será turno de crear los métodos de acción. En nuestro caso, será el de buscar por división y el actualizar los datos de cada equipo de la tabla.

El método de buscar por división retornará una lista de equipos, recibiendo del controlador dicha división, escrita en nuestra vista.

BuscarDivision
Método BuscarDivision

El siguiente método será para modificar un equipo (cualquiera de los datos). Para ello, recibirá la división (PartitionKey) para poder recuperar la tabla, la id del equipo (RowKey) para recuperar el equipo en concreto y, además, los demás atributos de la clase Equipo. El método encargado de actualizar los datos es Merge, que modifica los datos que hayamos cambiado y los que no los deja como están.

ModificarEquipo
Método ModificarEquipo

También incorporaremos el método para eliminar equipo, el cual dará fallo porque no hemos dado permiso en nuestra API.

EliminarEquipo
Método EliminarEquipo

3.3. Creación del controlador

Una vez declarados todos los métodos que vamos a utilizar, tendremos que crear un controlador para poder utilizarlos. En este controlador vamos a tener una vista index donde nos muestren todos los equipos buscados por una división y una vista donde podremos modificar los datos de un equipo.

Instanciaremos el repositorio y la vista index recogerá el string división, introducida en la página mediante una caja de texto. Si esta división (Partition Key) existe, llamará al método BuscarDivision y recuperará la lista de equipos.

EquiposController1
Primera parte controlador cliente

También tendremos los ActionResult para modificar la tabla (get y post), que se encargarán de mostrar los datos de cada equipo en particular y se podrán actualizar los datos.

Por último, tendremos además el de borrar equipo, pero como he mencionado anteriormente solo esta creado para probar que la aplicación esta cumpliendo su función de permisos.

EquiposController2
Segunda parte controlador cliente

3.4. Creación de vistas

Crearemos la vista index haciendo clic derecho sobre “Index” y añadiremos la nueva vista. Este sería el diseño para mostrar los equipos, teniendo una caja de texto en la que podremos indicar la división que queremos buscar.

Vista index
Vista Index

También crearemos la vista de editar, esta vez lo haremos mediante scaffolding para que sea más rápido y posteriormente borraremos lo que no nos haga falta. Para ello clicaremos con el botón derecho del ratón sobre “Edit” y añadiremos la vista. A la hora de la configuración de la vista, elegiremos el template y la clase que queramos, en este caso Edit y Equipo.

scaffolding
Creación vista Edit

Una vez añadida nos quedaría decorar la vista a nuestro gusto.

Vista Edit
Vista Edit

4. Comprobaciones

Por último, nos quedaría comprobar la funcionalidad de la aplicación. Para ello, primero ejecutaremos la API (si no, no funcionará, ya que esta en local y tiene que estar iniciada) y posteriormente el cliente. Podemos introducir por ejemplo “Primera” en la caja de texto y nos aparecerá la tabla con los equipos de Primera división.

Prueba1
Tabla de equipos de primera división en vista Index

Si queremos editar un dato del algún equipo, pinchamos en editar y accederemos a la vista de edit del equipo con todos sus detalles. Una vez en esta vista, actualizaremos el dato que queramos y guardaremos los cambios.

Prueba2
Editar datos de un equipo

Volvemos a la lista de equipos y podemos comprobar que el dato que hemos cambiado se ha actualizado.

Prueba3
Tabla de equipos modificada

Como última comprobación, intentaremos eliminar un equipo. Solo hemos dado permisos de lectura y modificación, por lo tanto, debería saltarnos una excepción.

Prueba4
Error [403] prohibido

Como podemos ver, aparece un error [403] de prohibición, ya que nuestra API no envía el token al no tener permisos para realizar esta acción.


Autor/a: Victor Lainez Mesado

Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin

Centro: Tajamar

Año académico: 2018-2019

Código / recursos utilizados / Otros datos de interés: https://github.com/vLAINm/Permisos-SaS-Azure-Table-Storage

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.