Beispiel: Integration von TTS trax mit Issue-Trackern
Beachten Sie, dass Beispiele nur der Veranschaulichung dienen: Eine Beispiel-ERD unverändert zu übernehmen wird in Ihrem System ziemlich sicher nicht funktionieren!
Beispiel: Integration von TTS trax mit Issue-Trackern
Im IT-Betrieb werden eine Vielzahl von Issues und Incidents behandelt: von der Korrektur von Fehlkonfigurationen bis hin zur Abwehr von Cyberattacken. Je nach Schwere dieser Incidents entsteht hieraus eine Aktivität im ISMS, um diese Probleme zukünftig zu verhindern oder immerhin frühzeitig zu erkennen oder zu behandeln.
Dafür ist es notwendig, einen möglichst reibungslosen Informationsaustausch zwischen IT-Betrieb und Informationssicherheitsorganisation zu etablieren.
TTS trax unterstützt Sie mittels einer einfach zu verwendenden Schnittstelle dabei, ein Ticketsystem an das Modul „Kontinuierlicher Verbesserungsprozess“ anzubinden und somit Vorfälle, die Auswirkungen auf das ISMS haben, automatisch vom IT-Betrieb an TTS trax zu übergeben.
In dieser Showcase möchten wir Ihnen diese Integration am Beispiel des Issue Trackers YouTrack zeigen, das grundlegende Konzept lässt sich aber auf beliebige Ticketsysteme anwenden.
Vorgesehene Integration
Die Bedingungen, welche Tickets nach TTS trax geschickt werden sollen, können Sie beliebig an Ihre Business-Anforderungen anpassen.
Wir gehen hier davon aus, dass alle Tickets, die eine Schwere (Severity) von „High“ erhalten haben, eine weitere Bearbeitung in TTS trax erfordern, da aus diesen weitere Maßnahmen im ISMS resultieren können.
Vorbereitungen in YouTrack
Neben dem Feld Severity fügen wir dem YouTrack-Projekt ebenfalls ein Feld namens Reported vom Typ „Datum und Uhrzeit“ hinzu, das genutzt wird, um zu speichern, welche Issues bereits an TTS trax geschickt wurden und somit nicht erneut angelegt werden müssen.
Definition des Postfachs in TTS trax
Zur Verwendung der Schnittstellen muss in TTS trax ein Postfach definiert werden. In der Externen Ressourcen Definition (ERD) zu diesem Postfach werden die Felder definiert, die über die API erfasst werden, zusammen mit der entsprechenden Abbildung zur Erzeugung eines KVP-Eintrags in TTS trax. Dies kann durch eine grafische Oberfläche erfolgen.
Durch diese freie Definition können Sie eine Vielzahl von unterschiedlichen Attributen über die Schnittstelle aufnehmen, ohne dass diese eine eindeutige Entsprechung in trax haben. In diesem Beispiel wurde z.B. noch ein Feld für die Ticket-URL hinzugefügt, so dass aus TTS trax direkt das entsprechende Ticket aufgerufen werden kann:
Die ERD aus unserem Beispiel können Sie hier herunterladen: [Download-Link zur ERD]
Sie können die verwendete Externe Ressourcen Definition als Basis für Ihre eigene Integration verwenden – die integrierte Quelltextansicht des Editors ermöglicht es Ihnen, ohne viel manuelle Arbeit eine vorgefertigte Definition zu hinterlegen: Kopieren Sie dazu den Quelltext und fügen Sie ihn in der Quelltextansicht des ERD-Editors in TTS trax ein. Passen Sie die Vorlage anschließend an Ihr System an.
Definition des Workflows in YouTrack
Um nun dafür zu sorgen, dass entsprechend priorisierte Tickets von YouTrack an TTS trax weitergegeben werden, kann in YouTrack das Workflow-System verwendet werden.
Hier wird eine Regel definiert, die bei Änderung des Tickets ausgeführt wird:
Der folgende Code kann nun verwendet werden, um nun das Ticket an TTS trax zu verschicken:
/**
* Send issues with a high severity to TTS trax.
* Before using this workflow, make sure to set up a postbox in TTS trax and generate an API token.
*/
const entities = require('@jetbrains/youtrack-scripting-api/entities');
const http = require('@jetbrains/youtrack-scripting-api/http');
const apiToken = '';
const apiUrl = '';
exports.rule = entities.Issue.onChange({
title: 'Create-issue-in-trax',
guard: (ctx) => {
// Only trigger this action, if the ticket has a high severity, is not a draft anymore and was not sent to TTS trax yet.
return ctx.issue.fields.is(ctx.Severity, ctx.Severity.High) && !ctx.issue.fields.Reported && ctx.issue.isReported;
},
action: (ctx) => {
const issue = ctx.issue;
const id = issue.id;
const attributes = {
'name': issue.summary,
'description': issue.description,
'source': '6',
'classification': '3',
'contact': ctx.currentUser.email,
'issue_url': issue.url
};
// Mark field as reported, so that we do not create a CIP issue more than once
issue.fields.Reported = Date.now();
// Send HTTP request to the TTS trax API
const connection = new http.Connection(apiUrl, '', 10000);
connection.addHeader('Content-Type', 'application/json');
connection.addHeader('Accept', 'application/json');
connection.addHeader('Authorization', 'Bearer ' + apiToken);
const response = connection.postSync('', '', JSON.stringify({
"data": [
{
id: id,
attributes: attributes,
}
]
}));
if (!(response && response.isSuccess)) {
console.log(response.toString());
}
},
requirements: {
Reported: {
type: entities.Field.dateTimeType,
},
Severity: {
type: entities.EnumField.fieldType,
name: 'Severity',
High: {},
Medium: {},
Low: {}
}
}
});
Hier ist lediglich ein API-Zugriffstoken in den Postfach-Einstellungen zu generieren und zu Beginn des Workflow-Skripts zusammen mit der URL für den „Erstellen“-Endpunkt des Postfachs in die Variablen apiToken sowie apiUrl einzufügen.
Wird nun ein Ticket mit einer hohen Schwere versehen, wird das Ticket automatisch an TTS trax übertragen:
Zusammenfassung
Issues/Tickets, die mit einer Severity von „High“ versehen werden, werden nun automatisch als KVP-Einträge in TTS trax aufgenommen. Das gezeigte Vorgehen ist bei weitem nicht das einzige: Es kann auch eine Integration gebaut werden, bei der das Ticket erst durch eine manuelle Aktion an TTS trax geschickt wird.
Des Weiteren können auch weitere Felder übertragen werden, wie das Aufnahmedatum. Auch Aktualisierungen an Ticket-Attributen können nun übertragen werden.
Die Integrationswege sind zahlreich. Über die Postfächer bietet TTS trax Ihnen die Möglichkeit beliebige Drittsysteme anzubinden.