After a goalless first half, Rahul KP put the Blasters ahead in the 68th minute as his low, marginally swerving shot went in off Laxmikant Kattimani. The Nizams struggled to find a way back but a half-cleared free-kick fell to substitute Sahil Tavora just outside the box in the 88th minute.
Tavora struck arguably the sweetest half volley of his career to bring Hyderabad FC level. Both they and Kerala Blasters pushed hard for a winner in regulation and extra-time but couldn't find one as the tense contest headed into the shootout.
Marko Leskovic, Nishu Kumar and Jeakson Singh all missed for the Tuskers, with only Ayush Adhikari finding the net. Meanwhile, only Javier Siverio missed for the Nizams, who scored through Joao Victor and Khassa Camara before Halicharan Narzary sealed the deal by sending Prabhsukhan Gill the wrong way.
It meant that Hyderabad FC won their first ever ISL title, while Kerala Blasters have now made it into three finals without winning the trophy.
Here are the player ratings from the match:
Laxmikant Kattimani - 8/10
Kattimani should've kept out Rahul's goal but more than made up for it with three big saves in the penalty shootout.
Akash Mishra - 7/10
Mishra dug in to help Hyderabad FC keep their opponents down to just one goal with six clearances, three tackles and three interceptions.
Juan Fernandez - 6.5/10
Fernandez looked composed at the back but should've closed Rahul down better for Kerala Blasters' goal.
Chinglensana Singh - 7/10
It was a typically solid performance from Chinglensana Singh, who managed to keep Alvaro Vazquez largely quiet. He won all eight of his duels and also made four clearances.
Asish Rai - 7.5/10
Rai made some adventurous runs going forward, laying out an impressive three key passes for Hyderabad FC. He also did a fantastic job at the back, recording four interceptions and four tackles.
Aniket Jadhav - 6/10
Jadhav's final product wasn't great and he was largely shut down by Khabra, barring one key pass.
Joao Victor - 7/10
Victor was excellent on and off the ball in midfield. He also looked as composed as ever at centre-back amid all the chaos and pressure. Victor dispatched his penalty with ease in the shootout.
Souvik Chakrabarti - 7/10
Chakrabarti did his job well in defensive midfield, making three tackles and an interception while also getting his side's first shot on target. However, he could've closed down Rahul better for Kerala Blasters' goal.
Mohammad Yasir - 6/10
Barring a few bright flicks and touches, Yasir was kept quiet by the Tuskers. He completed just two of his eight crosses and laid out a key pass.
Bartholomew Ogbeche - 7/10
Ogbeche grew into the match following a slow start, forcing Gill into multiple saves. He also initiated a few moves for Hyderabad FC by dropping deep and recorded a key pass as well.
Joel Chianese - 6/10
Chianese was kept quiet by the Kerala Blasters barring his involvement in a counter-attack. He was substituted in the 39th minute with an injury.
Javier Siverio - 6.5/10
Siverio came on for Chianese in the 39th minute. The Spaniard was a livewire and completed three dribbles while also forcing one save from Gill. However, he skied his penalty rather poorly in the shootout.
Halicharan Narzary - 7/10
Narzary came on for Jadhav in the 71st minute. His balls into the box were a threat and he also scored the winning penalty to give Hyderabad FC their first ever ISL title.
Sahil Tavora - 7.5/10
Tavora replaced Chakrabarti in the 71st minute. He brought the Nizams back into the match with a stunning volley in the 88th minute. Tavora went on to put in an excellent midfield display as well, recording a key pass, two tackles, an interception and five successful duels.
Khassa Camara - 6.5/10
Camara came on for Fernandez in the 85th minute. He helped win the ball back on multiple occasions and also coolly slotted home from the spot in the shootout.
Aaren D'Silva - 6/10
D'Silva replaced Yasir in the 85th minute. He worked hard on the ball but couldn't really deliver much quality in the final third.
Prabhsukhan Gill - 7/10
Gill made a number of fantastic saves to keep Kerala Blasters in the match.
Sandeep Singh - 6/10
Sandeep Singh was booked just four minutes into the match but did well defensively otherwise.
Marko Leskovic - 7/10
Leskovic was excellent at the back for Kerala Blasters and had the most touches in the match with 112. He also completed 84 passes and recorded six clearances, including one off the goal-line, two interceptions and a tackle.
However, his penalty in the shootout was saved fairly easily by Kattimani.
Ruivah Hormipam - 7.5/10
It was yet another disciplined display in defense from Hormipam, who hardly gave Hyderabad FC's attackers any space to operate with near the box. He made three tackles and won six duels.
Harmanjot Khabra - 7.5/10
Khabra did extremely well to keep Jadhav quiet and also popped up in attacking areas with two key passes. The Kerala Blasters right-back also made one incredible block from Siverio's shot in the second half.
Adrian Luna - 7/10
Luna has often delivered in big moments and put in another impressive display against Hyderabad FC. He saw a free-kick saved, recorded two key passes and also completed a dribble. It was a surprise not to see him take a penalty in the shootout.
Lalthathanga Khawlhring - 7/10
Puitea put in a fantastic performance and seemed to cover every blade of grass for Kerala Blasters. He won two fouls, two interceptions and a tackle.
Jeakson Singh - 7/10
Jeakson Singh was largely good in midfield, even getting the assist for Rahul's goal. He also hit the woodwork in extra-time with a header, while making three interceptions and a block.
However, his spot-kick in the shootout was weak and easily saved by Kattimani.
Rahul KP - 7.5/10
Rahul was slightly fortunate to score as the ball squirmed under Kattimani. However, it was deserved for his work-rate on the night, which saw him win eight duels and make an excellent four tackles.
Alvaro Vazquez - 6/10
Vazquez hit the crossbar with an incredible strike in the first half but was subdued otherwise. Hyderabad FC did a good job defending against him, though he did manage a shot on target and a key pass.
Jorge Pereyra Diaz - 6.5/10
Pereyra Diaz worked hard all night and even made a crucial tackle in the build-up to Kerala Blasters' goal. He also laid out two key passes for his teammates.
Nishu Kumar - 6/10
Kumar came on for Rahul in the 82nd minute. He had a couple of bright moments but saw his penalty saved in the shootout.
Chencho Gyeltshen - 6/10
Gyeltshen's pace worried Hyderabad FC's defense at times after he replaced Pereyra Diaz in the 92nd minute. He had a shot blocked as well.
Ayush Adhikari - 6.5/10
Adhikari came on for Khawlhring in the 98th minute. While he had a limited impact in extra-time, he was the only Kerala Blasters player to score in the shootout with an excellent penalty.
Vincy Barretto - N/A
Barretto showed off his pace at times after replacing Vazquez in the 115th minute, but didn't have a single touch of the ball.