본관은 원주(原州). 자는 간보(幹甫). 아버지는 중추원부사 김을신(金乙辛)이다.
1411년(태종 11) 16세에 생원시에 합격하였다.
감찰·형조좌랑을 거쳐, 1428년(세종 10) 형조도관정랑(刑曹都官正郎)에 올랐으나, 형옥 관리를 잘못 처리하였다고 하여 고신(告身: 관리로 임명된 사람에게 주는 사령장)이 회수되고 귀양을 갔다.
그 뒤 관직에 복귀되어 지평(持平)을 지내고, 1442년 세종이 세자에게 정사를 대리시키고자 둔 첨사원(詹事院)의 동첨사(同詹事)가 되어 출납을 주관하여 세종의 신임을 받았다.
그러나 이조의 관원과 틈이 생겨 부평현령으로 좌천되었는데, 이 때 극심한 흉년을 만난 백성을 잘 진휼한 공으로 판사재감사(判司宰監事)에 발탁되고, 이어서 상호군(上護軍)에 올라 지형조사(知刑曹事)를 겸하였다.
그 뒤 호조·예조·형조의 참의를 거쳐 1452년(문종 2) 가선대부(嘉善大夫)에 올라 전라도관찰사가 되었으며, 이어서 공조참판·대사헌·한성부윤을 역임하고, 다시 외직으로 나가 경기도관찰사·경상도관찰사로서 선정을 폈다.
그 뒤 대사헌·한성부윤을 재차 역임하고, 1467년(세조 13) 중추부지사(中樞府知事)로서 봉조하(奉朝賀)가 되었다. 성품이 단아하고 근실하여 공무에 충실하였으며, 언행을 함에 있어 도리에 어긋나지 않았다. 시호는 대경(戴敬)이다.