The Katusha rider - who came second in the race last year - beat Sky Procycling's Sergio Henao in a photo finish.
"It was a very fast stage," said Moreno. "We were quite calm and still because we had Florencio in the breakaway, a rider who could win if the chase turned to be useless.
"In the last kilometer and 500 meters started the final uphill, and when the group neutralised the breakaway we decided to take the lead: first Vicioso, then Rodriguez imposed their pace for me, then I started my rush with 300 meters to go.
"I want to thank my team-mates: I won quite easily also thanks to their work, even if during the sprint a motorbike was in the middle of the route and I had to slow down."
1 Daniel Moreno (Katusha) 3:01:25
2 Sergio Luis Henao (Sky Procycling)
3 Matti Breschel (Rabobank)
4 Allan Davis (Orica-GreenEdge)
5 Nacer Bouhanni (FDJ-BigMat)
6 Fabio Taborre (Acqua & Sapone) at 2 seconds
7 Giovanni Visconti (Movistar)
8 Franco Pellizotti (Androni Giocattoli)
9 Johan Chaves Rubio (Colombia-Coldeportes)
10 Danilo Di Luca (Acqua & Sapone)