Utilizar la API REST de Azure Storage desde Postman con Azure AD

Una de las preguntas que me llegó la semana pasada fue cómo era posible llamar a las operaciones de Azure Storage, utilizando su API REST, desde Postman pero utilizando Azure Active Directory como método de autenticación, para beneficiarnos de RBAC que hace más de dos años está disponible para este servicio. Lo cierto es que no he encontrado documentación clara al respecto, así que aquí te dejo un ejemplo de cómo hacerlo.

Crear una cuenta de almacenamiento

Lo primero que necesitas es tener una cuenta de almacenamiento a la que acceder. Si todavía no tienes una puedes crearla con este comando:

#Variables
RESOURCE_GROUP="az-storage-demo"
LOCATION="northeurope"
STORAGE_NAME="gotham"

#Create resource group
az group create -n $RESOURCE_GROUP -l $LOCATION

#Create storage account
az storage account create --name $STORAGE_NAME --resource-group $RESOURCE_GROUP --location $LOCATION --sku Standard_LRS

Para poder visualizar algo en este ejemplo, voy a crear unos cuantos contenedores:

#Create three containers
az storage container create --name bruce --account-name $STORAGE_NAME
az storage container create --name joker --account-name $STORAGE_NAME
az storage container create --name fish --account-name $STORAGE_NAME

Registrar una aplicación en Azure Active Directory

Lo siguiente que necesitas es registrar una aplicación en Azure AD que será a la que permitas acceder con ciertos permisos a esta cuenta de almacenamiento que acabas de crear. Accede al portal de Azure y en la sección Azure Active Directory > App registrations haz clic en New registration

Registrar una nueva aplicación en Azure AD

Elige un nombre representativo para tu aplicación y haz clic en el botón Register.

Guarda el valor de Directory (tenant) ID y Application (client) ID que aparecen en el apartado Overview de tu nueva aplicación.

Recuperar el tenant ID y client ID de la sección Overview

Por último necesitas un secreto. Este puede generarse a través del apartado Certificates & secrets.

Generar un nuevo secreto para tu aplicación en Azure AD

Dar permisos a tu aplicación sobre la cuenta de almacenamiento

Ahora tienes una nueva aplicación registrada en Azure AD pero sin ningún tipo de permisos sobre tu cuenta de almacenamiento, por lo que ese será el siguiente paso. Accede a tu cuenta y accede al apartado Access Control (IAM). En él haz clic sobre el botón Add > Add role assignment.

Ahora selecciona el rol Storage Blob Data Reader, busca tu aplicación a través del nombre que le hayas dado y haz clic en el botón Save para guardar los cambios.

Añadir el role Storage Blob Data Reader a la aplicación gotham-app

Peticiones en Postman

Ahora ya tienes todo lo que necesitas para poder operar tu cuenta de almacenamiento a través de Postman, haciendo uso del rol que se le has asignado a tu aplicación, en lugar de utilizar el access key. Básicamente necesitas dos llamadas: una para obtener el token y otra para llevar a cabo la operación que necesites.

  1. Obtener el token

En este caso, ya que se trata de una aplicación, vamos a obtener el token a través del flujo de OAuth 2.0 llamado Client Credentials. Para ello, lo primero que voy a hacer es crearme un nuevo entorno de Postman a través de la sección Environments > + donde añadiremos las siguientes variables:

Nuevo entorno en Postman

Añade los valores de tu entorno para cada una de esas variables. Asegúrate de que a partir de ahora estás usando ese entorno para tus peticiones, seleccionándolo en el combo de la derecha.

Ahora crea una nueva petición con los siguientes valores:

Postman – 1. Get token

Como puedes ver, hago una llamada POST a https://login.microsoftonline.com/{{tenant_id}}/oauth2/v2.0/token con los valores recogidos en el entorno y como scope el endpoint para los blob de la cuenta de almacenamiento. Si todo ha ido bien debería de devolverte un access token.

2. Llamar a Azure Storage para listar los contenedores

Ahora que ya tienes un token ya puedes probarlo para acceder a tu cuenta de almacenamiento. En este ejemplo vamos a listar los contenedores que tiene la misma:

Postman – Listar los contenedores en la cuenta de almancenamiento

En este caso, la URL a la que estoy haciendo la petición GET es https://{{storage_name}}.blob.core.windows.net/?comp=list, utilizando las variables de entorno que he generado anteriormente. He tenido que añadir las cabeceras Authorization, donde he añadido el access token generado en el paso anterior, y x-ms-version con la versión de la API que a día de hoy es 2020-08-04 en el momento de escribir este artículo.

Como ves, el resultado es el listado de todos los contenedores generados al inicio de este artículo.

¡Saludos!