South Africa extend unbeaten run
Kenyan referee Samwel Kipngetich also awarded the South American visitors a spot-kick as South Africa extended their unbeaten run to 10 games since Carlos Alberto Parreira returned as coach.
A sell-out crowd of around 70,000 at Soccer City provided a taste of the atmosphere to come at the opening World Cup game on June 11 but the home side's performance did not match the expectations.
Teko Modise was allowed to take his 18th-minute penalty twice after the initial effort was saved when the linesman adjudged Colombia goalkeeper David Ospina had moved off his line before the kick was struck.
Three minutes later the visitors were awarded a penalty after a clumsy challenge by goalkeeper Itumeleng Khune and it was converted by Giovanni Moreno.
South Africa went ahead again in the 58th minute when Mario Yepes was adjudged to have tripped Siphiwe Tshabalala, although it seemed a harsh decision, and Katlego Mphela scored from the spot.
Defender Tsepo Masilela made a telling tackle to deny Colombia an equaliser and in the closing stages substitute goalkeeper Moeneeb Josephs made several saves to keep the South Africans ahead.
The World Cup hosts next play Guatemala in Polokwane on Monday in their penultimate warm-up before the start of the tournament.