Atletico sit fourth, six points clear of Real Betis in fifth, with three games left to play. Their better head-to-head record over Betis means they will be guaranteed to finish in the top four if Betis fail to win away at Valencia on Tuesday.
If Betis beat Valencia, Atletico can make sure of their spot themselves by winning away at Elche on Wednesday.
"It is very important to qualify and we have to get one more win in three games to achieve it," said Atletico captain Koke. "If we work like this, we'll get there."
Sevilla's place also looks almost sealed after a 1-1 draw away at Villarreal earlier on Sunday gave them a seven-point cushion over Betis.
Atletico had not beaten Real Madrid in La Liga since 2016 and not at home since 2015, while their last eight games in all competitions against their city rivals had brought two goals and no victories.
Ending that run will certainly bring much satisfaction to Atletico's fans and players but the bigger relief will be Champions League qualification, which has been in doubt for the duration of what has been an inconsistent and disappointing campaign.
Carlo Ancelotti made a raft of changes to his starting line-up as only Toni Kroos, Casemiro and Eder Militao remained from the team that pulled off the sensational victory over City.
It meant rare starts for the likes of Luka Jovic up front, Eduardo Camavinga in midfield and Jesus Vallejo at the back while Ukrainian Andriy Lunin made his first league appearance of the season in goal.
Lunin did nothing wrong but nobody stood out, with Camavinga out of sorts and Jovic replaced in the second half.
"We have rested some players, we have avoided problems, and we have given minutes to those who have had less," said Ancelotti. "It will be like this for the next few games."
Atletico's greater intensity showed in the first half as Angel Correa drove an early shot wide after a poor pass from Camavinga allowed Geoffrey Kondogbia to rob Kroos before Carrasco weaved through but flashed wide.
The goal came from another misplaced pass, this time from Marco Asensio in midfield, and as Matheus Cunha bore down on goal, he was squeezed out between Vallejo and Militao.
Atletico wanted a penalty and while the referee initially waved away appeals, he changed his mind after consulting the replay, with Vallejo deemed culpable. Carrasco slammed in the spot-kick.
Kroos shot wide and then Jovic's only contribution was to hit Jan Oblak when the ball spilled out to him after Rodrygo raced in behind.
Without the second goal, the tension grew and as every fresh opportunity went begging, the sense that Real Madrid might capitalise increased.
Carrasco fired over after Nacho Fernandez gave the ball away and then another Camavinga error gave Cunha a chance but his effort was saved.
Vinicius Junior, Modric and Fede Valverde all came on for the visitors but the pattern continued as Antoine Griezmann dragged wide and then Carrasco broke through, only to shave the outside of the post.
In the last 10 minutes, Valverde and Vinicius both tested Oblak, who then had to push Asensio's fizzing free-kick wide of the post. Nacho headed over Vinicius' cross from six yards out but Atletico held on.
Sevilla also took a step closer to finishing in La Liga's top four after Jules Kounde's 96th-minute equaliser snatched a 1-1 draw away at Villarreal.
Villarreal thought they had won it at La Ceramica when Giovani Lo Celso scored with four minutes of normal time remaining, but Sevilla grabbed a dramatic equaliser to boost their hopes of securing Champions League qualification next term.
After their superb run to the Champions League semi-finals, Villarreal are making a late push for next season's Europa League but Kounde's strike means they sit three points behind Real Sociedad in sixth.