The 53-year-old was given the job on a temporary basis in February, following the sacking of Claudio Ranieri.
Shakespeare, who has only worked as caretaker or number two, was Ranieri's assistant after joining the club under former Foxes boss Nigel Pearson.
"This is a really exciting opportunity for me to continue along this new path in my career," said Shakespeare.
"Our preparations for pre-season and the new Premier League campaign have been ongoing for some time, but we can now move on with certainty and ensure we are well equipped to compete at the levels now expected of a club like Leicester City."
Shakespeare won eight of his 16 games in charge last season, leading the club to the Champions League quarter-finals.
As reigning Premier League champions, Leicester were one point above the relegation zone with 13 matches left when Ranieri departed.
But Shakespeare collected 23 points, including wins in all his first five games, to guide the club to 14th place.
Leicester beat Sevilla in the last 16 of Europe's elite club competition, but were knocked out in the next round by Atletico Madrid.
City vice-chairman Aiyawatt Srivaddhanaprabha added: "Craig has shown all the qualities in leadership, motivation and talent management that are required to be successful in this role.
"Those qualities, aligned with his first-class coaching acumen, his knowledge of Leicester City and its philosophy, and the respect he has earned at every level of the club make him the ideal choice to help take us forward."
Leicester City have named caretaker boss Craig Shakespeare as their permanent manager on a three-year deal.