Using aria-describedby, aria-invalid, aria-required, and a global message (role="alert") outside the form that gets focus on failed validation.
aria-describedby
aria-invalid
aria-required
role="alert"