Boolean modifiers can save you a lot of work in some cases but often times can add more work than is necessary.
You could try making the holes with the boolean modifier and see what happens. When applying smooth shading on ngons, it gives some funky results unless you add edge loops and slide them in using GG.
However you make the holes just make sure your mesh looks nice if you want to use smooth shading.
One idea would be to select the vertices of all your keys in edit mode and press shift+D to duplicate them, P “Separate by selection” and then in object mode select them in the outliner and press M and move them to a new layer.
Next in edit mode, extrude them down along the Z axis a little and move them up slightly to ensure they go through the keyboard upper surface. Press P again and “Separate by loose parts”.
Then click on each object and set “Origin to Geometry”. Then scale them this way using the individual origin scale option and they should all scale around their origins. With them all selected, press Ctrl+J and join all the objects back together.
Now you can rename your new mesh “boolean key shape” and use this mesh instead of the keys themselves to cut the rescaled holes into your keyboard.