See: https://github.com/godotengine/godot/issues/6826
Basically they designed Godot's input action system around the assumption that you would be using modifier keys as modifiers and never like normal keys. Presumably because that's how editors usually work. But of course that screws over anyone who wants all the keys to just work like keys. It sounds like they may have fixed it, but I haven't tried a recent build yet.
If you want to use an older or official release version, you can solve this by bypassing the input action map and dealing with key input directly. This little snippet will print out the name of the key for each event and if it was pressed or released (ignoring key repeats, or "echoes").
func _input(event):
if event.type == InputEvent.KEY and not event.is_echo():
var state = "pressed"
if not event.pressed: state = "released"
print(OS.get_scancode_string(event.scancode) + " " + state)
You could set up your own global input map script with the scancodes if you want things to be less hard-coded.
The only trouble comes if you want customizable bindings that may not be keys—mouse buttons, mouse movement, gamepad joystick axes, or gamepad buttons. You'll just have to do some more work to remember and check what kind of input you're getting, rather than just needing the key scancode. Of course you have to do that with Godot's built-in input map too, so I guess it's a moot point.