Patrick Thoresen redirected a shot in front of the net to pull the Norwegians within a goal on a power play 22 seconds into the third. Drew Doughty restored the two-goal lead 1:25 later in the period with a backhander.
"Kind of a bad first period, we knew we weren't going to be perfect," Doughty said. "But the most important thing is we got better as each period went on and that's what we were looking for."
Canada's Carey Price made 19 saves in his Olympic debut, which included a giveaway that led to the only goal he allowed.
"Other than that, he was solid," coach Mike Babcock said.
Goaltender Roberto Luongo, who helped the Canadians win gold in 2010 as the host nation, is scheduled to start Friday's game against Austria. Babcock said Mike Smith will be in uniform as his backup.
The star-filled team likely will not be tested until it faces Finland on Sunday in the third game of the round-robin preliminaries.
Lars Haugen made 35 saves for the Norwegians.
For the second straight Olympics, the Canadians opened against Norway and entered the second period in a scoreless tie. But this time Canada didn't go on to rout the overmatched team as it did last time with an 8-0 victory.
"We've taken a lot of steps as a hockey nation, and as a team," Haugen said. "We're a lot better than we were four years ago, and I think we showed that."
The Canadians were in control for most of the game.
Weber's slap shot — perhaps the hardest in the world — broke the scoreless tie at 6:20 of the second period. Benn scored from the left circle off a slick, cross-ice pass from Patrice Bergeron, who also had an assist on the first goal.
Early on, Canada looked as if its talented players — all of them in the NHL — were slowed by jet lag. It had only one more shot than Norway in the scoreless first period.
"They are a hard team to play against because they don't take a lot of chances," Canada forward Martin St. Louis said.
In the second, the Canadians stepped up the pressure when they had the puck and didn't give up a shot for about 18 minutes.
Canada was so dominant midway through the game that it appeared to be on a power play during even-strength situations, but the Norwegians didn't trail by more than a goal until Benn scored.
Norway, meanwhile, has only one player from the world's top hockey league: New York Rangers forward Mats Zuccarello.
"Every team here is good, and we know we have to get better as things go on," Sidney Crosby said. "But I thought second and third we definitely got to our game a lot more."
Norwegian defenseman Mats Trygg had an undisclosed injury during the third period, and coach Roy Johansen didn't know if it was serious enough to keep him out of future games. As Trygg was trying to get off the ice, he fell after an official ran into him. A teammate helped him get to the bench, pushing him from behind as he slid on his knees.