The Rossoneri have made use of a clause which allowed them to bring the player in full-time from Villarreal after he spent the 2012-13 season on loan at San Siro
The Colombian spent last season on loan at San Siro and impressed during his spell back in Italy, prompting the Rossoneri to decided to activate their option to bring him to the club full-time.
"AC Milan announce that they have exercised their right buy Cristian Zapata from Villarreal," a statement on the club's official website read.
"The Colombian defender's contract will expire on June 30, 2016."
The 26-year-old began his career at Deportivo Cali in his homeland and first made the move to Serie A back in 2005.
He spent six years at Udinese before moving to El Madrigal in the summer of 2011 but Milan elected to bring him back to Italy before last season.
He made 23 league appearances for the club and recently revealed that he was desperate to remain at San Siro.