Иван Яснов родился 11 апреля 1924 года в селе Колычево (Клепиковский район Рязанской области) в семье лесника. Затем жил в д. Пестриково Коломенского района, окончил семь классов Коробчеевской школы, затем школу ФЗУ при Коломенском машиностроительном заводе. Работал слесарем-ремонтником.
С августа 1941 года – стрелок-ополченец 32-й армии Западного фронта.
С августа 1942-го воевал в рядах Красной армии.
В 1944 году окончил Горьковское танковое училище и с января 1945-го воевал командиром танка Т-34 на I Белорусском фронте. Участвовал в Висло-Одерской и Берлинской операциях. Был ранен.
В апреле 1944 года награжден двумя орденами Отечественной войны, II и I степени.
Командир танка 36-й танковой бригады 11-го танкового корпуса младший лейтенант Иван Яснов одним из первых 20 апреля 1945 года ворвался на линию вражеской обороны западнее озера Шермют-цель-зее (Германия). Подбив тяжелый танк противника, подавив огонь двух противотанковых орудий, уничтожив два взвода пехоты, экипаж первым ворвался в пригород Берлина Лихтенберг.
Указом Президиума Верховного Совета СССР от 31 мая 1945 года за образцовое выполнение боевых заданий командования и проявленные при этом мужество и героизм И. Яснову присвоено звание Героя Советского Союза.
После Победы Иван Макарович продолжал службу в составе Группы советских оккупационных войск в Германии, был назначен командиром танкового взвода.
28 декабря 1946 года убит в перестрелке с группой недобитых фашистов.
Похоронен в Берлине на Советском воинском захоронении в Панкове.
В Коломне установлен бюст Яснова на Аллее Славы.