Azure Key Vault en MSDyn365FO: Configuración de certificados y contraseñas

Azure Key Vault & MSDyn365FO: Configuración de certificados y contraseñas

Cada cierto tiempo me toca configurar el certificado electrónico para utilizarlo en el módulo del SII (Suministro Inmediato de Información) y siempre me pasa igual, no recuerdo exactamente como era. Es por ello que he decidido escribir este post, con un paso a paso lo suficientemente detallado como para no tener que perder más tiempo buscando en internet como se hacía, y oye, si además ayudo a alguien en la misma tesitura, pues mejor que mejor!

Este artículo va a ir dividido en tres partes principales. Las dos primeras partes son, como decía, las que necesitamos para utilizar el módulo del SII. En la tercera parte, veremos como podemos utilizar estos Key Vaults en nuestros desarrollos para almacenar contraseñas y secretos de forma segura.

Subir certificado a un Key Vault de Azure

Lo primero que haremos, es subir nuestro certificado electrónico a un Key Vault de Azure, pero ¿Qué es un Key Vault?

Azure Key Vault es un servicio de almacenamiento seguro de secretos en la nube. Puede almacenar de forma segura claves, contraseñas, certificados y otros secretos.

https://docs.microsoft.com/es-es/azure/key-vault/secrets/quick-create-portal

En este enlace puedes obtener más detalles sobre las ventajas de utilizar este servicio.

Por lo tanto, para poder subir nuestro certificado, lo primero que tendremos que hacer es crear un Key Vault dentro de nuestra suscripción de Azure. Para ello, vamos al portal de azure, pulsamos sobre el botón de Crear nuevo recurso, buscamos «Key Vault» en el buscador del marketplace y le damos al botón Crear.

Crear nuevo Key vault en el portal de azure

El siguiente paso será configurar los datos necesarios que nos solicita el Key Vault, como son el grupo de recursos (puede ser uno nuevo o existente), el nombre que asociamos al Key Vault, o la región en la que queremos desplegarlo.

Crear nuevo key vault en el portal de azure

Una vez relleno, pulsamos sobre el botón Revisar y crear, y cuando finalice la creación nos aparecerá la siguiente notificación en el panel.

Notificación de key vault creado

Ahora que ya tenemos el Key Vault creado, podemos proceder con la carga del certificado. Para ello, ejecutaremos el siguiente script de PowerShell indicando los valores necesarios. Para poder ejecutar este script, son necesarios unos requisitos mínimos:

  • El certificado debe tener extensión .pfx (yo lo he probado con .p12 y también funciona).
  • Hay que tener instalado el .Net Framework 4.7.2 o posterior.
  • Hay que tener instalado el módulo de Azure de PowerShell.
  • El usuario que ejecute el script debe tener los permisos suficientes dentro de la suscripción de Azure.

En este script deberás indicar los siguientes valores:

  • $pfxFilePath = Ruta donde se encuentra el certificado
  • $pwd = Contraseña del certificado (si se requiere)
  • $secretName = Nombre del secret que se creará en nuestro key vault y contendrá el certificado
  • $keyVaultName = Nombre del key vault que hemos creado previamente

Una vez ejecutado, nos solicitará credenciales de Azure.

Introducir credenciales de azure para cargar el certificado

Ahora, volvemos al Key Vault desde el portal de Azure, y vemos como se ha creado un nuevo Secret dentro del mismo.

Nuevo secret creado que contiene el certificado

El siguiente paso será crear un nuevo registro de aplicaciones dentro de Azure Active Directory. Gracias a esto, podremos impersonar el acceso de Dynamics 365 al Key Vault.

Para ello, vamos a Azure Active Directory. y creamos un nuevo registro de aplicaciones.

Crear registro de aplicaciones de Azure Active Directory

