Enzymes are powerful tools for protein labelling due to their specificity and mild reaction conditions. Many protocols, however, are restricted to modifications at protein termini, rely on non-peptidic metabolites or require large recognition domains. Here we report a chemoenzymatic method, which we call lysine acylation using conjugating enzymes (LACE), to site-specifically modify folded proteins at internal lysine residues. LACE relies on a minimal genetically encoded tag (four residues) recognized by the E2 small ubiquitin-like modifier-conjugating enzyme Ubc9, and peptide or protein thioesters. Together, this approach obviates the need for E1 and E3 enzymes, enabling isopeptide formation with just Ubc9 in a programmable manner. We demonstrate the utility of LACE by the site-specific attachment of biochemical probes, one-pot dual-labelling in combination with sortase, and the conjugation of wild-type ubiquitin and ISG15 to recombinant proteins.