The hosts fell behind to Paddy Jackson’s excellent try, the fly-half gliding through a gap after four minutes.
Jackson added the conversion, but then saw opposite number Dan Biggar chip away at the lead in the 13th and 27th minutes. Biggar put his side into the lead for the first time with a penalty after 30 minutes and added a fourth first-half goal to give Ospreys a 12-7 half-time cushion.
After Robbie Diack was sin-binned for illegally killing an Osprey attack, Bigger kicked his fifth penalty.
Irish referee Dudley Phillips awarded a penalty try after a series of Ulster scrum indiscretions. Biggar converted, adding a penalty to ensure the hosts were in no danger of losing.
Wing Richard Fussell added to Ulster’s misery by pouncing on a mistake on Ulster’s 22 and breaking free to score Ulster battled to earn a penalty try when Ospreys’ defence was punished as the visitors drove over their line. James McKinney — on as a replacement for Jackson — converted the score two minutes after he had entered the fray, but it was too little, too late for the visitors.
Scorers for Ospreys: Tries: Penalty, Fussell. Cons: Biggar, Morgan. Pens: Biggar 6.
Scorers for Ulster: Tries: Jackson, Penalty. Cons: Jackson, McKinney.
OSPREYS: B. Davies, Fussell, Isaacs, Bishop, Dirkson, Biggar, Webb, D. Jones, Hibbard, Jarvis, Gough, Goode, Smith, Tipuric, Thomas.
Replacements: Phillips for B. Davies (73), Morgan for Biggar (67), Parker for Webb (73), Griffiths for D. Jones (74), M. Davies for Hibbard (66), Rees for Jarvis (52), King for Goode (41), Bearman for Smith (62).
ULSTER: Payne, Gilroy, Spence, L. Marshall, Whitten, Jackson, P. Marshall, Fitzpatrick, Kyriacou, Cronin, Stevenson, Tuohy, Wannenburg, Henry, Diack.
Replacements: D’Arcy for Payne (53), McKinney for Jackson (76), McIlroy for P. Marshall (67), McAllister for Fitzpatrick (52), Brady for Kyriacou (56), Macklin for Tuohy (66), Barker for Wannenburg (66), Faloon for Diack (58).
Referee: Dudley Phillips (RFU).