Contenido


Gestione los alertas de seguridad con IBM DevOps Track & Plan

Utilice la interfaz de REST para informar que ocurrieron problemas

Comments

Se utilizó la interfaz clásica de Bluemix para escribir este artículo. Debido a la rápida evolución de la tecnología, es posible que se hayan cambiado algunos pasos e ilustraciones.

El servicio IBM Bluemix® Track & Plan está desarrollado principalmente para el desarrollo de aplicaciones. Sin embargo, las aplicaciones también pueden utilizarlo para informar su propio estado, incluidas las violaciones de seguridad identificadas. En este tutorial, aprenderá cómo hacer que una aplicación Node.js Bluemix se contacte automáticamente con Track & Plan mediante el uso de la interfaz de REST para informar que ocurrieron problemas.

Si bien este tutorial se escribió desde una perspectiva de seguridad, no hay nada que restrinja el uso de esta técnica. Las aplicaciones la pueden usar para informar condiciones de error, advertir que se están acabando los recursos, y más.

Lo que necesitará para crear su aplicación

  • Una cuenta de Bluemix.
  • Conocimientos en HTML y JavaScript.
  • Conocimiento de la pila de aplicaciones MEAN (al menos Node.js y Express). (Si no está familiarizado con MEAN, consulte "Construir una aplicación de autopublicación en Facebook con Bluemix y la pila MEAN", un artículo de tres partes que se encuentra en IBM developerWorks.)
  • Un entorno de desarrollo que pueda subir la aplicación Node.js a Bluemix, como Eclipse.

Ejecutar la aplicaciónObtener el código

En este tutorial, aprenderá cómo usar IBM Devops Track & Plan para codificar aplicaciones que informen al administrador cuando las están atacando.

La aplicación de demostración

Esta aplicación es una pantalla de inicio de sesión. Usted puede iniciar sesión como el usuario legítimo, jdoe, con la contraseña object00. Para generar un evento de seguridad que se deba informar, también puede iniciar sesión con un nombre de usuario o una contraseña incorrectos. También hay campos para la configuración de Track & Plan para que los eventos de seguridad se puedan registrar en un sistema donde usted pueda verlos.

Paso 1. Configurar Track & Plan

  1. Inicie sesión en la consola de Bluemix y abra su aplicación web.
  2. Añada un repositorio Git.
  3. Vaya a la configuración del proyecto y habilite el Track & Plan para el repositorio.
  4. Si su espacio todavía no los incluye, añada los servicios DevOps Delivery Pipeline y Track & Plan.
  5. Si fuese necesario, reemplace los archivos del repositorio Git con los archivos de origen de su aplicación.
  6. Implemente, cree y despliegue la aplicación.
  7. Haga clic en TRACK & PLAN.
  8. Haga clic en Mi Trabajo y cree un elemento de trabajo abierto (el icono del "más" de la izquierda). Escriba en el campo de resumen: test #alerta #seguridad, para crear como etiquetas "alerta" y "seguridad".
  9. Confirme que el nuevo elemento de trabajo ahora esté abierto con las etiquetas correctas.Screen capture showing new work item
    Screen capture showing new work item

Paso 2. Obtener los datos de Track & Plan

El siguiente paso es obtener los datos de Track & Plan para establecer la comunicación con el servidor a través de la interfaz REST. Le proporcionamos una utilidad que realiza la mayor parte del trabajo por usted. La siguiente imagen es una captura de pantalla de esta utilidad.

Screen capture showing utility
Screen capture showing utility

