Abhishek (20th minute), Mandeep Singh (28th) and Jugraj Singh (58th) scored for India, while South Africa's goals came from the sticks of Ryan Julius (33rd) and Mustapha Cassiem (59th).
Going by form and rankings, it was expected to be a cakewalk for India but it didn't turn out that way, courtesy South Africa custodian Gowan Jones, who dished out a superlative performance under the bar.
Had it not been for Jones' brilliant display, the score-line could have been much bigger in favour of the Indians. The Indians were on the offensive from the word go and dominated possession for majority of the first two quarters.
India had plenty of circle penetrations and chances in the first quarter but goals eluded them with Jones standing like a rock in front of the goal. He denied India's star drag-flicker Harmanpreet Singh from converting as many as four penalty corners in the first half to keep his side in the game.
Jones' anticipation and reflexes were a treat to watch as he pulled off save after save. Not only penalty corners, Jones was also solid in front of the goal from open play as he kept out Shamsher Singh's try from close range in the 10th minute after he was set by Akashdeep Singh.
Seconds later Jones pulled off another stunning reflex save to deny Akashdeep. South Africa looked to have got some rhythm in the second quarter and secured three penalty corners in quick succession but India's reserve goalie Krishan Bahadur Pathak was upto the task.
The deadlock finally broke in the 20th minute when Abhishek scored with a smashing reverse hit from top of the circle to finally beat Jones. Minutes later, Jones once again came to his side's rescue, blocking Amit Rohidas' fierce shot and then stopping Akashdeep's reverse shot.
But Indian team doubled its lead in the 28th minute through Mandeep, who scored a fine goal after being fed by Gurjant Singh. India secured another penalty corner two minutes after the change of ends but wasted it.
South Africa looked more determined after the change of ends and reduced the margin three minutes after restart through Julius who scored of a rebound from a penalty corner. Jones was in top form as he pulled off another fine save off Abhishek in the 38th minute.
South Africa were not to be bogged down as they penetrated the Indian circle now and then and secured some penalty corners but failed to breach the defence. In the 41st minute, Jones made another brilliant save to keep out Jarmanpreet Singh's effort from India's sixth set piece.
In the final quarter, India tried to play the possession game and focussed on defending as South Africa pressed hard. India's ploy worked perfectly as they managed to held on to South Africa's forward press.
With four minutes to go, South Africa withdrew Jones and India utilised the chance to extend their lead with Jugraj slamming home from a penalty corner. The Africans threatened India when Cassiem scored with a reverse hit to make it 3-2.
The Indians, however, managed to hold on to their lead to seal a final berth after 2014 edition, where they came second best to Australia. India will play Australia in the final on Monday after the defending champions beat England in the second semifinal.