Autenticación de Azure Key Vault con Azure Active Directory

Azure Key Vault es un repositorio/colección de llaves criptograficas (JWKs) que se resguardan sobre Azure. Expone un API para tener acceso y realizar operaciones sobre estas llaves.

La documentación no es clara sobre como tenemos acceso a esta API para hacer la integración con la aplicación que estamos desarrollando.

El control de acceso hacia el API de Azure Key Vault se establece en las políticas de acceso hacia un AAD Identities (Azure AD as a Third-Party Identity). Es una alternativa para autorizar el acceso hacia Azure Key Vault.

Vamos a ver como realizar esto por medio de 2 alternativas con Azure AD:

1. Creando una App dentro de Azure AD

2. Creando un Certificado en Azure AD (preferible)

 

Authenticate Azure Key Vault

Registrando aplicación con Azure AD

Para estro primero debemos ir al tenant de nuestra subscripcion desde el portal de Azure. Y entrar a la opción que dice “Azure Active Directory”.

Aquí seleccionamos crear nueva aplicación:

Se abrirá un formulario que nos pide nombre, tipo de aplicación y la URL de ingreso (Sign-on URL).

Nombre: AzureKeyVaultApp

Tipo Aplicación: Web app / API

URL Ingreso: http://AzureKeyVaultApp

Para el caso de la URL de ingreso puede ser cualquier cosa mientras sea una URL valida.

Damos click en Aceptar/Guardar y se creara la aplicación. Ahora debemos de seleccionar la aplicación que acabamos de crear y recuperar el ID (Application ID), y adicional crear una llave sobre la aplicación, que sera nuestro Secret Id. Estos valores los vamos a ocupar mas adelante.

Creamos una llave para el valor de Secret Id:

Bien, ahora debemos ir a nuestro contenedor de llaves de Azure Key Vault y establecer la aplicación que acabamos de crear como identidad de acceso. Esto lo hacemos dentro de la sección de políticas de acceso. Previamente ya debemos tener nuestro contenedor/almacén de llaves, aquí las instrucciones para hacerlo.

En la sección de politicas de acceso creamos una nueva política de acceso y como identidad buscamos la aplicación que creamos con el nombre de “AzureKeyVaultApp“, y para este caso seleccionamos todos lo permisos.

Una vez hecho esto ya podemos invocar el API desde nuestra aplicación.

En el código de arriba vemos como con los valores de la aplicación que creamos previamente inicializamos 3 variables keyVaultUrlclientId y secret. Después con el método CreateKeyVaultWithSecret creamos nuestro cliente que expone los métodos del API. Si ocupáramos un KeyVaultKeyResolverCachingKeyResolver podemos hacerlo con la instancia de KeyVaultClient.

Registrando Certificado

Primero debemos crear un certificado de prueba. Podemos hacer esto ejecutando los siguientes comandos en la consola de Visual Studio.

En resumen lo que hace las lineas que ejecutamos es crear un certificado con su respectiva llave privada.

Después debemos asociar el certificado a una aplicación de Azure AD. Esto no se puede hacer desde el portal, pero podemos ejecutar el siguiente script sobre Power Shell:

Una vez que se ejecuta exitosamente el script anterior podemos validar en el portal que la aplicación se haya creado, debe tener el nombre de “AzureKeyVaultCert”:

De ahí solo debemos de recupera el Application Id y asociar la aplicación como identidad de acceso a nuestro contenedor de Azure Key Vault, como ya lo hicimos con la aplicación anterior.

Ahora podemos probar esa forma de autenticación en nuestro código. Para hacer pruebas locales debemos instalar el certificado pues lo buscaremos por su thumbprint.

A diferencia del método anterior aquí definimos una variable que contiene el thumbprint del certificado con el que los buscaremos en el método FindCertificateByThumbprint. Lo demás en el código es igual.

Si queremos probar el código locamente debemos instalar el certificado. Si vamos a hacer la instalación sobre un AppService o CloudService debemos subir el certificado que generamos por medio del portal en la sección de “certificados”.

 

Deja un comentario

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