Posey's solid offensive night backed a nice effort from Tim Hudson, who scattered five hits and allowed one run over seven innings.
Making his second career start against the Braves -- first since leaving Atlanta after the 2013 season, Hudson (3-4) bounced back from his last start in which he gave up eight runs at Colorado.
San Francisco ran its winning streak to five straight games.
Mike Foltynewicz (3-2) took the loss for Atlanta, yielding two runs and striking out a career-high eight in 6 2/3 frames.
Foltynewicz has been a strikeout machine of late, recording at least seven punchouts in his last five starts.
Freddie Freeman homered in the setback.
Posey started his evening with a two-run homer in the first that scored Joe Panik, who reached on an infield single earlier in the inning.
Atlanta got within one in the third when Jace Peterson singled to put runners at the corners before Cameron Maybin drove in Andrelton Simmons with a base hit.
Hudson allowed just one baserunner for the rest of his outing, then San Francisco added some insurance for the cagey veteran in the eighth.
Posey's ground-rule double brought home Panik and Brandon Crawford singled in Posey for a 4-1 edge.
Santiago Casilla polished off the win in the ninth for his 15th save of the season, despite allowing a homer off the bat of Freeman. Casilla did allow the winning run to come to the plate later in the inning, but Todd Cunningham grounded out to end it.
Atlanta has lost four of five ... While with Oakland in 2003, Hudson allowed two runs in eight innings of work in a no-decision ... San Francisco went 2- for-8 with runners in scoring position, while Atlanta went 1-for-3 in those cases.