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
Una organización de Azure DevOps y un proyecto. Cree una organización o un proyecto si aún no lo ha hecho.
Suscripción a Azure. Cree una cuenta de Azure de forma gratuita si aún no tiene una.
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.
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
Seleccione Repositorios y, a continuación, seleccione Inicializar para inicializar la rama principal con un archivo README.
Crear una instancia de Azure Key Vault
Inicie sesión en Azure Portal y, luego, seleccione el botón Cloud Shell en la esquina superior derecha.
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>
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>
Crear un nuevo grupo de recursos.
az group create --name <YOUR_RESOURCE_GROUP_NAME>
Cree una nueva instancia de Azure Key Vault.
az keyvault create \ --name <YOUR_KEY_VAULT_NAME> \ --resource-group <YOUR_RESOURCE_GROUP_NAME>
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.
Vaya a Azure Portal y, a continuación, use la barra de búsqueda para buscar el almacén de claves que creó anteriormente.
Seleccione Directivas de acceso y, a continuación, seleccione Crear para crear una nueva directiva.
En Permisos de secretos, seleccione Obtener y Enumerar.
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.
Seleccione Siguiente y, una vez más, Siguiente.
Revise las directivas y seleccione Crear cuando haya terminado.
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:
Vaya a Azure Portal.
Seleccione Suscripciones en el panel de navegación izquierdo y, a continuación, busque y seleccione la suscripción.
Seleccione Control de acceso y, a continuación, seleccione Agregar>Agregar asignación de roles.
Seleccione Lector en la pestaña Rol y, a continuación, seleccione Siguiente.
Seleccione Usuario, grupo o entidad de servicio y, después, Seleccionar miembros.
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.
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
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
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.
Seleccione Azure Resource Manager y, a continuación, haga clic en Siguiente.
Seleccione Entidad de servicio (manual), y a continuación, seleccione Siguiente.
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.
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 servicio appId.
- Clave de entidad de servicio: su entidad de servicio contraseña.
- id. de inquilino: su entidad de servicio inquilino.
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.
Seleccione Comprobar y guardar cuando haya terminado.
Inicie sesión en su colección de Azure DevOps y vaya a su proyecto.
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.
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.
Introduzca su ID de suscripción y el Nombre de suscripción.
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.
Marque la casilla Permitir que todas las canalizaciones usen esta conexión y, a continuación, seleccione Aceptar cuando haya terminado.
Creación de una canalización
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
Seleccione Canalizaciones y elija Nueva canalización.
Seleccione Usar el editor clásico para crear una canalización clásica.
Seleccione Git de Azure Repos, seleccione el repositorio y la rama predeterminada y, a continuación, seleccione Continuar.
Seleccione la plantilla de canalización Escritorio de .NET.
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.
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
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
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)
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
Seleccione Guardar y poner en cola y, a continuación, seleccione Ejecutar para ejecutar la canalización.
Una vez completada la ejecución de la canalización, vuelva al resumen de la canalización y seleccione el artefacto publicado.
Seleccione colocar>secret.txt para descargar el artefacto publicado.
Abra el archivo de texto que acaba de descargar, debe contener el secreto del almacén de claves de Azure.
Inicie sesión en su colección de Azure DevOps y vaya a su proyecto.
Seleccione Canalizaciones y Compilaciones.
Seleccione Nueva>Nueva canalización de compilación.
Seleccione Usar el editor clásico para crear una nueva canalización de compilación clásica.
Seleccione Git de Azure Repos, seleccione el repositorio y la rama predeterminada y, a continuación, seleccione Continuar.
Seleccione la plantilla de canalización de Escritorio de .Net y, a continuación, seleccione Aplicar.
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.
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
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
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)
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
Seleccione Guardar y poner en cola y, a continuación, seleccione Guardar y poner en cola para ejecutar la canalización de compilación.
Una vez completada la ejecución de la canalización, seleccione Artefactos y, a continuación, seleccione colocar.
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.
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:
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.
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;