John Dobson's side had to withstand a spirited challenge after surrendering a 10-0 advantage during the first half. Connacht struck twice late in the opening period to turn the game around and take a 12-10 lead into the break.
The Stormers had controlled much of the early contest, regularly threatening inside the hosts' 22, but failed to make their attacking pressure count.
Handling mistakes, disciplinary lapses and poor decision-making repeatedly undermined promising opportunities, including three line breaks that went unrewarded.
Their struggles continued after half-time. Seabelo Senatla was stopped short of the try line, while Jurie Matthee missed a straightforward penalty from in front of the posts. Sam Gilbert subsequently extended Connacht's advantage to 15-10 from the tee.
The visitors eventually found their response through their forwards, who increased the intensity and began imposing themselves physically.
Connacht could not cope with the pressure, and replacement prop Sazi Sandi crossed from close range to bring the Stormers level. Matthee's conversion put them 17-15 ahead.
The Stormers held their narrow advantage into the final 10 minutes before producing a decisive late burst. Two further tries secured the win and earned Dobson's team a maximum five log points, including the bonus point.
The result came despite pre-match setbacks, with Evan Roos and Marcel Theunissen both ruled out shortly before kick-off with hamstring and calf injuries respectively.
While the Stormers showed resilience to secure the victory, their wastefulness and inconsistent game management highlighted areas requiring attention during what promises to be a demanding campaign.