Uso de secretos de Azure Key Vault en Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Azure Key Vault permite a los desarrolladores almacenar y administrar de forma segura información confidencial, como claves de API, credenciales o certificados. El servicio Azure Key Vault admite dos tipos de contenedores: almacenes y grupos de HSM (módulo de seguridad de hardware) administrado. Los almacenes pueden almacenar claves, secretos y certificados protegidos con HSM, mientras que los grupos de HSM administrado admiten exclusivamente claves protegidas con HSM.

En este tutorial, aprenderá a:

  • Crear una instancia de Azure Key Vault mediante la CLI de Azure.
  • Incorporar un secreto y configurar el acceso a Azure Key Vault.
  • Uso de secretos en la canalización

Requisitos previos

Creación de un repositorio

Si ya tiene su propio repositorio, continúe con el paso siguiente. De lo contrario, siga las instrucciones siguientes para inicializar el repositorio. Usaremos este repositorio de Azure para configurar nuestra canalización.

  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Seleccione Repositorios y, a continuación, seleccione Inicializar para inicializar la rama principal con un archivo README.

    Captura de pantalla que muestra cómo inicializar un repositorio con un archivo README.

Crear una instancia de Azure Key Vault

  1. Inicie sesión en Azure Portal y, luego, seleccione el botón Cloud Shell en la esquina superior derecha.

  2. Si tiene más de una suscripción de Azure asociada a su cuenta, use el siguiente comando para especificar una suscripción predeterminada. Puede usar az account list para generar una lista de las suscripciones.

    az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
    
  3. Establezca la región de Azure predeterminada. Puede usar az account list-locations para generar una lista de regiones disponibles.

    az config set defaults.location=<YOUR_REGION>
    
  4. Crear un nuevo grupo de recursos.

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. Cree una nueva instancia de Azure Key Vault.

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. Cree un nuevo secreto en el almacén de claves de Azure.

    az keyvault secret set \
      --name <YOUR_SECRET_NAME> \
      --value <YOUR_ACTUAL_SECRET> \
      --vault-name <YOUR_KEY_VAULT_NAME>
    

Configuración de directivas de acceso al almacén de claves

Para acceder a Azure Key Vault, debemos configurar una entidad de servicio para conceder acceso a Azure Pipelines. Siga esta guía para crear una entidad de servicio con la CLI de Azure y, a continuación, continúe con los pasos siguientes de esta sección.

  1. Vaya a Azure Portal y, a continuación, use la barra de búsqueda para buscar el almacén de claves que creó anteriormente.

    Captura de pantalla que muestra cómo buscar la instancia de Azure Key Vault.

  2. Seleccione Directivas de acceso y, a continuación, seleccione Crear para crear una nueva directiva.

  3. En Permisos de secretos, seleccione Obtener y Enumerar.

  4. Seleccione Siguiente y, a continuación, seleccione la entidad de servicio que creó anteriormente. Una entidad de servicio es un objeto que representa una aplicación o servicio que solicita acceso a recursos de Azure.

  5. Seleccione Siguiente y, una vez más, Siguiente.

  6. Revise las directivas y seleccione Crear cuando haya terminado.

Nota:

No se admiten las instancias de Azure Key Vault que usan el control de acceso basado en rol de Azure (RBAC de Azure).

Agregar asignación de roles

En el paso siguiente, crearemos una conexión de servicio ARM mediante la entidad de servicio. Para poder comprobar la conexión, es necesario conceder a la entidad de servicio acceso de Lectura en el nivel de suscripción:

  1. Vaya a Azure Portal.

  2. Seleccione Suscripciones en el panel de navegación izquierdo y, a continuación, busque y seleccione la suscripción.

  3. Seleccione Control de acceso y, a continuación, seleccione Agregar>Agregar asignación de roles.

    Captura de pantalla que muestra cómo agregar una nueva asignación de roles en el nivel de suscripción.

  4. Seleccione Lector en la pestaña Rol y, a continuación, seleccione Siguiente.

  5. Seleccione Usuario, grupo o entidad de servicio y, después, Seleccionar miembros.

    Captura de pantalla que muestra cómo agregar miembros a la asignación de roles en Azure.

  6. Use la barra de búsqueda para buscar la entidad de servicio y, a continuación, seleccione el signo "+" para seleccionarla y haga clic en el botón Seleccionar.

  7. Seleccione Revisar y asignar, revise la configuración y, a continuación, seleccione Revisar y asignar una vez más para confirmar las opciones y agregar la asignación de roles.

