From the utterance testing then you can see the KG is not considering any question to be relevant. So the ranking and resolvers only option is to go with the ML match.
The first step in the KG is to identify potential questions that have sufficient matching tags and terms in the path to the utterance. This is independent of the actual text in the question, so it is vitally important to pay attention to the words in the ontology nodes and the additional tags added to each question. The default is 50% coverage, so at least half of the tags and terms need to be present in the utterance for the KG to put the question on to a short list for further evaluation. For 5 terms, that means that at 3 must match.
If a question does not make that short list then it doesn’t matter if the words in the question match the utterance exactly or not. The question has already been discarded from consideration.
The second phase of the KG processing is to evaluate each of the short listed questions to see how similar the text of the question is to the utterance. This process generates a percentage score, and there are several thresholds that control how strict or lenient you want the bot to be. One debugging tip for earlier KG development is to move the minimum (orange) level for knowledge tasks all the way down, say 5%. This will allow more diagnostic information to be available in the Utterance Testing page on the Knowledge Graph box.
Now I can’t tell what synonyms you may have defined for the various tags and terms for your questions, but at first blush then “Security” looks like it is not contributing anything, and maybe not “ported”. I would also be very careful with multi word ontology nodes, they can be a little tricky.
Another tip, if you are always adding the same word as a tag to a question then it is likely to be a good candidate to be part of the ontology instead so that you can save yourself some effort and simplify the synonym maintenance.