Conteúdo


Gerencie alertas de segurança com o IBM DevOps Track & Plan

Use a interface REST para reportar problemas

Comments

Este artigo foi escrito usando a interface clássica do Bluemix. Dada a rápida evolução da tecnologia, algumas etapas e ilustrações podem ter mudado.

O serviço do IBM Bluemix® Track & Plan foi planejado principalmente para propósitos de desenvolvimento. No entanto, os aplicativos também podem usá-lo para relatar seus próprios status, incluindo violações de segurança identificadas. Neste tutorial, o Cliente aprenderá como fazer um aplicativo Node.js do Bluemix contatar o Track & Plan automaticamente usando a interface REST para relatar problemas.

Embora este tutorial tenha sido criado a partir de uma perspectiva de segurança, não há nada que restrinja o uso desta técnica. Os aplicativos podem usá-lo para relatar condições de erro, avisar sobre a falta de recursos e muito mais.

O que será necessário para desenvolver o aplicativo

  • Uma conta do Bluemix.
  • Conhecimento de HTML e JavaScript.
  • Conhecimento da pilha de aplicativos MEAN (pelo menos Node.js e Express). (Se o Cliente não estiver familiarizado com o MEAN, consulte "Desenvolva um aplicativo do Facebook de autopostagem com o Bluemix e a pilha do MEAN," um artigo de terceiros no IBM developerWorks.)
  • Um ambiente de desenvolvimento que pode fazer upload de um aplicativo Node.js para Bluemix, tal como o Eclipse.

Execute o aplicativoObtenha o código

Neste tutorial, o Cliente aprenderá como usar o IBM Devops Track & Plan para codificar aplicativos para informar ao administrador quando eles estão sob ataque.

O aplicativo de demonstração

Este aplicativo é uma tela de login. É possível efetuar login como o usuário legítimo, jsilva, com a senha object00. Para gerar um evento de segurança reportável, também é possível efetuar login com um nome de usuário ou senha incorreta. Também há campos para sua configuração do Track & Plan, de forma que os eventos de segurança possam ser registrados em um sistema no qual é possível visualizá-los.

Etapa 1. Configure o Track & Plan

  1. Efetue login no console do Bluemix e abra seu aplicativo da web.
  2. Inclua um repositório Git.
  3. Acesse as configurações do projeto e ative o Track & Plan para o repositório.
  4. Se seu espaço ainda não incluí-los, inclua serviços do DevOps Delivery Pipeline e Track & Plan.
  5. Se necessário, substitua os arquivos no repositório Git pelos arquivos de origem do aplicativo.
  6. Realize o push, desenvolva e implemente o aplicativo.
  7. Clique em TRACK & PLAN.
  8. Clique em Meu Trabalho e crie um item de trabalho aberto (o ícone de mais à esquerda). Digite no campo de resumo: test #alert #security, para criar "alert" e "security" como tags.
  9. Confirme se o novo item de trabalho agora está aberto com as tags corretas.Screen capture showing new work item
    Screen capture showing new work item

Etapa 2. Obter dados do Track & Plan

A próxima etapa é obter os dados do Track & Plan para se comunicar com o servidor por meio da interface REST. Eu forneço um utilitário que realiza a maior parte do trabalho para você. A figura a seguir é uma captura de tela deste utilitário.

Screen capture showing utility
Screen capture showing utility

Insira a URL para sua interface com o usuário do Track & Plan (por exemplo, https://hub.jazz.net/ccm19/quickplanner/jazzhub.html#items:planType=mywork&projectId=_CtzTlXn5EeWL9uPUvTiukg) e seu nome de usuário e senha do Track & Plan. Em seguida, o código em app.js figura o restante da configuração e a armazena em um cookie que o código index.html lê.

Como isto funciona

Observação: Esta seção não é necessária para enviar alertas ao Track & Plan. É possível ignorá-la e desenvolver o código dos valores que ela fornece em seu aplicativo. No entanto, ela foi incluída aqui, caso deseje entender como app.js figura a configuração.

O segmento de código a seguir declara a função que responde a uma solicitação posterior para /getConf, a ação para o formulário util.html. O serverID e o projectID estão na URL do Track & Plan, portanto, eles são recuperados usando expressões regulares. Em contraste a estes campos, a recuperação da categoria requer a emissão de uma solicitação REST ao Track & Plan. A maior parte da função constrói essa solicitação e, em seguida, interpreta-a.

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];

As opções de HTTPS a seguir são principalmente as informações padrão que poderiam ser especificadas na URL, mas há algumas exceções. O campo auth é o nome de usuário e a senha. Também há dois campos de cabeçalho que são importantes para solicitações REST: Content-Type, que especifica o tipo da solicitação (e o formato de dados adicionais, se houver algum) e Accept, que especifica o formato para a resposta.

	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"
  			}
	};

O fragmento a seguir envia a solicitação e declara a função a ser chamada com a resposta. No entanto, esta função é chamada assim que Node.js recebe o cabeçalho da resposta do servidor, o qual é muito prematuro para ser útil. Felizmente, toda vez que parte do corpo HTTP é recebido por meio do TCP, a resposta emite um evento de dados. Portanto, para obter o corpo inteiro, eu incluo os dados de todos esses eventos.

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

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

