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