New York (0-2-2) finished the match short a man after defender Brandon Barklage was sent off for taking down Patrice Bernier at the edge of the penalty area in the 74th minute.
The Red Bulls had a slight edge in ball possession, but the Impact dominated the scoring chances and wasted a handful of opportunities to pad the lead.
"We're in a good way now in terms of results," Impact captain Davy Arnaud said. "The performance was also better than last week against Toronto (a 2-1 win in their home opener). ... They had some fresh legs coming in and were pushing guys forward, but we stayed solid and ended the game well."
The Impact scored first for a fourth straight game in the 14th when goalkeeper Troy Perkins sent a long ball up the middle that was headed down to Bernier. The playmaker slipped a pass through the New York defense to Di Vaio, who beat Robles to the left side for his second goal of the season.
"This really stung," Robles said. "I felt like we did a lot of things good, but sometimes that's not good enough. "We all know it's a long season, but we don't want to be looking 10 or 15 games in and thinking 'OK, there's more of the season left.' It doesn't work that way.
The Red Bulls new signing from Paris St. Germain, Peguy Luyindula, played his first game at forward and had his side's best chance of the first half. Heath Pearce's attempt off Juninho's free kick was deflected by Perkins to the top of the box, where
Luyindula chipped it over the bar in the 38th minute. And Luyindula was in front again in the second, but only got a touch on a feed from the right side and was stopped by Perkins.
Thierry Henry wasn't available for New York because of a knee injury.
The Impact played their first two home games in Olympic Stadium and will move outdoors to Saputo Stadium for an April 16 match with Columbus.