Arjen Robben opened the scoring for the champions when he drilled home after good work on the wing from Franck Ribery.
David Alaba made it 2-0 in first-half injury time when he curled a free-kick in.
Max Kruse pulled one back when he shook off Alaba before finishing, but the 15th-placed hosts could not equalise.
Bayern remain three points above RB Leipzig, who beat Hoffenheim 2-1.
Match ends, SV Werder Bremen 1, FC Bayern München 2.
Second Half ends, SV Werder Bremen 1, FC Bayern München 2.
Attempt missed. Thomas Delaney (SV Werder Bremen) right footed shot from outside the box is high and wide to the right.
Kingsley Coman (FC Bayern München) is shown the yellow card for a bad foul.
Foul by Kingsley Coman (FC Bayern München).
Florian Kainz (SV Werder Bremen) wins a free kick in the defensive half.
Kingsley Coman (FC Bayern München) wins a free kick on the right wing.
Foul by Zlatko Junuzovic (SV Werder Bremen).
Attempt saved. Joshua Kimmich (FC Bayern München) right footed shot from the left side of the box is saved in the bottom left corner. Assisted by Renato Sanches.
Corner,  FC Bayern München. Conceded by Fin Bartels.
Maximilian Eggestein (SV Werder Bremen) is shown the yellow card for a bad foul.
Kingsley Coman (FC Bayern München) wins a free kick in the attacking half.
Foul by Maximilian Eggestein (SV Werder Bremen).
Foul by Douglas Costa (FC Bayern München).
Fin Bartels (SV Werder Bremen) wins a free kick on the right wing.
Offside, SV Werder Bremen. Felix Wiedwald tries a through ball, but Lamine Sané is caught offside.
Foul by Kingsley Coman (FC Bayern München).
Florian Kainz (SV Werder Bremen) wins a free kick in the defensive half.
Attempt missed. Douglas Costa (FC Bayern München) left footed shot from outside the box is high and wide to the left. Assisted by Xabi Alonso following a fast break.
Foul by Kingsley Coman (FC Bayern München).
Niklas Moisander (SV Werder Bremen) wins a free kick in the defensive half.
Substitution, SV Werder Bremen. Florian Kainz replaces Santiago García.
Attempt missed. Serge Gnabry (SV Werder Bremen) right footed shot from a difficult angle and long range on the right misses to the left. Assisted by Fin Bartels.
Foul by Renato Sanches (FC Bayern München).
Zlatko Junuzovic (SV Werder Bremen) wins a free kick on the right wing.
Substitution, FC Bayern München. Douglas Costa replaces Franck Ribéry.
Foul by Xabi Alonso (FC Bayern München).
Santiago García (SV Werder Bremen) wins a free kick in the attacking half.
Offside, SV Werder Bremen. Niklas Moisander tries a through ball, but Serge Gnabry is caught offside.
Zlatko Junuzovic (SV Werder Bremen) is shown the yellow card for a bad foul.
Kingsley Coman (FC Bayern München) wins a free kick on the right wing.
Foul by Zlatko Junuzovic (SV Werder Bremen).
Santiago García (SV Werder Bremen) is shown the yellow card for a bad foul.
Joshua Kimmich (FC Bayern München) wins a free kick in the defensive half.
Foul by Santiago García (SV Werder Bremen).
Attempt blocked. Joshua Kimmich (FC Bayern München) header from the right side of the box is blocked. Assisted by Franck Ribéry with a cross.
Substitution, SV Werder Bremen. Fin Bartels replaces Robert Bauer.
Corner,  FC Bayern München. Conceded by Niklas Moisander.
Attempt missed. Max Kruse (SV Werder Bremen) left footed shot from the left side of the box is close, but misses the top left corner. Assisted by Maximilian Eggestein with a headed pass.
Substitution, FC Bayern München. Kingsley Coman replaces Arjen Robben.
Bayern Munich remain three points clear at the top of the Bundesliga after beating Werder Bremen.