Una vez creado el registro de aplicaciones, vamos a crear un secret, que será utilizado por Dynamics para autenticar y poder utilizar el Key Vault. Para ello, vamos a Secretos y certificados y añadimos uno nuevo. Habrá que indicar el nombre y cuando queremos que expire. Una vez generado el secret, lo copiamos en un lugar seguro para utilizarlo más adelante.

Crear secret en registro de aplicaciones de azure active directory

Para finalizar con la configuración dentro del portal de Azure, vamos a añadir una política de acceso dentro del Key Vault que dará los permisos necesarios al registro de aplicaciones que acabamos de generar. Para ello, vamos al Key Vault, Políticas de acceso, y añadimos una política nueva. En ella, seleccionamos la plantilla necesaria para asociar los permisos a requeridos, y seleccionamos el registro de aplicaciones que creamos previamente.

Añadir política de acceso al key vault

Por último, hacemos clic en el botón guardar. Con esto, ya tendríamos toda la configuración necesaria en el lado de Azure.

Añadir política de acceso al key vault

Configurar Key Vault en Microsoft Dynamics 365 Finance

Ahora, toca ir a Dynamics 365 Finance para realizar la configuración necesaria. Para ello vamos a Administración del sistema > Parámetros de Key Vault. Creamos un nuevo registro y lo completamos con los siguientes valores:

Pámetros de Key Vault en Microsoft Dynamics 365 Finance and Operations
  • Dirección URL de Key Vault: Nombre de DNS (Key Vault)
Nombre de DNS de key vault
  • Cliente de Key Vault: Id Aplicación (App reg. AAD)
Id aplicación en registro de aplicaciones de azure active directory
  • Clave secreta de Key Vault: Secret generado (App reg. AAD)

Por último, añadimos un nuevo secreto:

  • Secreto: vault://Nombre_KeyVault/Nombre_Secreto/[Versión_Secreto] (En nuestro caso, solo tenemos una versión del secreto, por lo que no es necesario indicarlo).
  • Tipo de secreto: Certificado

Para finalizar, pulsamos en el botón Validar, y si todo hay ido bien, debería aparecernos el siguiente info:

Validar secreto en dynamics 365 finance and operations

Y con esto, ya tendríamos finalizada la configuración del certificado para utilizar en el SII, por lo que nuestros compañeros podrán continuar con la configuración y testeo del módulo.

Almacenar contraseñas en Key Vault y utilizarlas desde X++

Pues sí, aparte de utilizar los Key Vaults para almacenar nuestros certificados para el SII, podemos utilizar estos almacenes de claves para guardar, de manera segura, las contraseñas que necesitemos, por ejemplo, para integrarnos con aplicaciones de terceros desde X++. Con esto, evitaríamos almacenarlas en nuestra base de datos, y por supuesto, evitaríamos tener las contraseñas directamente en el código (si, en el código, aunque no lo creas, existe) y conseguiríamos centralizar toda esta información en un repositorio único.

Lo único que necesitamos es, añadir un nuevo secreto al Key Vault de forma manual pulsando sobre el botón Generar/Importar.

Crear un secreto en el key vault

Introducimos el nombre del secret y la contraseña que queremos guardar en el campo Value.

Crear secreto manual en key vault

Y lo configuramos dentro de Dynamics 365 Finance del mismo modo que vimos en el punto anterior.

Configurar secreto manual en dynamics 365 finance

La única diferencia con la configuración anterior, es que en este caso el Tipo de secreto es Manual.

Solo nos quedaría utilizar este secret desde nuestro código x++, y esto se puede hacer de una forma bastante sencilla, utilizando el método getManualSecretValue de la clase KeyVaultCertificateHelper.

Dicho método, nos devolverá el valor del secreto que hemos configurado, tal y como se puede ver en la siguiente imagen.

Obtener contraseña del secreto del key vault con x++

Espero que os sea útil! 🙂

1 comment / Add your comment below

Deja una respuesta

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.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR

Aviso de cookies