Creación de una conexión de servicio

  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Seleccione Configuración del proyecto>Conexiones de servicio y, a continuación, seleccione Nueva conexión de servicio para crear una nueva conexión de servicio.

  3. Seleccione Azure Resource Manager y, a continuación, haga clic en Siguiente.

  4. Seleccione Entidad de servicio (manual), y a continuación, seleccione Siguiente.

  5. Seleccione Azure Cloud para Entorno y Suscripción para el Nivel de ámbito y, a continuación, introduzca su ID de suscripción y Nombre de suscripción.

  6. Rellene los siguientes campos con la información que obtuvo al crear la entidad de servicio y, a continuación, seleccione Comprobar cuando haya terminado:

    • id.de entidad de servicio: su entidad de servicioappId.
    • Clave de entidad de servicio: su entidad de servicio contraseña.
    • id. de inquilino: su entidad de servicio inquilino.
  7. Una vez que la comprobación se haya realizado correctamente, proporcione un nombre y una descripción (opcional) para la conexión de servicio y, a continuación, marque la casilla Conceder permiso de acceso a todas las canalizaciones.

  8. Seleccione Comprobar y guardar cuando haya terminado.

    Captura de pantalla que muestra cómo crear una nueva conexión del servicio Azure Resource Manager utilizando la entidad de servicio.

  1. Inicie sesión en su colección de Azure DevOps y vaya a su proyecto.

  2. Seleccione Configuración del proyecto>Conexiones de servicio>Nueva conexión de servicio y, a continuación, seleccione Azure Resource Manager para crear una nueva conexión de servicio ARM.

  3. Asigne un nombre a la conexión de servicio y, a continuación, seleccione Azure Cloud para Entorno y Suscripción para el Nivel de ámbito.

  4. Introduzca su ID de suscripción y el Nombre de suscripción.

  5. Rellene los siguientes campos con la información que obtuvo al crear la entidad de servicio y, a continuación, seleccione Comprobar conexión cuando haya terminado:

    • ID de cliente de entidad de servicio: appId de la entidad de servicio.
    • Clave de entidad de servicio: su entidad de servicio contraseña.
    • id. de inquilino: su entidad de servicio inquilino.
  6. Marque la casilla Permitir que todas las canalizaciones usen esta conexión y, a continuación, seleccione Aceptar cuando haya terminado.

    Captura de pantalla que muestra cómo crear una nueva conexión de servicio ARM mediante la entidad de servicio en Azure DevOps Server 2019.