Introduzca la URL en su interfaz de usuario de Track & Plan (por ejemplo, https://hub.jazz.net/ccm19/quickplanner/jazzhub.html#items:planType=mywork&projectId=_CtzTlXn5EeWL9uPUvTiukg), y su nombre de usuario y contraseña de Track & Plan. El código de app.js deduce el resto de la configuración y la almacena en una cookie que el código de index.html lee.

Cómo funciona

Nota: Para enviar alertas a Track & Plan no es necesaria esta sección. Puede saltársela e integrar como código de su aplicación los valores que proporciona. Sin embargo, se la incluye en caso de que quiera entender cómo app.js deduce la configuración.

El siguiente fragmento de código declara la función que responde a una solicitud de publicación para /getConf, la acción para el formulario util.html. Tanto serverID como projectID se encuentran en la URL de Track & Plan, por lo que se recuperan con expresiones regulares. A diferencia de a estos campos, para recuperar la categoría es necesario emitir una solicitud REST a Track & Plan. La mayor parte de la función crea esa solicitud y luego la interpreta.

app.post("/getConf", function(req, res) {
	var serverID = RegExp("https://hub.jazz.net/(ccm[0-9]*)/").exec(req.body.url)[1];
	var projectID = RegExp("projectId=(_[0-9A-Za-z]*)&").exec(req.body.url)[1];

La mayoría de las siguientes opciones HTTPS son la información estándar que podría especificarse en la URL, pero hay algunas excepciones. El campo auth es el nombre de usuario y la contraseña. También hay dos campos de cabecera que son importantes para las solicitudes de REST: Content-Type, que especifica el tipo de solicitud (y el formato de los datos adicionales, si los hubiera), y Accept, que especifica el formato de la respuesta.

	var httpsOpts = {
		hostname: 'hub.jazz.net',
		port: 443,
  		path: "/" + serverID + "/oslc/contexts/" + projectID + "/workitems",
  		method: 'GET',
  		auth: req.body.uid + ":" + req.body.passwd,
  		headers: {
	  		Accept: "text/json",
  			"Content-Type": "application/x-oslc-cm-change-request+json"
  			}
	};

El siguiente fragmento envía la solicitud y declara la función que se llamará con la respuesta. Sin embargo, se llama a esta función tan pronto como Node.js recibe del servidor la cabecera de la respuesta, que es demasiado pronto como para que sea útil. Afortunadamente, cada vez que una parte del cuerpo del HTTP se recibe a través de TCP, la respuesta emite un evento de datos. Así que, para obtener el cuerpo completo, añado los datos de todos esos eventos.

	var httpsReq = https.request(httpsOpts, function(httpsRes) {
		var data = "";

		httpsRes.on("data", function(d) {
			data += d.toString();
			
		});

Cuando se cierra la conexión HTTP después de que se haya entregado todo el cuerpo, la respuesta emite un evento end . Como la cabecera Accept HTTP especificó JSON como formato de los datos, debe utilizar JSON.parse() para interpretarlos. Los campos oslc_cm:results contienen todos los resultados de la consulta, todos los elementos de trabajo. Usamos la primera entrada (con el número cero), aunque si hubiera varias cualquier otra también serviría. Para identificar la categoría use el valor rdf:resource que se encuentra dentro de la estructura rtc_cm:filedAgainst .

		httpsRes.on("end", function() {
			var categoryID =
			JSON.parse(data)["oslc_cm:results"][0]["rtc_cm:filedAgainst"]["rdf:resource"];

En un entorno de producción, almacenaríamos toda esta información en una base de datos y para usarla haríamos que el usuario iniciase sesión en una cuenta (no para recuperarla; no hay razón para proporcionársela al navegador). Pero este no es un entorno de producción. En este caso, queremos que los usuarios vean los parámetros y sean capaces de utilizarlos en sus propias aplicaciones. Para proporcionar esta información, la aplicación establece cookies para esos parámetros. (Para saber de qué manera el código JavaScript lee esas cookies, consulte JavaScript Cookies en el sitio web w3schools.com.)

		res.setHeader("Set-Cookie",
				["serverID=" + serverID, "projectID=" + projectID,
					"categoryID=" + categoryID,
					"userID=" + req.body.uid]);
			res.send('<a href="index.html">Configuration retrieved</a>');
		});

Paso 3. Enviar alertas a Track & Plan

El paso final sirve para enviar las alertas a Track & Plan, a través de la interfaz de REST. La función que lo hace es sendNotice(msg, conf). El parámetro conf es la configuración, que se proporciona como la consulta enviada a la "página" web en /login.

La siguiente sección muestra el informe que se envía a Track & Plan. Ninguno de los tipos de Track & Plan corresponde a una alerta de seguridad, así que elegí el más parecido task. El campo dc:subject tiene las etiquetas para la tarea, que en este caso son seguridad y alerta.

	var report = {
		"dc:title": "Security violation",
		"dc:description": msg,
		"dc:type": "task",
		"dc:subject": "alert, security",
		"rtc_cm:filedAgainst": {
			"rdf:resource": conf.categoryID
		}
	};

Las opciones del HTTPS son evidentes. Estamos creando una nueva entidad, así que el método HTTP es POST. El campo auth contiene la autentificación de Track & Plan. Normalmente, este valor estaría explícito en el código, o sería un parámetro (vea el Paso de "Crear una aplicación de autopublicación en Facebook con Bluemix y la pila MEAN, Parte 3"). En este caso, está hecho de elementos de configuración proporcionados por el usuario, así que puede hacer que su aplicación inicie sesión en su propio Track & Plan donde puede ver los resultados, en vez de en el inicio, donde no puede.

Para describir el tipo de aplicación de la solicitud y el formato solicitado para la respuesta, en REST se usan los campos de cabecera adicionales.

	var httpsOpts = {
		hostname: 'hub.jazz.net',
		port: 443,
  		path: "/" + conf.serverID + "/oslc/contexts/" + conf.projectID + "/workitems",
  		method: 'POST',
  		auth: conf.ibm_uid + ":" + conf.ibm_passwd,		
  		headers: {
	  		Accept: "text/json",
  			"Content-Type": "application/x-oslc-cm-change-request+json"
  		}
	};

Finalmente, la siguiente sección envía la solicitud HTTPS a Track & Plan. La solicitud no tiene una "devolución de llamada", porque no estamos interesados en la respuesta. Sólo proporciona los detalles del nuevo elemento de trabajo que hemos creado. La siguiente línea escribe el informe en formato JSON, en el cuerpo de la solicitud HTTP. La última línea finaliza la solicitud y la envía.

 	var httpsReq = https.request(httpsOpts);
	httpsReq.write(JSON.stringify(report));
	httpsReq.end();

Intente iniciar sesión en la aplicación de prueba con credenciales erróneas. Verá un mensaje de error.

Screen capture showing results of attempted login
Screen capture showing results of attempted login

Luego, vaya aTRACK & PLAN en la interfaz de IBM Bluemix DevOps Services y haga clic en TRABAJO ENTRANTE. Para ver los detalles de la alerta, haga clic en el mosaico de la nueva tarea.

Screen capture showing Incoming Work
Screen capture showing Incoming Work

Paso 4: Asignar automáticamente el propietario del elemento de trabajo

A menudo es útil asignar automáticamente el propietario de un elemento de trabajo. De esa manera, hay alguien responsable que recibe información cuando se abre el elemento de trabajo (como el creador).

  1. Primero, necesita identificar el campo con el propietario del elemento. Para hacerlo, cree un nuevo elemento de trabajo y asígneselo manualmente a alguien. Puede hacerlo desde la interfaz de usuario de Track & Plan, si escribe en el título unique_string @:<user name>.Screen capture showing title entered
    Screen capture showing title entered
  2. El siguiente paso es recuperar manualmente la lista de elementos de trabajo. Tome la misma URL usada en la solicitud POST en el paso siguiente y úsela en el navegador. Hágalo en el mismo navegador que usó en el subpaso 1, donde usted ya está autenticado. El navegador generará una solicitud GET, que le dará la lista de tiquets de trabajos abiertos.
    https://hub.jazz.net/<Server ID>/oslc/contexts/<Project ID>/workitems
  3. Encuentre el elemento de trabajo que acaba de crear (ayuda si el título tiene una cadena de caracteres única). Como puede ver en la siguiente captura de pantalla, el campo es rtc_cm:ownedBy, y dentro de él rdf:resource. También puede ver que el valor no es simplemente el nombre de usuario, sino una URL que contiene el nombre de usuario y otra información. Anote este valor.Screen capture showing url with user name and other info
    Screen capture showing url with user name and other info
  4. En su código, modifique el informe para incluir el camportc_cm:ownedBy (añada el código en las líneas 9-10, reemplazando el recurso con su valor):
    	var report = {
    		"dc:title": "Security violation",
    		"dc:description": msg,
    		"dc:type": "task",
    		"dc:subject": "alert, security",
    		"rtc_cm:filedAgainst": {
    			"rdf:resource": conf.categoryID
    		},
    		"rtc_cm:ownedBy": {
    			"rdf:resource": "https://hub.jazz.net/jts19/users/oripomerantz"			
    		}
    	};
  5. Confirme que el nuevo elemento ahora tenga el propietario correcto. El propietario recibirá un email en pocos minutos.
Sceen capture showing security violation message
Sceen capture showing security violation message

Conclusión

En este punto, puede enviar alertas de seguridad desde sus propias aplicaciones a Bluemix Track & Plan. Puede utilizar esta herramienta para problemas de autenticación (los usuarios no logran iniciar sesión), violaciones de autorizaciones (los usuarios intentan hacer algo que no está permitido) y más. Con la técnica del Paso 4, es posible especificar automáticamente otros campos, como la prioridad, una fecha límite para resolver el problema y otra información relevante.


Recursos para Descargar


Temas relacionados


Comentarios

Inicie Sesión o Regístrese para agregar comentarios.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Cloud computing
ArticleID=1032471
ArticleTitle=Gestione los alertas de seguridad con IBM DevOps Track & Plan
publish-date=05312016