read model in shared storage accessed directly by services


Would you consider it bad practice if a read model persisted to some shared storage, resulting from events produced by some aggregate residing in a service, is being accessed directly by other services?


are these other services also writing to this shared database, same tables?

No, they are only using the tablea for querying

this is a good reason to use it. Bring the data as close to the (querying) consumer as you can.

The alternatives would seem to be building some query layer on top maybe using rest or letting the other sevices subscribe to events and building their own readmodel..

So long as everyone understands the guarantees about what database will be consistent with what state, then yes. This is just what a read model is for!