Mediauppspelning stöds inte på den här enheten
Tries av Tom Habberfield och Tyler Ardron, konverterade av Dan Biggar, gav hemmalaget en 14-punkts intervall ledning.
Ulster dominerade efter pausen, men Brendan Leonards försök såg matchen av före Jacob Stockdales sena poäng.
Ospreys behöver en punkt i sitt sista spel för att säkra en play-off plats medan Ulster måste slå Leinster för någon chans att göra de sista stegen.
De möter Scarlets den 6 maj med västra Wales regionen säkra i play-off platser efter en 30-8 seger över Connacht.
Femte plats Ulster kommer att behöva ett mirakel för att köra om Ospreys på fjärde plats och kommer att ångra antalet missade tillfällen efter pausen i Swansea om - som nu verkar troligt - de misslyckas med att göra spel-offs.
Stockdale slog det mesta av försvaret, bara för att se sitt sista pass gå till marken och senare sparkade bollen över de döda-ball linjen efter att ha överträffat omslaget.
Charles Piutau tappade bollen nära Ospreys linje när Ulster pressade hemlaget.
Men besökarna fick betala för sin ymnighet när Leonard korsade för Ospreys tredje försök två minuter före gången i en sällsynt andra halv attack.
När Stockdale gjorde praktiskt taget från omstart, det lämnade Ulster letar efter en andra försök och konvertering för att göra anspråk på en förlorande bonus punkt - bara för att förlora innehav vid ett sammanbrott för femtielfte gången.
Ospreys - kommer in i spelet efter tre på varandra följande liga nederlag - klarade en tidig storm och gjorde från praktiskt taget deras första attack som centrum Ashley Beck bundna i två försvarare för att skicka den omärkta Habberfield över i hörnet.
Paddy Jackson och Biggar utbytte straff innan den walesiska sidan tog kontroll i ledningen fram till halvtid med endast en kombination av bra Ulster försvar och deras egen brist på lugn hålla Ospreys i schack.
Men på halvtid såg Jackson hem fullt upp och Dan Evans öppnade försvaret innan han lämnade över till Habberfield som satte Ardron mellan posterna.
Konverteringen öppnade en 14-punktsklyfta som bättre återspeglade Ospreys dominans.
Det var Ulsters tur att dominera i andra halvan, men misstag och envis försvarare lämnade dem undrar vad som kunde ha varit - och står inför en allsmäktig utmaning i slutspelet hemma till Leinster.
Ulster scrum-halv Ruan Pienaar, som lämnar i slutet av säsongen, kan ha spelat sin sista match för provinsen efter att ha drabbats av en rygg spasm som såg honom lämna fältet under den första halvan.
Ulster chef för rugby Les Kiss sade: " Frustrerad och besviken - två ord som beskriver en hel del saker eftersom det finns en hel del smärta i det omklädningsrummet.
"Ruan [Pienaar] hade en rygg spasm innan spelet började, han sa att han skulle rida ut det men inom 20 minuter var det borta. Det är en ganska betydande spasm och dessa saker kan ta ett tag.
"Stu McCloskey hade ett dåligt dött ben och Stuart Olding blev träffad hårt med sin första beröring med en fotledsskada, det är förmodligen säsongen slut."
Ospreys: Dan Evans; Keelan Giles, Kieron Fonotia, Ashley Beck, Tom Habberfield, Dan Biggar, Rhys Webb (Capt); Nicky Smith, Scott Baldwin, Brian Mujati, Bradley Davies, Tyler Ardron, Sam Underhill, Justin Tipuric, James King.
Ersättningar: Scott Otten, Paul James, Rhodri Jones, Lloyd Ashley, Dan Baker, Brendon Leonard, Sam Davies, Josh Matavesi.
C Gilroy, A Trimble (capt), L Marshall, S McCloskey, C Piutau, P Jackson, R Pienaar; A Warwick, R Best, W Herbst, K Treadwell, A O'Connor, I Henderson, S Reidy, R Diack.
Ersättningar: R Herring, C Black, R Ah Du, F van der Merwe, N Timoney, P Marshall, S Olding, J Stockdale.
Domare: John Lacey (IRFU).
Biträdande domare: George Clancy (IRFU), Ben Whitehouse (WRU).
TMO: Neil Paterson (SRU).
För de senaste rugby facket nyheter följa @bbcrugbyunion på Twitter.
Ospreys överlevde en andra halv attack från Ulster till all-men kräva en plats i Pro12-spelen.