The 20-year-old becomes the 13th summer arrival at Norwich and will wear the No 21 shirt.
“It’s a massive club and I like the way they play," Williams told the club's official website.
“The club like to play out from the back and play football. That really inspired me to come here, and I think the head coach can really improve me as a player."
The left-back made his Premier League debut in October 2019 and has played in 21 matches in the competition, scoring once.
He has also featured in both the UEFA Champions League and Europa League.