자는 정고(貞固). 양주(梁州) 의춘현(宜春縣) 출신. 할아버지는 통사사인(通事舍人)을 지낸 김연(金衍)이며, 아버지는 급사중겸직한림(給事中兼直翰林)을 지낸 김지(金贄)이다.
과거에 급제한 뒤 좌습유(左拾遺)가 되었다. 1015년 왕가도(王可道)를 도와 김훈(金訓)·최질(崔質)의 난을 진압하여 공신이 되었고, 다음 해에는 중추직학사(中樞直學士)에 올랐으며, 1020년 송나라에 사신으로 다녀온 뒤, 1021년에 이부시랑(吏部侍郎), 이듬해에 중추부사(中樞副使)가 되고, 1020년 의춘현개국남(宜春縣開國男)에 봉하였고 식읍 300호를 받았다.
1027년 중추사가 되고, 1030년 5월 태자소부(太子少傅), 이어 참지정사(參知政事)에 이르렀다.
왕의 측근에 있으면서 공을 많이 세워 김맹의 죽음에 왕이 크게 슬퍼하고, 아들 김덕부(金德符)를 특별히 등용하였다. 문종 때 태자태사 문하시중(太子太師門下侍中)에 추증되었다. 시호는 문정(文定)이다. 영암사적연국사비(靈巖寺寂然國師碑)를 지었으며, 천안시 홍경사의 공사를 감독하였다.