Creación de una canalización

  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Seleccione Canalizaciones y elija Nueva canalización.

  3. Seleccione Usar el editor clásico para crear una canalización clásica.

  4. Seleccione Git de Azure Repos, seleccione el repositorio y la rama predeterminada y, a continuación, seleccione Continuar.

  5. Seleccione la plantilla de canalización Escritorio de .NET.

  6. Para este ejemplo, solo necesitaremos las dos últimas tareas. Presione CTRL y, luego, seleccione las cinco primeras tareas, haga clic con el botón derecho y elija Quitar tareas seleccionadas para eliminarlas.

    Captura de pantalla que muestra cómo eliminar varias tareas de canalización.

  7. Seleccione + para agregar una nueva tarea. Busque la tarea Línea de comandos, selecciónela y, a continuación, seleccione Agregar para agregarla a la canalización. Una vez agregada, configúrela de la siguiente manera:

    • Nombre para mostrar: Crear archivo
    • Script: echo $(YOUR_SECRET_NAME) > secret.txt

    Captura de pantalla que muestra cómo configurar la tarea de línea de comandos.

  8. Seleccione + para agregar una nueva tarea. Busque la tarea Azure Key Vault, selecciónela y, a continuación, seleccione Agregar* para agregarla a la canalización. Una vez agregada, configúrela de la siguiente manera:

    • Nombre para mostrar: Azure Key Vault
    • Suscripción de Azure: seleccione la conexión de servicio de la entidad de servicio que creó anteriormente
    • Almacén de claves: seleccione el almacén de claves
    • Filtro de secreto: una lista separada por comas de los nombres de secretos o deje * para descargar todos los secretos del almacén de claves seleccionado

    Captura de pantalla que muestra cómo configurar la tarea de Azure Key Vault en canalizaciones clásicas.

  9. Seleccione la tarea Copiar archivos y rellene los campos obligatorios de la siguiente manera:

    • Nombre para mostrar: Copiar archivo
    • Contenido: secret.txt
    • Carpeta de destino: $(build.artifactstagingdirectory)

    Captura de pantalla que muestra cómo configurar la tarea de copiar archivos en canalizaciones clásicas.

  10. Seleccione la tarea Publicar artefactos y rellene los campos obligatorios de la siguiente manera:

    • Nombre para mostrar: Publicar artefacto
    • Ruta de acceso para la publicación: $(build.artifactstagingdirectory)
    • Nombre del artefacto: colocar
    • Ubicación de publicación del artefacto: Azure Pipelines

    Captura de pantalla que muestra cómo configurar la tarea de publicar artefactos en canalizaciones clásicas.

  11. Seleccione Guardar y poner en cola y, a continuación, seleccione Ejecutar para ejecutar la canalización.

  12. Una vez completada la ejecución de la canalización, vuelva al resumen de la canalización y seleccione el artefacto publicado.

  13. Seleccione colocar>secret.txt para descargar el artefacto publicado.

    Captura de pantalla que muestra cómo descargar el artefacto publicado.

  14. Abra el archivo de texto que acaba de descargar, debe contener el secreto del almacén de claves de Azure.

  1. Inicie sesión en su colección de Azure DevOps y vaya a su proyecto.

  2. Seleccione Canalizaciones y Compilaciones.

  3. Seleccione Nueva>Nueva canalización de compilación.

  4. Seleccione Usar el editor clásico para crear una nueva canalización de compilación clásica.

  5. Seleccione Git de Azure Repos, seleccione el repositorio y la rama predeterminada y, a continuación, seleccione Continuar.

  6. Seleccione la plantilla de canalización de Escritorio de .Net y, a continuación, seleccione Aplicar.

  7. Para este ejemplo, solo necesitaremos las dos últimas tareas. Presione CTRL y, luego, seleccione las cinco primeras tareas, haga clic con el botón derecho y elija Quitar tareas seleccionadas para eliminarlas.

    Captura de pantalla que muestra cómo eliminar varias tareas de canalización en canalizaciones clásicas en Azure DevOps Server 2019.

  8. Seleccione + para agregar una nueva tarea. Busque la tarea Línea de comandos, selecciónela y, a continuación, seleccione Agregar para agregarla a la canalización. Una vez agregada, configúrela de la siguiente manera:

    • Nombre para mostrar: Crear archivo
    • Script: echo $(YOUR_SECRET_NAME) > secret.txt

    Captura de pantalla que muestra cómo configurar la tarea de línea de comandos en canalizaciones clásicas en Azure DevOps Server 2019.

  9. Seleccione + para agregar una nueva tarea. Busque la tarea Azure Key Vault, selecciónela y, a continuación, seleccione Agregar* para agregarla a la canalización. Una vez agregada, configúrela de la siguiente manera:

    • Nombre para mostrar: Azure Key Vault
    • Suscripción de Azure: seleccione la conexión de servicio de la entidad de servicio que creó anteriormente
    • Almacén de claves: seleccione el almacén de claves
    • Filtro de secreto: una lista separada por comas de los nombres de secretos o deje * para descargar todos los secretos del almacén de claves seleccionado

    Captura de pantalla que muestra cómo configurar la tarea de Azure Key Vault en una canalización clásica en Azure DevOps Server 2019.

  10. Seleccione la tarea Copiar archivos y rellene los campos obligatorios de la siguiente manera:

    • Nombre para mostrar: Copiar archivo
    • Contenido: secret.txt
    • Carpeta de destino: $(build.artifactstagingdirectory)

    Captura de pantalla que muestra cómo configurar la tarea de copiar archivos en canalizaciones clásicas en Azure DevOps Server 2019.

  11. Seleccione la tarea Publicar artefactos y rellene los campos obligatorios de la siguiente manera:

    • Nombre para mostrar: Publicar artefacto
    • Ruta de acceso para la publicación: $(build.artifactstagingdirectory)
    • Nombre del artefacto: colocar
    • Ubicación de publicación del artefacto: Azure Pipelines

    Captura de pantalla que muestra cómo configurar la tarea de publicar artefactos en canalizaciones clásicas en Azure DevOps Server 2019.

  12. Seleccione Guardar y poner en cola y, a continuación, seleccione Guardar y poner en cola para ejecutar la canalización de compilación.

  13. Una vez completada la ejecución de la canalización, seleccione Artefactos y, a continuación, seleccione colocar.

  14. En la ventana recién abierta, seleccione colocar>secret.txt, seleccione el icono de puntos suspensivos (...) y, a continuación, seleccione descargar para guardar el archivo de texto.

  15. Abra el archivo de texto que acaba de descargar; debe contener el secreto del almacén de claves de Azure.

Advertencia

Este tutorial tiene carácter educativo exclusivamente. Para conocer los procedimientos recomendados de seguridad y cómo trabajar de forma segura con secretos, consulte Administración de secretos en las aplicaciones de servidor con Azure Key Vault.

Limpieza de recursos

Siga los pasos que se indican a continuación para eliminar los recursos que ha creado:

  1. Si ha creado una nueva organización para alojar el proyecto, consulte cómo eliminar la organización o, de lo contrario , elimine el proyecto.

  2. Todos los recursos de Azure creados durante este tutorial se hospedan en un único grupo de recursos. Ejecute el comando siguiente para eliminar el grupo de recursos y todos los recursos que incluye.

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

Preguntas más frecuentes

P: Recibo el siguiente error: "El usuario o grupo no tiene permiso de lista de secretos". ¿Qué debo hacer?

R: Si encuentra un error que indica que el usuario o grupo no tiene el permiso de lista de secretos en un almacén de claves, ejecute los siguientes comandos para autorizar a la aplicación el acceso a la clave o el secreto en Azure Key Vault:

$ErrorActionPreference="Stop";
$Credential = Get-Credential;
Connect-AzAccount -SubscriptionId <YOUR_SUBSCRIPTION_ID> -Credential $Credential;
$spn=(Get-AzureRmADServicePrincipal -SPN <YOUR_SERVICE_PRINCIPAL_ID>);
$spnObjectId=$spn.Id;
Set-AzureRmKeyVaultAccessPolicy -VaultName key-vault-tutorial -ObjectId $spnObjectId -PermissionsToSecrets get,list;