Put into bat, the tourists rode Kohli's classy knock to post 188-3 and then returned to skittle out Australia for 151 for a morale-boosting win barely six weeks before the Twenty20 World Cup at home.
Australia began well with Aaron Finch scoring freely before Jasprit Bumrah (3-23) dismissed David Warner (17) and then the Indian spinners took over.
Ravindra Jadeja (2-21) dismissed Steven Smith and Ravichandran Ashwin (2-28) sent back Finch (44) to derail Australia's chase and the hosts eventually folded in 19.3 overs.
It was an inspiring bowling effort by the tourists after their repeated failures to defend 300-plus totals in the preceding one-day series, which Australia won 4-1.
Kohli's unbeaten 90 was the bedrock of India's innings after Australia captain Aaron Finch won the toss and opted to field.
Indian openers milked 40 runs of the first four overs before Shane Watson pegged them back with a double strike.
The 34-year-old blond dismissed the dangerous Rohit Sharma (31) with his first delivery and Shikhar Dhawan (five) with his fifth.
Kohli and limited-overs specialist Suresh Raina (41) steadied ship with a 134-run stand spread over nearly three-fourth of the visitors' innings.
Raina initially struggled to get going but Kohli displayed sublime touch that has been the hallmark of his batting of late.
James Faulkner castled Raina but Kohli remained unbeaten after a chanceless 55-ball innings that included two sixes and nine boundaries.
Mahendra Singh Dhoni's hard-hitting prowess has looked on the wane in the ODI series but the India captain drilled the first ball he faced from Faulkner for a six and followed it with a boundary as India settled for a competitive total.
Playing his first international match in nearly five years, Australian paceman Shaun Tait began with a 150 kmh delivery but sent down six wides and bled 45 runs in his four overs without any success.
India's left-arm paceman Ashish Nehra, who like Tait had not played an international match since the 2011 World Cup, made a better comeback, claiming a wicket and taking a skier to dismiss Watson.
Melbourne hosts the second Twenty20 International of the three-match series on Friday.