Resuming after lunch at 404-5, the tourists defied a painfully slow over-rate by the Indians to add 97 runs from 27 overs in the afternoon session.
Amla's seven-hour vigil on the slow wicket ended in a run-out midway through the session, but there was no respite for the tired Indian attack as Mark Boucher hit an unbeaten 62.
Boucher, who survived a loud shout for leg-before against Shanthakumaran Sreesanth when he was on 10, put on 99 for the sixth wicket with Amla.
Morne Morkel was the other batsman at the crease on 25, having so far added 45 for the seventh wicket with Boucher to increase India's misery under the hot sun.
The 24-year-old Amla hit 20 fours in his fourth Test century, but fell short of his career-best of 176 not out against New Zealand in Johannesburg last year.
Amla, who was on 85 overnight, reached his hundred half-an-hour after the start of the day's play with the last of his three cover-driven boundaries in one over from seamer Sreesanth.
Amla and his overnight partner Abraham de Villiers hammered 53 in as many minutes, 34 of those runs coming from the rampaging blade of de Villiers.
The right-hander slammed eight boundaries before he edged Sreesanth to wicket-keeper Mahendra Dhoni in the fifth over with the second new ball.
De Villiers contributed a hard-hitting 44 in a 66-run stand for the fifth wicket with Amla.
Indian captain Anil Kumble was forced to claim the second new ball after the first three overs of the day from the spinners fetched 19 runs.
But the slow wicket hampered both Sreesanth and his new ball partner Rudra Pratap Singh, who has so far gone wicketless in 23 overs that have cost 111 runs.
Sreesanth went for 1-104 and off-spinner Harbhajan Singh conceded 139 runs from 38 overs for his two wickets.
Kumble was the only bowler to escape severe punishment, his 41 overs costing 97 runs for two wickets.
South Africa took advantage of winning the toss and batting first, with Neil McKenzie making 94 and captain Graeme Smith 73 on the first day.