The draft bill was approved by a vote of 50 to 25 in the upper house of parliament in the Netherlands, the only EU state yet to ratify the pact aimed at steering Ukraine away from its former Soviet masters in Moscow.
"This is the last parliamentary step," for the amended deal to be approved, senate spokesman Gert Riphagen said.
Dutch Prime Minister Mark Rutte, whose liberal VVD party won a general election in March, sought a compromise after Dutch voters rejected the initial pact in an April 2016 referendum.
Rutte is now expected to return to Brussels with the Dutch go-ahead once the measure is signed into law -- perhaps as early as Thursday.
In Brussels European Commission president Jean-Claude Juncker said, "Our Association Agreement... is now one step closer to being ratified."
The vote sent "an important signal from the Netherlands and the entire European Union to our Ukrainian friends: Ukraine's place is in Europe. Ukraine's future lies with Europe," Juncker said in a statement.
He added that he would like to see the process finalized in time for the EU-Ukraine summit in July.
Dutch officials said European bodies expected the accord to enter into force around September 1.
In Kiev, Ukraine's President Petro Poroshenko thanked Rutte and his country for their support.
"The path to this point was long and much more complicated than Ukraine imagined at the start of the process," Poroshenko said on his Facebook page.
But he hailed the treaty as "a guarantee of our freedom, independence and territorial integrity. Europe is our civilizational choice."
The original treaty deal was opposed by eurosceptic groups in the Netherlands who forced the issue to a referendum.
About 60 percent of voters rejected the treaty, though turnout was barely above the 30 percent needed for the results to be validated.
The rejection dealt a blow to Rutte and his coalition government at a time when the Netherlands was at the helm of the EU's rotating presidency.
Rutte managed to work out a compromise deal that limits the EU's defence commitments to Ukraine and does not provide any guarantees to Kiev of full EU membership in the future.
The lower house of parliament had approved the amended pact by a large majority in February.
Rutte, however, has caught flack from opposition politicians and the organisers of the referendum, who accused the Dutch leader of ignoring the voice of voters by not rejecting the agreement out of hand.