본관은 경주(慶州). 자는 백심(伯深), 호는 운소(雲巢). 도총관(都摠管) 김주신(金柱臣)의 증손으로, 할아버지는 김후연(金後衍)이고, 아버지는 형조판서 김효대(金孝大)이며, 어머니는 정지익(鄭志翼)의 딸이다. 평안도관찰사 김정집(金鼎集)이 손자이다.
음보(蔭補)로 전랑(殿郎)에 제수되었으나, 그 뒤 여러 차례 특지(特旨)로 김제군수가 되었다. 1772년(영조 48) 정시 문과에 을과로 급제해 부교리(副校理)·보덕(輔德)·승정원동부승지를 거쳐, 1774년 승지가 되었다.
1783년(정조 7) 대사간을 거쳐 이듬해 영조의 즉위에 환갑을 맞아 경은가(慶恩家)로 인정받아 병조참판에 승진하였다. 1784년 경기도관찰사를 거쳐 1785년에 대사헌·총융사를 지낸 뒤, 이듬해 9월 형조참판이 되어 상왕대비의 호를 여러 대신들과 의논하였다.
1788년 황해도관찰사로 재직 중 우택(雨澤: 비로 인한 혜택)에 대한 장계를 늦게 올려 파직되었다. 1789년 다시 복직되어 대사간이 되고, 1790년 형조판서·비변사유사당상(備邊司有司堂上)을 지냈다.
같은 해 경기도관찰사로 재직시 도사(都事) 송익효(宋翼孝)가 조그만 잘못을 저지른 서리에게 곤장을 치는 남형을 행사하자, 왕에게 장계를 올려 파직시켰다. 한편, 사도세자의 능을 수원으로 옮기면서 수원부사에 제수되었다. 그 뒤 전라우수사 세 번, 경기감사 일곱 번, 총융사를 다섯 번 역임한 뒤 이조판서에 제수되었다.
1800년 순조가 즉위한 뒤 병조판서·예조판서·한성부판윤·판의금부사(判義禁府事)를 거쳐, 1808년(순조 8) 우의정, 1819년에 좌의정에 올랐다. 그 뒤 왕세자에게 글을 가르쳤으며, 1828년에는 영중추부사 겸 군자감도제조를 역임하였다.
천부적인 자질이 영민하고 성실해 낮은 관직이라도 성심껏 봉사하였다. 조정에 들어가면서부터는 제약(制約)과 법헌(法憲)을 스스로 준수해 임무를 다하였다. 또한, 경장(更張: 국가의 제도를 개혁함)을 좋아하지 않았으며 검약을 생활 신조로 삼았다.
70년 동안 삼조(三朝: 영조·정조·순조)의 신하가 되어 원로 정승의 반열에 올랐으며, 회방(回榜: 登科回甲)을 맞아 궤장(几杖)을 하사받기도 하였다. 관직에 물러나 있을 때에도 나라에 큰일이 있으면 왕이 언제나 자문을 구하였다.
안일한 생활을 구하지 않는 교훈을 실천에 옮기면서 귀감으로 ‘無求室(무구실)’이라는 세 글자를 써서 액자로 걸어놓고 교훈으로 삼았다.