The Spanish side is second on four points, six behind the Belgians and one ahead Porto and Bayer Leverkusen, which has a game in hand and will play each other later on Wednesday.
Brugge were lively in the first half but ran out of steam after the break and then held on in the closing stages as Atletico tried in vain to open up the visitors, who had Kamal Sowah sent-off late on.
Former Liverpool goalkeeper Simon Mignolet was named player of the match after he made a series of stops in the second half, including two close-range saves in added time to deny Alvaro Morata.
“This is a dream! We fought until the end and we finally did it,” Mignolet told UEFA’s website.
“In previous years, it just didn’t work out for us. We felt this year would be different – and now qualification is ours.
“But our story doesn’t end here: let’s see how far we can go.”
Atletico manager Diego Simeone left star Portuguese forward Joao Felix on the bench for the entire 90 minutes.
The Argentinian manager instead opted to start Antoine Griezmann and Angel Correa up-front, bringing Morata and Matheus Cunha on from the bench later on.
But Brugge attacked Simeone’s defensive block and constantly broke their lines with dangerous through balls and quick counters in the first half.
With Atletico in control, Brugge was awarded a penalty but the decision was overturned by the VAR as Tajon Buchanan stepped on Nahuel Molina’s ankle before the Argentinian tripped him inside the area.
Atletico had another goal ruled out right after the break when Angel Correa was adjudged offside.
The host dominated possession late on and applied relentless pressure after Sowah was shown his second yellow card for kicking the ball into the stands after play had stopped.
Yet Mignolet made several saves to keep the game goalless and seal Brugge’s qualification.