본관은 강릉(江陵). 자는 사필(士弼). 김득원(金得元)의 증손으로, 할아버지는 김홍주(金弘柱)이고, 아버지는 예조판서 김시환(金始煥)이며, 어머니는 유정기(兪鼎基)의 딸이다. 영의정 김상철(金尙喆)의 사촌형이며, 동생은 예조판서 김상성(金尙星)이다.
1725년(영조 1) 정시 문과에 병과로 급제하여 1729년 지평(持平)·정언(正言)이 되었다. 1732년 충청도어사를 거쳐 수찬(修撰)·교리(校理)·헌납(獻納) 등 청환직(淸宦職)을 두루 역임하였다. 1735년 이조좌랑, 이듬해 세자시강원필선(世子侍講院弼善)을 거쳐 대사간에 오르고, 1738년에 승지, 1750년에 경기도관찰사·대사헌 등을 지냈다.
1757년에는 사은부사가 되어 청나라에 다녀왔다. 1759년 도승지, 1763년 지경연사(知經筵事), 1765년 강화유수를 거쳐 1767년 기로소에 들어가 봉조하(奉朝賀)가 되었는데, 형제숙질 가운데 기사(耆社: 기로소의 다른 이름)에 들어간 사람이 6인이나 되어 세상에서 복문(福門)이라 일컬었다.