Ve a tu suscripción de Azure y busca Key vaults en la barra de búsqueda superior. Si no tienes una puedes obtener una gratuita con un crédito de 170€/200$ durante 30 días y probar esto y más cosas.
En la página del Key Vault haz clic en «Create key vault» y rellena los campos:
Puedes seguir con las otras pestañas pero no hace falta, con clicar en «Review & Create» tendremos el Key Vault listo.
Ahora vamos a Azure DevOps y creamos un pipeline nuevo o editamos uno que ya exista. Añadimos la tarea al agente y buscamos por azure key vault:
Es posible que tengáis que añadir la tarea del marketplace primero, si es así recordad que necesitaréis permisos a nivel de organización y no sólo del proyecto de AZDO en el que estáis. Ahora vamos a la tarea y seleccionamos la suscripción:
Una vez seleccionada hacemos clic en el botón «Authorize». Esto va a crear un service principal en vuestra suscripción, lo usaremos más adelante. Después de autorizar seleccionamos el key vault que hemos creado en el primer paso. Y ahora volvemos a Azure.
Vamos al key vault, seleccionamos «Access policies» y hacemos clic en «Add Access Policy»:
Cuando autorizamos la task de DevOps para que accediera a nuestra suscripción, se creó un service principal que ahora tenemos que seleccionar para que pueda leer y usar los secretos en nuestro pipeline. Hacemos clic en «Select principal»:
Y en la barra de búsqueda ponemos el nombre de la suscripción, el principal debería empezar con ese nombre y terminar con el ID de la suscripción. Lo seleccionamos y hacemos clic en «Select»:
Ahora desplegamos el lookup de «Secret permissions» y en «Secret Management Operations» seleccionamos Get y List:
Si quisieramos usar también certificados o claves deberíamos hacer lo mismo. Finalmente hacemos clic en el botón «Add» y no os olvidéis de darle al «Save» o no se guardará nada!
Ahora ya podemos crear el secreto en el key vault. Vamos a «Secrets» y hacemos clic en «Generate/Import», completamos los campos y le damos a «Create» para guardar:
Ya tenemos todo listo para usar el secreto en el pipeline. Voy a añadir una tarea de PowerShell para llamar a la API de DB de LCS usando d365fo.tools, pero cambiaré todas las variables por los secrets:
Como véis incluso he puesto el AAD AppId en un secreto.
Lo que hace la task de Azure Key Vault es obtener los secretos de Azure y guardarlos en variables cuando se ejecuta el pipeline:
Así podemos acceder al valor con la notación $(variableName) en el script de PowerShell. Si intentas sacar el valor por pantalla usando el Write-Host todo lo que obtendrás son tres asteriscos. Si pudieramos ver el valor de los secretos de una forma tan fácil todo esto no tendría mucho sentido.
Si ahora comprobamos el resultado de ejecutar el comando Get-D365LcsDatabaseBackups veremos como de bien funciona:
Incluso ahora el valor del Id de proyecto no se muestra porque era uno de nuestros secretos!
Y así es como podemos añadir un poco de seguridad extra a nuestro Dev ALM!