Quando a conexão HTTP é encerrada após o corpo inteiro ser entregue, a resposta emite um evento end . Como o cabeçalho HTTP Accept especificou JSON como o formato dos dados, use JSON.parse() para interpretá-lo. Os campos oslc_cm:results contêm todos os resultados da consulta, todos os itens de trabalho. A primeira entrada (numerada como zero) é aquela que usamos, embora qualquer outra também funcionasse se houvesse várias entradas. Para identificar a categoria, use o valor rdf:resource dentro da estrutura rtc_cm:filedAgainst .

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

Em um ambiente de produção, armazenaríamos todas estas informações em um banco de dados e faríamos com que o usuário efetuasse login em uma conta para usá-las (não para recuperá-las; não há um motivo para fornecê-las ao navegador). No entanto, este não é um ambiente de produção. Neste caso, queremos que os usuários vejam os parâmetros e consigam usá-los em seus próprios aplicativos. Para fornecer estas informações, o aplicativo configura cookies para esses parâmetros. (Para aprender como esses cookies são lidos pelo código JavaScript, consulte Cookies JavaScript no website 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>');
		});

Etapa 3. Envie alertas ao Track & Plan

A etapa final é enviar os alertas ao Track & Plan, usando a interface REST. A função que faz isto é sendNotice(msg, conf). O parâmetro conf é a configuração, o qual é fornecido como a consulta enviada à "página" da web em /login.

O segmento a seguir mostra o relatório que é enviado ao Track & Plan. Nenhum dos tipos de Track & Plan corresponde a um alerta de segurança, portanto, eu escolhi o mais próximo, task. O campo dc:subject tem as tags para a tarefa que, nesse caso, são security e alert.

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

As opções de HTTPS são autoexplicativas. Estamos criando uma nova entidade, portanto, o método HTTP é POST. O campo auth contém a autenticação para o Track & Plan. Normalmente, este valor seria explícito no código ou um parâmetro (consulte a Etapa 5 em "Desenvolva um aplicativo do Facebook de autopostagem com o Bluemix e a pilha do MEAN, Parte 3"). Neste caso, ele é feito de itens de configuração fornecidos pelo usuário, de modo que você possa ter o log de aplicativo para seu próprio Track & Plan, no qual é possível ver os resultados, em vez do meu, no qual você não pode.

Os dois campos de cabeçalho adicionais são usados no REST para descrever o tipo de aplicativo da solicitação e o formato solicitado da resposta.

	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, a seção a seguir envia a solicitação HTTPS ao Track & Plan. A solicitação não possui um retorno de chamada, porque não estamos preocupados com a resposta. Ela apenas fornece os detalhes do novo item de trabalho que criamos. A linha seguinte grava o relatório no formato JSON, no corpo da solicitação HTTP. A linha final finaliza as solicitações e o envia.

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

Tente efetuar login no aplicativo de teste com credenciais inválidas. Você verá uma mensagem de erro.

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

Em seguida, acesse TRACK & PLAN na interface do IBM Bluemix DevOps Services e clique em INCOMING WORK. Clique no ladrilho para a nova tarefa para ver os detalhes do alerta.

Screen capture showing Incoming Work
Screen capture showing Incoming Work

Etapa 4: Designe o proprietário do item de trabalho automaticamente

Geralmente, é útil designar o proprietário de um item de trabalho automaticamente. Dessa maneira há alguém responsável e essa pessoa é informada quando o item de trabalho é aberto (assim como o criador).

  1. Primeiro, é necessário identificar o campo com o proprietário do item. Para fazer isso, crie um novo item de trabalho e o designe a alguém manualmente. É possível fazer isso a partir da interface com o usuário do Track & Plan, digitando o título unique_string @:<user name>.Screen capture showing title entered
    Screen capture showing title entered
  2. A próxima etapa é recuperar a lista de itens de trabalho manualmente. Utilize a mesma URL usada na solicitação POST na próxima etapa e use-a no navegador. Faça isto a partir do mesmo navegador usado na subetapa 1, na qual você já está autenticado. O navegador gerará uma solicitação GET, fornecendo a lista de chamados de trabalho abertos.
    https://hub.jazz.net/<Server ID>/oslc/contexts/<Project ID>/workitems
  3. Localize o item de trabalho que acabou de criar (ajuda se o título possuir uma sequência exclusiva nele). Como é possível ver na captura de tela a seguir, o campo é rtc_cm:ownedBy e, dentro dele, rdf:resource. Também é possível ver que o valor não é apenas o nome de usuário, mas uma URL que contenha o nome de usuário e outras informações. Anote este valor.Screen capture showing url with user name and other info
    Screen capture showing url with user name and other info
  4. Em seu código, modifique o relatório para incluir o campo rtc_cm:ownedBy (inclua o código nas linhas 9 a 10, substituindo o recurso por seu próprio 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 se o novo item agora possui o proprietário correto. O proprietário receberá um e-mail em poucos minutos.
Sceen capture showing security violation message
Sceen capture showing security violation message

Conclusão

Neste ponto, é possível enviar alertas de segurança de seus próprios aplicativos para o Bluemix Track & Plan. É possível usar esta ferramenta para falhas de autenticação (de usuários que não conseguem efetuar logon), violações de autorização (de usuários que tentam fazer algo que não têm permissão) e muito mais. Usando a técnica na Etapa 4, é possível especificar outros campos automaticamente, tal como a prioridade, um prazo final para resolver o problema e outras informações relevantes.


Recursos para download


Temas relacionados


Comentários

Acesse ou registre-se para adicionar e acompanhar os comentários.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Cloud computing
ArticleID=1032541
ArticleTitle=Gerencie alertas de segurança com o IBM DevOps Track & Plan
publish-date=05312016